タイピング中にタッチパッドを無効にする(Linux/Libinput)

タッチパッドに親指の付け根や手のひらが当たることでカーソルが飛び、頻繁にタイポが発生していた。
今回、libinputの設定でカーソル飛びがほとんど無くなったので、その方法について書いた。

記事内の環境

  • Distribution: elementary OS Loki (Ubuntu 16.04.1ベース)
  • Kernel Linux 4.15.0-24-generic
  • タッチパッドドライバでlibinputを使用している

ドライバはsynapticsとlibinputがあって、最近はwayland由来のlibinputの開発が盛んである
また、X11でもライブラリをインストールすればラッパー経由でlibinputを利用できる

libinputかsynapticsのどちらが有効か

判別方法は以下

$ xinput
⎡ Virtual core pointer                id=2  [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer      id=4  [slave  pointer  (2)]
⎜   ↳ DLL075B:01 06CB:76AF Touchpad   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)]
    ↳ Sleep Button                    id=9  [slave  keyboard (3)]

Touchpadの記述を含んだ行が見つかる。

DLL075B:01 06CB:76AF Touchpad   id=11

このTouchpadのidを引数としてxinput list-props 11を実行。ドライバを通してタッチパッドの状態が見える

$ xinput list-props 11
Device 'DLL075B:01 06CB:76AF Touchpad':
        Device Enabled (140):   1
        Coordinate Transformation Matrix (142): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        libinput Tapping Enabled (274): 1
        libinput Tapping Enabled Default (275): 0
        libinput Tapping Drag Enabled (276):    1
        libinput Tapping Drag Enabled Default (277):    1
        libinput Tapping Drag Lock Enabled (278):       0
        libinput Tapping Drag Lock Enabled Default (279):       0
        libinput Tapping Button Mapping Enabled (280):  1, 0
        libinput Tapping Button Mapping Default (281):  1, 0
        libinput Accel Speed (282):     -0.732877
        libinput Accel Speed Default (283):     0.000000
        libinput Natural Scrolling Enabled (284):       1
        libinput Natural Scrolling Enabled Default (285):       0
        libinput Send Events Modes Available (259):     1, 1
        libinput Send Events Mode Enabled (260):        0, 0
        libinput Send Events Mode Enabled Default (261):        0, 0
        libinput Left Handed Enabled (286):     0
        libinput Left Handed Enabled Default (287):     0
        libinput Scroll Methods Available (288):        1, 1, 0
        libinput Scroll Method Enabled (289):   1, 0, 0
        libinput Scroll Method Enabled Default (290):   1, 0, 0
        libinput Click Methods Available (291): 1, 1
        libinput Click Method Enabled (292):    1, 0
        libinput Click Method Enabled Default (293):    1, 0
        libinput Middle Emulation Enabled (294):        0
        libinput Middle Emulation Enabled Default (295):        0
        libinput Disable While Typing Enabled (296):    1
        libinput Disable While Typing Enabled Default (297):    1
        Device Node (262):      "/dev/input/event17"
        Device Product ID (263):        1739, 30383
        libinput Drag Lock Buttons (298):       <no items>
        libinput Horizontal Scroll Enabled (299):       1

libinput XXXXという行が続いているのでlibinputを利用している。 synapticsの場合はlibinputが利用されていない。

libinputドライバを利用するように設定する

/usr/share/X11/xorg.conf.d/ ディレクトリに数字+ドライバの設定ファイルが置かれている。
ここの数字の中で大きいもが後に読み込まれるため、synapticsが優先的に利用されている

$ ls -l /usr/share/X11/xorg.conf.d/
合計 44
-rw-r--r-- 1 root root   92  6月 14 23:23 10-amdgpu.conf
-rw-r--r-- 1 root root 1099  7月  7  2017 10-evdev.conf
-rw-r--r-- 1 root root 1350  6月 15 02:26 10-quirks.conf
-rw-r--r-- 1 root root   92  6月 14 23:16 10-radeon.conf
-rw-r--r-- 1 root root  590  7月  7  2017 11-evdev-quirks.conf
-rw-r--r-- 1 root root  364  7月  7  2017 11-evdev-trackpoint.conf
-rw-r--r-- 1 root root  964  7月  7  2017 40-libinput.conf
-rw-r--r-- 1 root root  590  7月  7  2017 51-synaptics-quirks.conf
-rw-r--r-- 1 root root 1751  7月  7  2017 70-synaptics.conf
-rw-r--r-- 1 root root 2747  7月  7  2017 70-wacom.conf

libinputが40でsynapticsが70なのでsynapticsが優先されてしまう。 その場合は新しいファイルをdriverの読み込み優先度の高い/etc/X11/xorg.conf.d/に配置すれば良い。
基本的に/usr/share/X11/xorg.conf.d/ よりも個人の設定は/etc/X11/xorg.conf.d/ に配置する。

新規作成したファイル90-libinput.conf/etc/X11/xorg.conf.d/に追加した。

Section "InputClass"
        Identifier "libinput pointer catchall"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Option "Tapping" "True"
        Option "TappingDrag" "True"
        Option "DisableWhileTyping" "True"
        Driver "libinput"
EndSection

DisableWhileTypingオプションでタイピング中にタッチパッドを無効にする

このOption "DisableWhileTyping" "True"が今回のキモ。 DisableWhileTypingはタイピング中にタッチパッドを無効にする機能。

オプションはmanコマンドで確認出来る。

man libinput
Option "DisableWhileTyping" "bool"
       Indicates  if the touchpad should be disabled while typing on the keyboard (this does not apply to modifier keys such as Ctrl or Alt).

CtrlやAltのような修飾キー以外に対して有効になる。

この機能のお陰でカーソルが移動したり誤タップが無くなった。