Panasonic CF-19 Toughbook | Touch Panel Calibration

panasonic-cf-19-toughbook

I don’t have loads of experience with using a touch screen interfaces on Linux but every setup to date has not required any fiddling around in any of the configuration files for proper operation. Thankfully, the folks at Panasonic made the CF-19 with some one-off technology to offer me that experience of understanding how to tweak and configure the touch panel interface.

The Problem

Everything about this machine configured perfectly from the openSUSE installer. Not a single component required extra prodding to use. Even the touch panel was recognized and somewhat usable, however the further away from the center of the screen you would touch, the further off the pointer was from where you touched.

Calibration Attempt One

Doing some searching on the webs, I came upon this tool called xinput_calibrator that creates a set of rules in xorg.conf.d folder (/etc/X11/xorg.conf.d/). It was a such a straight forward approach that I was sure it would work. Running it displays a screen with 4 cross-hair points of which you use the stylus to touch each of them. When it completes, you have a nice little configuration file to drop into xorg.conf.d. Unfortunately, it didn’t work at all.

Calibration Attempt Two

This method was not as easily understood or accomplished and brought with it a good share of trial and error.

First, I needed to find the input name of the touch panel. This was accomplished in my favorite terminal, Konsole:

> xinput list

⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Fujitsu Component USB Touch Panel id=9 [slave pointer (2)]
⎜ ↳ ImPS/2 Generic Wheel Mouse id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=10 [slave keyboard (3)]
↳ Panasonic Laptop Support id=12 [slave keyboard (3)]

Now that I identified that the touch panel was identified, I needed to find further information about the touch panel itself

> xinput list-props “Fujitsu Component USB Touch Panel”

Device ‘Fujitsu Component USB Touch Panel’:
Device Enabled (143): 1
Coordinate Transformation Matrix (145): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Natural Scrolling Enabled (280): 0
libinput Natural Scrolling Enabled Default (281): 0
libinput Calibration Matrix (282): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Calibration Matrix Default (283): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Left Handed Enabled (284): 0
libinput Left Handed Enabled Default (285): 0
libinput Middle Emulation Enabled (286): 0
libinput Middle Emulation Enabled Default (287): 0
libinput Send Events Modes Available (263): 1, 0
libinput Send Events Mode Enabled (264): 0, 0
libinput Send Events Mode Enabled Default (265): 0, 0
Device Node (266): “/dev/input/event6”
Device Product ID (267): 1072, 1282
libinput Drag Lock Buttons (288): <no items>
libinput Horizontal Scroll Enabled (289): 1

I had to modify the line containing the Coordinate Transformation Matrix:

Coordinate Transformation Matrix (145): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000

Some of those comma separated values corresponded to specific properties of the panel matrix. What I learned about those nine numbers that seem to matter:

Touch_area_width, 0, touch_x_offset, 0, touch_area_height, touch_y_offset, 0, 0, 1

I used some trial and error to get this to line up correctly. The best way I knew how to accomplish it was to concentrate on one axis at a time. First adjust the offset and then the width or height.

This is what I ended up with:

1.115, 0, -0.073, 0, 1.14, -0.04, 0, 0, 1

Using nano, I created a little script and called it fujitsu_touch_panel.sh

#!/bin/sh
# Coordinate touch panel to screen
xinput set-prop "Fujitsu Component USB Touch Panel" --type=float "Coordinate Transformation Matrix" 1.115 0 -0.073 0 1.14 -0.04 0 0 1

Saved it and made it executable:

chmod +x ~/bin/fujitsu_touch_panel.sh

Then I moved it to the root directory in a location that seems to make sense… to me:

sudo cp ~/bin/fujitsu_touch_panel.sh /usr/local/bin

I tried several things to get this script to start as soon as the login screen manager, SDDM, started but that was without success. I was advised to try this location: /usr/share/sddm/scripts/. I tired several things, all didn’t work. Perhaps it just may work for someone else and if they are successful, I would be more than happy to edit this post with a better way. Feel free to comment below or contact me.

What I ended up doing was to add a script on startup of KDE Plasma.

System Settings > Startup and Shutdown > Autostart

Select Add Script… and entered the location of the script:

/usr/local/bin/fujitsu_touch_panel.sh

Screenshot_20180422_093443Next, I needed an onscreen keyboard to use. Not that I am a fan of those, as I think they are all terrible, I needed one just to be functional.

sudo zypper in kvkbd

I had to change the color scheme to Dark, because the default was not to my liking, nor was it usable.

Screenshot_20180422_093912.png

It is kind of fun putting this computer into tablet mode and poking around on it with the stylus and also makes me think about how nice KDE Plasma works with a touch interface. It certainly would have been much more fun to play with this if it were a multi-touch interface instead but still, fun and very usable. I certainly prefer a real keyboard but I see the value of this setup.

Final Thoughts

This is a fine little machine that is great for taking to less hospitable (to electronics) type of environments. The keyboard is just a bit cramped for my liking and the touchpad is a bit on the small side. The touch screen, once properly calibrated works wonderfully and even better with a stylus. I will find out this year how well they hold up in a “field” type environment and perhaps blather about that experience.

