Linux環境におけるThinkPadのトラックポイントのボタン長押し(ドラッグ)が機能しない対処方法まとめ
概要
ThinkPadを始めとした一部のラップトップコンピュータには、ポインティング・スティックが搭載されている。
この入力デバイスは、Linux環境であっても、標準デバイスドライバである psmouse
で動作する。
(以下、Lenovo社の商標である「トラックポイント」を用いる)
しかし、私が新たに購入したThinkPadでは、Linux環境でトラックポイントのボタン長押し(ドラッグ)が、機能しない問題が発生した。
そこで、自分への備考録および同様の問題に遭遇した人への参考として、対処方法をまとめた。
本記事では、Linux環境において、ThinkPadのトラックポイントのボタン長押し(ドラッグ)が機能しない問題に関する、対処方法を述べる。
環境
ThinkPad A275
Arch Linux(4.17.10-1-ARCH)
libinput(1.11.2)
※トラックパッドの機能は、UEFIにて無効済
事象
トラックポイントの全マウスボタン(左・中央・右)にて、ボタンの長押しが認識されない。 その結果、ドラッグ操作が一切出来ない状態になっている。 なお、クリック操作は、どのボタンでも可能である。
以下、 libinput debug-events
を用いて、「左ボタンを押下し、ドラッグ操作をした後、解放する」操作に関する、具体的な事象を示す。
# libinput debug-events
...
-event17 DEVICE_ADDED TPPS/2 IBM TrackPoint seat0 default group9 cap:p left scroll-nat scroll-button
...
(左ボタンを押下し、ドラッグ操作をした後、解放する)
-event17 POINTER_BUTTON +2.80s BTN_LEFT (272) pressed, seat count: 1
event17 POINTER_BUTTON +2.81s BTN_LEFT (272) released, seat count: 0
上記の出力を見ると、左ボタンが押下されたイベント BTN_LEFT (272) pressed
が表示された直後に、
ボタンが解放されたイベント BTN_LEFT (272) released
が発生している。
この操作で本来期待する動作は、以下の通りである。
# libinput debug-events
...
-event16 DEVICE_ADDED PS/2 Generic Mouse seat0 default group8 cap:p left scroll-nat scroll-button
...
(左ボタンを押下し、ドラッグ操作をした後、解放する)
-event16 POINTER_BUTTON +0.85s BTN_LEFT (272) pressed, seat count: 1
event16 POINTER_MOTION +1.52s 0.30/ 0.00
event16 POINTER_MOTION +1.64s 0.00/ 0.35
event16 POINTER_MOTION +1.66s 0.00/ 0.41
event16 POINTER_MOTION +1.67s 0.00/ 0.47
event16 POINTER_MOTION +1.69s 0.55/ 1.10
event16 POINTER_MOTION +1.70s 0.68/ 2.05
event16 POINTER_MOTION +1.71s 0.78/ 0.78
event16 POINTER_MOTION +1.72s 1.75/ 2.63
event16 POINTER_MOTION +1.73s 1.98/ 2.97
event16 POINTER_MOTION +1.75s 2.00/ 3.00
event16 POINTER_MOTION +1.76s 3.00/ 6.00
event16 POINTER_MOTION +1.77s 2.00/ 3.00
event16 POINTER_MOTION +1.78s 2.00/ 3.00
event16 POINTER_MOTION +1.79s 2.00/ 3.00
event16 POINTER_MOTION +1.81s 1.00/ 3.00
event16 POINTER_MOTION +1.82s 6.00/ 7.00
event16 POINTER_MOTION +1.83s 2.00/ 4.00
event16 POINTER_MOTION +1.84s 3.00/ 3.00
event16 POINTER_MOTION +1.85s 2.00/ 4.00
event16 POINTER_MOTION +1.86s 3.00/ 3.00
event16 POINTER_MOTION +1.88s -2.00/ -2.00
event16 POINTER_MOTION +1.89s -1.00/ -1.00
event16 POINTER_MOTION +1.92s 0.00/ -0.97
event16 POINTER_BUTTON +2.30s BTN_LEFT (272) released, seat count: 0
上記の出力では、 BTN_LEFT (272) pressed
と BTN_LEFT (272) released
の間に、
ドラッグ操作(カーソル移動)をした事が、確認できる。
原因
原因は、カーネル側がトラックポイントを、不適切なデバイスとして誤認識していた事だと思われる。
以下、カーネルメッセージに出力されていた、誤認識されたデバイス名を示す。
$ dmesg
....
[ 5740.679950] psmouse serio3: trackpoint: IBM TrackPoint firmware: 0x0e, buttons: 3/3
[ 5740.941526] input: TPPS/2 IBM TrackPoint as /devices/platform/i8042/serio1/serio3/input/input379
本来期待する認識デバイスは、以下のようなデバイス名である。
$ dmesg
....
[ 5863.157030] input: PS/2 Generic Mouse as /devices/platform/i8042/serio1/input/input381
あくまで推測だが、この誤ったデバイス認識が原因となり、各ボタンの長押しが正常に機能しなかったと思われる。
設定手順
設定は、以下の手順でおこなう。
一時的な設定
永続的な設定
一時的な設定
一度、 rmmod
で psmouse
カーネルモジュールを除去した後、 modprobe
で汎用PS/2マウスとして psmouse
を追加する。
# rmmod psmouse
# modprobe psmouse proto=bare
これらのコマンドを実行すると、カーネルメッセージ内に、汎用PS/2マウスデバイスとして認識された内容が出力される。
以下、出力例を示す。
$ dmesg
...
[ 7978.357786] input: PS/2 Generic Mouse as /devices/platform/i8042/serio1/input/input22
以上の出力が確認できれば、一時的な設定は完了である。
永続的な設定
/etc/modprobe.d/
以下に、次の内容を記述した、任意名称のファイルを配置する。
$ cat /etc/modprobe.d/trackpoint.conf
options psmouse proto=bare
以降、システム起動時から、トラックポイントが適切なデバイスとして認識されるようになる。
参考にしたもの
UbuntuとVirtual PCとホイールマウス | コンピータに関する知識をちまちまと。日記 2018/07/30 21:35:45 (JST) 参照
33292 - \[psmouse] Trackpoint takes long time to get detected 2018/07/30 21:35:50 (JST) 参照
雑記
今回のデバイス誤認識の根本原因は、どうやらカーネルのバグらしい。
→ https://bugzilla.kernel.org/show_bug.cgi?id=33292 2018/07/30 21:35:54 (JST) 参照
→ まさかドラッグ操作が出来なくなるとは、思ってもいなかったorz
→ とはいえ、バグだと判明しているのなら、誤認識した理由が納得できる…ような?modprobe psmouse proto=bare
のbare
は、汎用PS/2マウスを意味しているらしい。
→ https://srad.jp/~oku/journal/261113 2018/07/30 21:44:21 (JST) 参照
→ 他にも、imps
やexps
があるとか。
→ これらの違いは、ソースコードを眺めた感じ、スクロールホイール(imps
)や、第4・5ボタン(exps
)の有無っぽい。
→ https://github.com/torvalds/linux/blob/master/drivers/input/mouse/psmouse-base.c 2018/07/30 21:47:26 (JST) 参照ちょっとよく分からなかったのが、マウスデバイスが2つ割り当てられていた事。
→ というのも、トラックパッドはUEFIで無効化しており、使用可能なマウスデバイスはトラックポイントしか無いはずなので…
→ この現象の原因が、結局よく分からなかった。
→ これも、前述のカーネルバグに起因しているんだろうか?
→ 以下、参考として、マウスデバイスが2つ存在する事と、dmesg
の出力を貼っておく。
### 本問題が発生している状態
$ ls -l /dev/input/mouse*
crw-rw---- 1 root input 13, 32 7月 30 13:52 /dev/input/mouse0
crw-rw---- 1 root input 13, 33 7月 30 13:52 /dev/input/mouse1
$ dmesg
...
[ 6307.737972] psmouse serio1: synaptics: queried max coordinates: x [..5712], y [..4780]
[ 6307.778426] psmouse serio1: synaptics: queried min coordinates: x [1232..], y [1074..]
[ 6307.778436] psmouse serio1: synaptics: Your touchpad (PNP: LEN2053 PNP0f13) says it can support a different bus. If i2c-hid and hid-rmi are not used, you might want to try setting psmouse.synaptics_intertouch to 1 and report this to linux-input@vger.kernel.org.
[ 6307.867424] psmouse serio1: synaptics: Touchpad model: 1, fw: 8.16, id: 0x1e2b1, caps: 0xf40aa3/0x943300/0x12e800/0x410000, board id: 3075, fw id: 2622508
[ 6307.867438] psmouse serio1: synaptics: serio: Synaptics pass-through port at isa0060/serio1/input0
[ 6307.923962] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input393
[ 6308.616931] psmouse serio6: trackpoint: IBM TrackPoint firmware: 0x0e, buttons: 3/3
[ 6308.824904] input: TPPS/2 IBM TrackPoint as /devices/platform/i8042/serio1/serio6/input/input394
### 対処方法を実行する
# rmmod psmouse
# modprobe psmouse proto=bare
$ ls -l /dev/input/mouse*
crw-rw---- 1 root input 13, 32 7月 30 13:53 /dev/input/mouse0
$ dmesg
...
[ 6387.478804] input: PS/2 Generic Mouse as /devices/platform/i8042/serio1/input/input398