18.04 ITE 8910 touchpad on Asus Strix GL703GE not working

I've seen bits and pieces of similar problems around in numerous issues on all sorts of sites, but none of the suggestions/fixes appear to make a difference. It looks like this may be the dreaded Elantech touchpad that's been the new broadcom wireless chipset for the last few years. I'm hoping that there's a tweak/fix that just isn't getting to the top of google searches. Or maybe a more thorough/complete description of the problem would help find a definitive solution. I thought I'd put everything I've found and tried in one place as a sort of hail mary before giving up.

I have a Asus Strix GL703GE Laptop upon which I have installed Ubuntu 18.04. The touchpad appears to work perfectly fine in the windows partition.

Here's the output from xinput:

mich@gordon:~$  xinput
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech M510                             id=12   [slave  pointer  (2)]
⎜   ↳ ITE Tech. Inc. ITE Device(8910)           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)]
    ↳ Asus Wireless Radio Control               id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Video Bus                                 id=9    [slave  keyboard (3)]
    ↳ Power Button                              id=10   [slave  keyboard (3)]
    ↳ Sleep Button                              id=11   [slave  keyboard (3)]
    ↳ USB2.0 HD UVC WebCam: USB2.0 HD           id=13   [slave  keyboard (3)]
    ↳ Asus WMI hotkeys                          id=15   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=16   [slave  keyboard (3)]
    ↳ ITE Tech. Inc. ITE Device(8910)           id=17   [slave  keyboard (3)]
mich@gordon:~$

The Logitech M510 is a USB mouse since my keyboard-only fu isn't great. It works fine without any tinkering.

Here are a few other diagnostic things that might be interesting:

mich@gordon:~$  dmesg | grep -i touch
mich@gordon:~$  synclient -l
Couldn't find synaptics properties. No synaptics driver loaded?
mich@gordon:~$  dmesg | grep i2c
[    1.574177] i2c /dev entries driver
[    3.615795] i2c_hid i2c-ELAN1200:00: i2c-ELAN1200:00 supply vdd not found, using dummy regulator
[    3.616991] i2c_hid i2c-ELAN1200:00: Could not register for ELAN1200:00 interrupt, irq = 130, ret = -1
[    3.617013] i2c_hid: probe of i2c-ELAN1200:00 failed with error -1
mich@gordon:~$  dmesg | grep i8042
[    1.567434] i8042: PNP: No PS/2 controller found.
[    1.567434] i8042: Probing ports directly.
[    1.571605] serio: i8042 KBD port at 0x60,0x64 irq 1
[    1.571611] serio: i8042 AUX port at 0x60,0x64 irq 12
[    1.580682] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4
mich@gordon:~$

The synclient response seems weird to me as I have done an apt install of xserver-xorg-input-synaptics which didn't appear to change anything. Here's the dpkg output:

mich@gordon:~$   dpkg -l *synaptics*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                    Version          Architecture     Description
+++-=======================-================-================-===================================================
un  xorg-driver-synaptics   <none>           <none>           (no description available)
ii  xserver-xorg-input-syna 1.9.0-1ubuntu1   amd64            Synaptics TouchPad driver for X.Org server
mich@gordon:~$ 

Trying to sudo apt install xorg-drivers-synaptics bounces to the driver that's already installed.

I've tried all 8 variations of these three kernel params:

i8042.reset
i8042.kbdreset=1
i8042.nomux=1

I've checked BIOS for anything that might be disabling the touchpad. The only thing that I found was a setting for the "internal pointer", if I remember correctly. Whatever it was called, it's enabled.

Here's the input device:

mich@gordon:~$  cat /proc/bus/input/devices
  ....
I: Bus=0003 Vendor=0b05 Product=1869 Version=0110
N: Name="ITE Tech. Inc. ITE Device(8910)"
P: Phys=usb-0000:00:14.0-8/input0
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:0B05:1869.0001/input/input9
U: Uniq=
H: Handlers=sysrq kbd event7 leds 
B: PROP=0
B: EV=12001f
B: KEY=3007f 0 ffffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffff 130c130b17c007 ffbf7bfad941dfff febeffdfffefffff fffffffffffffffe
B: REL=40
B: ABS=ffffff0100000000
B: MSC=10
B: LED=1f
  ....

I've also tried enabling the device via xinput to no avail:

xinput set-prop 14 "Device Enabled" 1

I saw a suggestion to modify /usr/share/X11/xorg.conf.d/50-synaptics.conf, but I do not have that file. I do have a /usr/share/X11/xorg.conf.d/51-synaptics-quirks.conf that is filled with things that appear to be completely irrelevant as they all point to /dev/input/event*. I found a /usr/share/X11/xorg.conf.d/70-synaptics.conf. I modified that file for the touchpad catchall to look like this:

Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
# This option is recommend on all Linux systems using evdev, but cannot be
# enabled by default. See the following link for details:
# http://who-t.blogspot.com/2010/11/how-to-ignore-configuration-errors.html
        Option "TapButton1" "1"
        MatchDevicePath "/dev/input/event*"
