Linux(Ubuntu)で、Trackpadをチューニングして、3本指スワイプに機能を設定したりする

Ubuntu19.10を使用して、3本指スワイプに機能をもたせるまでの記録です。
達成したことは以下の通りです。

- Logicool T650 トラックパッドで使用するドライバを変更した
- 2本指スクロールのスクロール量を調整した
- 3本指スワイプに、デスクトップ移動の機能を割り当てた

# 使用するドライバを設定する

Ubuntu19.10を使用しています。
LinuxでTrackpadを使うには以下の3つのドライバがあります。

- Synaptic
- mtrack
- libinput

今どれが使われているか知るには、`xinput`コマンドを使います。
`xinput list`で認識しているデバイスの名前をしらべ、`xinput list-prop <device name or id>`で表示できます。

```
$xinput list
⎡Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ Logitech Rechargeable Touchpad T650     	id=12	[slave  pointer  (2)]

$xinput list-props 'Logitech Rechargeable Touchpad T650'                                                
Device 'Logitech Rechargeable Touchpad T650':
	Device Enabled (154):	1
	Coordinate Transformation Matrix (156):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	Device Accel Profile (286):	0
	Device Accel Constant Deceleration (287):	1.000000
	Device Accel Adaptive Deceleration (288):	1.000000
	Device Accel Velocity Scaling (289):	25.000000
	Trackpad Disable Input (290):	0
	Trackpad Sensitivity (291):	1.000000
```

Synaptic、libinputの場合には、そのモジュールの名前の設定名があるため、判別できます。mtrackの場合には、`Trackpad`と表示されます。

特定のドライバを有効化するには、ドライバをインストール後に`/usr/share/X11/xorg.conf.d/`に初期設定が格納されるため、これを`/etc/X11/xorg.conf.d/`にコピーします。

```
$ls /usr/share/X11/xorg.conf.d/                                                                         
10-amdgpu.conf  10-quirks.conf  40-libinput.conf  51-synaptics-quirks.conf  70-wacom.conf
10-nvidia.conf  10-radeon.conf  50-mtrack.conf    70-synaptics.conf

$cp /usr/share/X11/xorg.conf.d/50-mtrack.conf /etc/X11/xorg.conf.d/                                                                               

$ls /etc/X11/xorg.conf.d/                                                                               
50-mtrack.conf
```

これで、ログインログアウトを行うと目的のドライバが有効化されます。

ドライバの設定を変えるためには、`/etc/X11/xorg.conf.d/`の`Option`の項目を書き換えるか、`xinput set-props <device name> <prop> <value>`を使います。
confは永続化する目的に使用でき、xinput set-propsはアドホックに設定をすることに使うことができます。

ただし、confファイルと、xinput list-propsでの設定名は一致しません。
おおよそ同じ名前の設定名ですが、対応表はないため、それっぽいものを選ぶしかないようです。

# Xorgのスクロール事情

現状Xorgのスクロールは、ボタン5、ボタン6として動作しています。
よって、スクロールは移動量ごとにボタン5、ボタン6を何回押したかどうかで実現されているようです。

Synapticsでは慣性スクロールが実現されていますが、
スクロールボタンを押す頻度を調整して実現されているようです。

libinputは、きちんとどのくらい移動したかを伝えていますが、
その仕様をまもるために、スクロール量を調整する仕様を持っていません。
現状GNOME3もスクロール量を取り扱っていないようです。

# それぞれの特徴

## Synaptics

Synapticsはすでにメンテナンスモードに入っており、今後機能がアップデートされる予定はないそうです。
しかし、唯一慣性スクロールをサポートしており、macOSになれた人には非常に使いやすく感じます。
ただし、3本指Swipeは動作しません。

https://wiki.archlinux.jp/index.php/Synaptics_%E3%82%BF%E3%83%83%E3%83%81%E3%83%91%E3%83%83%E3%83%89

設定項目の一覧はmanから確認できます。

https://linux.die.net/man/4/synaptics

操作してみて、カクカク動く感じがあり、慣性スクロールは気持ちよいですが、自由に使える感じはしませんでした。

## mtrack

mtrackは、3本指スワイプ、4本指スワイプも機能として持っています。
2本指スクロールもクイックに動作します。
ただし現在はメンテナンスされていないようです。
設定項目はすべてこのgithubのREADMEにかかれています。

https://github.com/BlueDragonX/xf86-input-mtrack

スクロール量や移動スピードも調整可能なため、古いですが非常に有効です。

## libinput

現在も開発の続いているライブラリです。可能であればこちらを使うのが良いと思われます。

https://wayland.freedesktop.org/libinput/doc/latest/index.html

設定項目は以下に記載があります。

https://www.mankier.com/4/libinput

3本指スワイプはサポートされていませんが、libinput-gesturesをインストールすることで使うことができます。
前節の理由からスクロール時の移動量は設定することができません。

## 結局どれを使えばよいか。

libinput+libinput-gesturesを使って十分ならば、それで良いと思います。
libinputで、スクロールの量をチューニングしたい場合には、mtrackを使うことができます。

筆者は、2019年12月時点で、mtrackを使用しています。
以下が使用している設定ファイルです。

```
Section "InputClass"
    MatchIsTouchpad "true"
    Identifier "Multitouch Touchpad"
    Driver "mtrack"
    Option "ScrollDistance" "30"
    Option "ScrollUpButton" "5"
    Option "ScrollDownButton" "4"
    Option "SwipeDistance" "200"
    Option "TapDragEnable" "false"
EndSection
```

- ScrollDistance 30 2本指スクロールでのスクロール量を調整量
- ScrollUp/DownButton 5/4 入れ替えることで、ナチュラルスクロールに変更
- SwipeDistance 200 3本指スワイプの感度の閾値（初期値700）
- TapDragEnable false タップでドラッグする機能を無効化する

# 3本指スワイプに機能を割り振る

マウスのキーから、デスクトップの移動を行いたいと思います。
そのためには、以下の手順を取ります。

- mtrackでSwipeにマウスのボタンを割り振る
- xbindkeysで、マウスのボタンから、コマンドを実行できるようにする
- xdotoolsで、コマンドからキーボードのキー（Super+Mなど）を送る
- キー（Super+M）を、デスクトップ移動のキーボードショートカットに設定する

mtrackでは、3本指スワイプは8~11ボタンに割り振られています。

xbindkeysで、xdotoolsのコマンドを実行するには、以下のような~/.xbindkeysrcを作成します。

```
"xdotool key Super_R+m"
b:8+Release
"xdotool key Super_R+comma"
b:9+Release
"xdotool key Super_R+s"
b:10+Release
```

xbindkeysを常駐させるには、コマンド`xbindkeys_autostart`を実行されるように組みます。
最後に、Gnomeのキーボードショートカットの設定で、Super+M、Super+,、Super+sに必要な機能を割り当てます。

Trackpadを使って、スクロール量を調整したり、3本指スワイプに機能を割り振ることができました。