1

When i upgraded from SUSE to Ubuntu 14.04 LTS, the touchscreen monitor is detecting as TOUCHPAD instead of TOUCHSCREEN. It is using the ELO drivers for touch screen Functionality.

I debugged this issue, in the Xorg Log the type is shown as a "TOUCH PAD" instead of "TOUCH SCREEN".

root@57:~# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 04f2:0116 Chicony Electronics Co., Ltd KU-2971/KU-0325 Keyboard
Bus 001 Device 008: ID 046d:c077 Logitech, Inc. M105 Optical Mouse
Bus 001 Device 006: ID 04e7:0030 Elo TouchSystems 4500U CarrollTouch® Touchmonitor Interface
Bus 001 Device 005: ID 04b3:4670 IBM Corp.
Bus 001 Device 002: ID 0451:2046 Texas Instruments, Inc. TUSB2046 Hub
Bus 001 Device 004: ID 413c:2003 Dell Computer Corp. Keyboard
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

root@57:~# xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U        id=11   [slave  pointer  (2)]
⎜   ↳ Logitech USB Optical Mouse                id=14   [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)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
    ↳ Dell Dell USB Keyboard                    id=9    [slave  keyboard (3)]
    ↳ (c) Copyright IBM Corp. 1999 IBM Retail USB 4820 Liquid Crystal Display (Boot mode)                               id=10   [slave  keyboard (3)]
    ↳ CHICONY USB Keyboard                      id=12   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=13   [slave  keyboard (3)]

/var/log/Xorg.0.log

 [    39.073] (II) config/udev: Adding input device Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U (/dev/input/event7)
    [    39.073] (**) Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: Applying InputClass "evdev pointer catchall"
    [    39.073] (**) Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: Applying InputClass "Elo class"
    [    39.073] (**) Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: Applying InputClass "calibration"
    [    39.073] (II) Using input driver 'evdev' for 'Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U'
    [    39.073] (**) Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: always reports core events
    [    39.073] (**) evdev: Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: Device: "/dev/input/event7"
    [    39.073] (--) evdev: Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: Vendor 0x4e7 Product 0x30
    [    39.073] (--) evdev: Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: Found 1 mouse buttons
    [    39.073] (--) evdev: Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: Found absolute axes
    [    39.073] (--) evdev: Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: Found x and y absolute axes
    [    39.073] (--) evdev: Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: Found absolute touchpad.
    [    39.073] (**) Option "SwapAxes" "0"
    [    39.073] (II) evdev: Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: Configuring as touchpad
    [    39.073] (**) evdev: Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: YAxisMapping: buttons 4 and 5
[    39.073] (**) evdev: Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: EmulateWheelButton: 4, EmulateWheelInertia: 10, EmulateWheelTimeout: 200
[    39.073] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.2/1-3.2:1.0/input/input10/event7"
[    39.073] (II) XINPUT: Adding extended input device "Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U" (type: TOUCHPAD, id 11)
[    39.073] (II) evdev: Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: initialized for absolute axes.
[    39.073] (**) Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: (accel) keeping acceleration scheme 1
[    39.073] (**) Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: (accel) acceleration profile 0
[    39.073] (**) Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: (accel) acceleration factor: 2.000
[    39.073] (**) Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: (accel) acceleration threshold: 4
[    39.073] (II) config/udev: Adding input device Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U (/dev/input/mouse0)
[    39.073] (**) Elo TouchSystems, Inc. Elo TouchSystems CarrollTouch 4500U: Applying InputClass "calibration"

xorg.conf file

Section "InputDevice"
        Driver      "mouse"
        Identifier  "mouse0"
        Option      "Buttons"   "7"
        Option      "ButtonMapping" "1 1 1"
        Option      "ZAxisMapping"  "4 5 6 6"
EndSection

Section "Device"
        Identifier      "Configured Video Device"
EndSection

Section "Monitor"
        Identifier      "Configured Monitor"
EndSection

Section "Screen"
        Identifier      "Default Screen"
        Monitor         "Configured Monitor"
        Device          "Configured Video Device"
        SubSection "Display"
          Modes "1024x768" "800x600"
        EndSubSection
EndSection

10-evdev.conf

Section "InputClass"
        Identifier "evdev pointer catchall"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection
Section "InputClass"
        Identifier "evdev touchpad catchall"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev tablet catchall"
        MatchIsTablet "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection
Section "InputClass"
        Identifier "evdev touchscreen catchall"
        MatchIsTouchscreen "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection
pomsky
  • 70,557
Sunny
  • 33

2 Answers2

1

I ran into this problem recently on Ubuntu 20.04 with the 5.4.0-81 kernel (yes, I hold my 20.04 systems back on the 5.4 kernel for various hardware compatibility reasons). The previous -80 kernel was fine, and even a 5.11.0-27 kernel (most recent available in Ubuntu 20.04 at this time) worked fine.