EndSection

My changes were the TapButton1 Option line and adding two spaces to the MatchDevicePath to match the tabbing for the rest of the config.

In case it's of any help, here are the rest of the files in that directory:

mich@gordon:~$  ls -l /usr/share/X11/xorg.conf.d/
total 36
-rw-r--r-- 1 root root   92 Mar 20 05:02 10-amdgpu.conf
-rw-r--r-- 1 root root  206 Apr 18 10:01 10-nvidia.conf
-rw-r--r-- 1 root root 1350 Apr 13 08:31 10-quirks.conf
-rw-r--r-- 1 root root   92 Mar 20 05:17 10-radeon.conf
-rw-r--r-- 1 root root  329 May 21 00:33 11-nvidia-prime.conf
-rw-r--r-- 1 root root  945 Apr 11 00:50 40-libinput.conf
-rw-r--r-- 1 root root  590 Mar  7  2017 51-synaptics-quirks.conf
-rw-r--r-- 1 root root 1785 May 21 00:32 70-synaptics.conf
-rw-r--r-- 1 root root 3025 Apr  3 00:39 70-wacom.conf
mich@gordon:~$ 

I've also run this command which did not enable the touchpad:

sudo modprobe -r psmouse && sudo modprobe psmouse proto=imps

This is probably stating the obvious just a few weeks after release, but here's the kernel:

mich@gordon:~$  uname -r
4.15.0-20-generic
mich@gordon:~$

Did I do something wrong? Am I missing the magic switch? Is there anything else that I can try? Is there any more information that could help troubleshoot this to find a solution? I've tried to exhaust every reasonable solution that I could find. Thanks!

Edit: Added: I've been taking blind stabs at more solutions, but haven't made any progress. I removed the synaptics apt package, but getting that out of the way hasn't made any difference. Here's a little more information that might be helpful:

mich@gordon:~$ xinput --list-props "pointer:ITE Tech. Inc. ITE Device(8910)"
Device 'ITE Tech. Inc. ITE Device(8910)':
    Device Enabled (174):   1
    Coordinate Transformation Matrix (176): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Natural Scrolling Enabled (308):   0
    libinput Natural Scrolling Enabled Default (309):   0
    libinput Middle Emulation Enabled (310):    0
    libinput Middle Emulation Enabled Default (311):    0
    libinput Left Handed Enabled (312): 0
    libinput Left Handed Enabled Default (313): 0
    libinput Send Events Modes Available (293): 1, 0
    libinput Send Events Mode Enabled (294):    0, 0
    libinput Send Events Mode Enabled Default (295):    0, 0
    Device Node (296):  "/dev/input/event7"
    Device Product ID (297):    2821, 6249
    libinput Drag Lock Buttons (314):   <no items>
    libinput Horizontal Scroll Enabled (315):   1
mich@gordon:~$

Here's some xorg log. It's probably telling me something that I'm missing:

mich@gordon:~$  cat /var/log/Xorg.0.log

... cropped for clarity ...

[     7.318] (II) config/udev: Adding input device ITE Tech. Inc. ITE Device(8910) (/dev/input/event7)
[     7.318] (**) ITE Tech. Inc. ITE Device(8910): Applying InputClass "libinput pointer catchall"
[     7.318] (**) ITE Tech. Inc. ITE Device(8910): Applying InputClass "libinput keyboard catchall"
[     7.318] (II) Using input driver 'libinput' for 'ITE Tech. Inc. ITE Device(8910)'
[     7.318] (II) systemd-logind: got fd for /dev/input/event7 13:71 fd 51 paused 0
[     7.318] (**) ITE Tech. Inc. ITE Device(8910): always reports core events
[     7.318] (**) Option "Device" "/dev/input/event7"
[     7.318] (**) Option "_source" "server/udev"
[     7.319] (II) event7  - ITE Tech. Inc. ITE Device(8910): is tagged by udev as: Keyboard Mouse Joystick
[     7.319] (II) event7  - ITE Tech. Inc. ITE Device(8910): device is a pointer
[     7.319] (II) event7  - ITE Tech. Inc. ITE Device(8910): device is a keyboard
[     7.319] (II) event7  - ITE Tech. Inc. ITE Device(8910): device removed
[     7.319] (II) libinput: ITE Tech. Inc. ITE Device(8910): needs a virtual subdevice
[     7.319] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:0B05:1869.0004/input/input9/event7"
[     7.319] (II) XINPUT: Adding extended input device "ITE Tech. Inc. ITE Device(8910)" (type: MOUSE, id 14)
[     7.319] (**) Option "AccelerationScheme" "none"
[     7.319] (**) ITE Tech. Inc. ITE Device(8910): (accel) selected scheme none/0
[     7.319] (**) ITE Tech. Inc. ITE Device(8910): (accel) acceleration factor: 2.000
[     7.319] (**) ITE Tech. Inc. ITE Device(8910): (accel) acceleration threshold: 4
[     7.319] (II) event7  - ITE Tech. Inc. ITE Device(8910): is tagged by udev as: Keyboard Mouse Joystick
[     7.319] (II) event7  - ITE Tech. Inc. ITE Device(8910): device is a pointer
[     7.319] (II) event7  - ITE Tech. Inc. ITE Device(8910): device is a keyboard

 ... later ...