This is yet another fine case of where openSUSE just works on hardware with very little fussing about. Aside from the touch panel calibration, everything else about this machine works perfectly.

External Links

https://wiki.archlinux.org/index.php/Calibrating_Touchscreen

https://wiki.archlinux.org/index.php/Touchscreen

https://forums.opensuse.org/showthread.php/429517-Can-t-calibrate-touchscreen

17 thoughts on “Panasonic CF-19 Toughbook | Touch Panel Calibration

  1. I found this procedure extremely helpful, both on the CF-19 and subsequently, on the CF-31. On the CF-31, I chose to install Linux Mint 19.1 Tessa (64-bit). With the installation complete, I found myself in the same situation that I faced after the initial install on the cf-19, i.e., unable to use approx. 1″ of the outer edges of the touch screen. With Nathan’s assistance, he came up with some initial coordinates to try on the CF-31. Those initial coordinates were as follows:

    xinput set-prop “Fujitsu Component USB Touch Panel” –type=float “Coordinate Transformation Matrix”
    1.115, 0, -0.073, 0, 1.14, -0.04, 0, 0, 1

    I tried these parameters & found them precise on the left & right screen edges of the touch screen, but off a bit on the top & bottom. After a bit of trial & error on different values, I ended up adjusting the 6th parameter from -0.04 to -0.075. My final xinput command which I placed in the script was as follows:

    xinput set-prop “Fujitsu Component USB Touch Panel” –type=float “Coordinate Transformation Matrix”
    1.115, 0, -0.073, 0, 1.14, -0.075, 0, 0, 1

    I’d encourage other individuals trying Linux on other toughbook versions to share their touchscreen alignment experiences along with any other anomalies encountered. In doing so, you cut down on the “grief” factor for all of us!

  2. Hello,
    I would kindly ask You, would You resolve problem of touchpad (mouse, not touch display panel) being recognized as “ImPS/2 Generic Wheel Mouse id=11 [slave pointer (2)]” because of that, i’m unable to DISABLE clicking using touchpad. I”s so hard to use, because when moving finger it act like clicking. There are two hardware buttons that i would like to use. Is there any way to force kernell to see that “PS2” mouse as touchpad and allow me to disable click by touch (of touchpad) ?
    Regards

    1. I need just a bit more to go by on the details of your system. I am able to disable touchpad settings in the KDE Plasma System Settings under input devices. To do so in other Desktop Environments, I don’t have that information. I rarely use other Desktop Environments. I might also suggest that you poke the Distribution of which you are using in their forums for help with that. Another suggestion might be to ping this group in Telegram:

      https://t.me/bigdaddylinuxlive

      There are NUMEROUS experts far more knowledgeable than I am that may have goals and a configuration more closely aligned with what you are running.

      1. Thank You for reply,
        I would never ask for Your time to strictly diagnose my problem, just wondering have You found solution while working on Your setup
        My system is: Toughbook cf19 mk6
        OS: Ubuntu 19.04 – Kernel 5.0.0-15-generic (at that moment with all updates)
        I just stumble upon Your search result, because You have same issue but while work in CMD just don’t see negative impact. – the mouse is working just fine
        I don’t think it’s distribution related but Kernel (i might be wrong).
        If You take look at Your Toughbook “xinput list” output, You get “ImPS/2 Generic Wheel Mouse id=x”
        and this is problem, it should be recognized as Touchpad instead of ps2 mouse.
        Do You have any idea how I could enforce it being seen as Touchpad?
        I think this is starting point, after being recognized as Touchpad then rest of X system will take care.
        regards

      2. I do not actually know how to change that. I don’t seem to have any issues with the way I have it now, but to be fair, I haven’t used these systems in a while. They were set up for an organization.

      3. Anyway thank You for Your time ,
        I see someone file bug report, but sadly it was not solved.
        Looks like i’m married with touch panel.
        Regards

  3. I tried to figure this out for ages and finally got it working on an Arch install. I had to leave out the -type=float bit (xinput 1.6.3) though. Thanks so much for sharing, is there any way I can buy you a beer or two by donating somewhere?

  4. Wow, this just works!! Seriously, thank you much. I’ve wasted quite a few hours over the past years trying to get my CF-19’s screen to get the “touch area” right. Here’s what I used for my CF-19 Mk6 config:
    “`
    xinput set-prop “Wacom ISDv4 93 Finger touch” –type=float “Coordinate Transformation Matrix” 1.115 0 -0.073 0 1.14 -0.04 0 0 1
    “`
    Your blog converted the straight quotation marks to curved ones in your original code, and the double hypens in “`–type=float“` to a single em dash.

    1. Ah, I need to make a quick update to how the WordPress thing displays that information. I am glad this worked for you and I will fix that immediately.

  5. hello

    I managed to solve the same problem with piece of software called xcalibrator
    Proposed by many articles xinput_calibrator doesn’t work. Xcalibrator save the day

    github com / reinderien / xcalibrate

    1. This is great news. I wonder if something like this would also help with one of those graphics tablets that are also a monitor. I imagine defining the zones would be quite similar.

Leave a Reply