(Note: this may not be a 100% solution for the original question, since 20.04 uses systemd, and 14.04 does not)

The behavior I saw was the same: In other kernels, it was listed as a TOUCHSCREEN, and in this one, as a TOUCHPAD.

tl;dr: Create a rule in /etc/udev/hwdb.d/60-yourrule.hwdb that matches to your device's modalias string and then sets the ID_INPUT_TOUCHSCREEN=1 property, and probably also ID_INPUT_TOUCHPAD=0, then reboot.

At a high level, I'd summarize as: we're telling udev to ignore some information from the kernel in favor of our correct information, and then the rest of the system (e.g. xinput, gdm) will use that correct info, and things work properly.


In this case, I'm using a MIMO UM-1000 resistive touch screen (manufacture date 8-2018 or newer; older screens are different/work fine).

In sleuthing, I found that something called a modalias string was different, on this kernel. Specifically, I was using udevadm info /device/path. First I found the device path by inspecting the output of loginctl seat-status seat0. There's probably several other ways to get this path easily. That output looked like:

  │   ├─/sys/devices/pci0000:00/0000:00:14.0/usb3/3-9/3-9.2/3-9.2:1.0/0003:0EEF:0001.0005/input/input23
  │   │ input:input23 "eGalax Inc. USB TouchController UNKNOWN"
  │   ├─/sys/devices/pci0000:00/0000:00:14.0/usb3/3-9/3-9.2/3-9.2:1.0/0003:0EEF:0001.0005/input/input24
  │   │ input:input24 "eGalax Inc. USB TouchController Stylus"
  │   └─/sys/devices/pci0000:00/0000:00:14.0/usb3/3-9/3-9.2/3-9.2:1.0/0003:0EEF:0001.0005/input/input26
  │     input:input26 "eGalax Inc. USB TouchController"

From past experience, I happen to know that the last of the multiple entries for my screens is the actual input device being used (you can determine this with e.g. evtest). So I then passed that path to udevadm, i.e.:

udevadm info /sys/devices/pci0000:00/0000:00:14.0/usb3/3-9/3-9.2/3-9.2:1.0/0003:0EEF:0001.0005/input/input26

A relevant bit from that output, when run on the bad kernel:

E: MODALIAS=input:b0003v0EEFp0001e0100-e0,1,3,4,k100,145,14A,ra0,1,28,m4,lsfw
E: SUBSYSTEM=input
E: USEC_INITIALIZED=4323633
E: ID_INPUT=1
E: ID_INPUT_TOUCHPAD=1

After doing this inspection with several screens and booting into different kernels that worked or didn't, I was able to determine that the first part of the modalias string was always the same (up to the ,) across all kernels, and all working kernels had the same full string as each other (ending in mlsfw, but that was a whole goose chase that wasn't relevant).:

I then found out about hwdb rules, which are part of udev. The solution was to create a file in /etc/udev/hwdb.d/60-myrules.hwdb that matched to the modalias string, and set some properties.

Solution

Here's what I came up with.

# Mimo magic monster UM-1000 screens newer than Feb 2018
id-input:modalias:input:b0003v0EEFp0001e0100-e0*
 ID_INPUT_TOUCHPAD=0
 ID_INPUT_TOUCHSCREEN=1

I then had to reboot (or, to not reboot, run sudo systemd-hwdb update and un/re-plug the screen) and it started working.

Some additional notes from my testing of this:

  • It seems I had to explicitly disable the TOUCHPAD value.
  • If I delete this file and reboot, it goes back to using the kernel info (i.e. TOUCHPAD=1)

This solution is a fix/workaround; I did not manage to track down why it suddenly broke with this kernel version.

Lastly, if you're wondering how I found my way to this solution, the breakthrough was finding out about hwdb rules when I did ag ID_INPUT_TOUCHSCREEN in /lib/udev/ and found /lib/udev/hwdb.d/60-input-id.hwdb.

Gertlex
  • 550
0

If you install the package xinput (apt-get install xinput), you can force evdev to see the device as a touchscreen by the command

xinput set-mode $ID ABSOLUTE

where $ID is the device id as returned by the command

xinput -list

This operation needs to be done at each boot and the id may change in function of other USB devices, so it will be better to do this in a script called after startx, something like this :

#!/bin/bash

export DISPLAY=:0.0
ID=`xinput --list | grep "Elo TouchSystems" | sed -e 's/.*id=\([0-9]*\).*/\1/'`
xinput set-mode $ID ABSOLUTE

This works fine with my touchscreen monitor (Elo TouchSystems CarrollTouch 4500U) and Debian 8 (Jessie) and perhaps it will work correctly with Ubuntu too.

Russo
  • 1,908
PRB
  • 1