[     7.327] (**) ITE Tech. Inc. ITE Device(8910): Applying InputClass "libinput pointer catchall"
[     7.327] (**) ITE Tech. Inc. ITE Device(8910): Applying InputClass "libinput keyboard catchall"
[     7.327] (II) Using input driver 'libinput' for 'ITE Tech. Inc. ITE Device(8910)'
[     7.327] (II) systemd-logind: returning pre-existing fd for /dev/input/event7 13:71
[     7.327] (**) ITE Tech. Inc. ITE Device(8910): always reports core events
[     7.327] (**) Option "Device" "/dev/input/event7"
[     7.327] (**) Option "_source" "_driver/libinput"
[     7.327] (II) libinput: ITE Tech. Inc. ITE Device(8910): is a virtual subdevice
[     7.327] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:0B05:1869.0004/input/input9/event7"

... end of relevant section ... 

After removing the synaptics package, I just had the default /usr/share/X11/xorg.conf.d/40-libinput.conf file. This didn't work, so I added a slightly modified /usr/share/X11/xorg.conf.d/50-elantech-touchpad.conf that i found here. Here it is with my modifications:

mich@gordon:~$  cat /usr/share/X11/xorg.conf.d/50-elantech-touchpad.conf 
Section "InputClass"
        Identifier      "touchpad"  
        MatchIsTouchpad "on"
        MatchProduct    "8910"
        MatchDevicePath "/dev/input/event*"
        Driver          "libinput"
        Option          "Tapping"           "on"
        Option      "TappingButtonMap"      "lmr"
        Option          "DisableWhileTyping"    "on"
        Option      "DisableWhileTyping"    "on"
        Option      "NaturalScrolling"  "on"
        Option      "NaturalScrolling"  "twofinger"
        Option      "TappingDrag"       "on"
        Option      "TappingDragLock"   "on"
        Option      "AccelProfile"      "adaptive"
        Option      "AccelSpeed"        "0.1"
EndSection
mich@gordon:~$

I changed the MatchProduct to match the name in xinput and added the MatchDevicePath just to make sure it didn't go to the wrong place.

Edit2: Added: Installing kernel v4.17rc6 without making other changes didn't fix the touchpad.


Solution 1:

This has been an ongoing problem and I have been working on it with the amazing Ubuntu community. You will need to update to at least kernel 4.17.2 from kernel.org.

My first bug report: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1777679

My second bug report: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1778087

Some information which will help you get it to work: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1777679/comments/28

You might need an extra script for when the touchpad disconnects:

#!/bin/bash
if [ -z $1 ]
    then
        echo 'rsmod unloads and reloads kernel modules with modprobe'
        echo 'usage: rsmod <kernelmodulename>'
        echo 'Requires root privileges'
        exit 1
fi
pkexec bash -c "modprobe -r $1; modprobe $1"

Save that as /usr/local/bin/rsmod and call it with hid-multitouch when the touchpad disconnects. (Unfortunately there is no work-around for this, if you want to use it on linux it will disconnect occasionally until the drivers get updated)

Edit: You have an ELAN1200 touchpad not Elantech, and it is currently not detected at all by your kernel. If it was, in xinput --list you would see ELAN1200 as well as ITE8910.

Please let me know if you need anymore help.

Solution 2:

Now the 4.20 Kernel supports the touchpad without needing custom patches.

in ubuntu 18.04/18.10 just:

  1. download linux-4.20 kernel from kernel.org
  2. unzip it to /usr/src/linux-4.20
  3. copy your existing .config file into the same dir
  4. sudo make menuconfig (and then save in the "gui")
  5. sudo make -j8
  6. sudo make modules -j8
  7. sudo make install
  8. sudo make modules_install
  9. sudo update-initramfs -u
  10. reboot with 4.20 Kernel

the touchpad should work now.

There is still an issue with this specific touchpad: if you put 5 fingers or the palm on it it looses connection and you need to run sudo rmmod hid_multitouch && sudo modprobe hid_multitouch to make it work again, this bug is still open: https://bugzilla.kernel.org/show_bug.cgi?id=200663#c60

Solution 3:

I asked at ITE directly for a driver but they say they have no driver:

Dear Landolt,

Thank you for email us.
We do not own any driver of IT8910.

Thanks.
Mitch

[contact information redacted by editor]

Hello

I just bought a ASUS ROG Strix SCAR GL703GE-EE010T Laptop that has a ITE Tech. Inc. ITE Device(8910) Touchpad that does not work even with the newest 4.17 Linux Kernel.

So I would like to know if there is any Linux Driver around for your device or at least a GitHub link where there is an experimental driver?

With kind regards
Marc Landolt