環境
OS : Ubuntu 18.04 LTS
ひとまず、何も考えずにBluetoothペアリングさせるとSynaptic Touchpadとは認識されない。Synaptic Touchpadというのは、二本指スクロールとか、タップクリックとかのいわゆるスマートなTouchpad。
カーソルは動かせるしクリックは出来るけど、その他は何も出来ない使えないTouchpadになってしまいます。
Magic Trackpad 2を取り巻く現状
現状を正しく認識することがとても大事なので、調べた内容を一つずつ書きます。このコンテキストを知識として持った上で環境を整えれば、今後の変化にもついていけるはず。
1. ドライバーについて
Linux用のMagic Trackpad 2ドライバーは有志の方が作ってくれています。
https://github.com/robotrovsky/Linux-Magic-Trackpad-2-Driver
そして、嬉しいことにKernel 4.20以降のバージョンではデフォルトで入っています。なので、まずはKernelのバージョンを4.20に上げるのが素直な対応です。
こんな感じで4.20系にしておきましょう。
1 | $ uname -r |
2. xserver-xorg-input-synaptics
について
上記のMagic Trackpad 2ドライバーは、libinput
というライブラリーを使うのですが、すでにdistributionに含まれているxserver-xorg-input-synaptics
というドライバーがあります。もし、Magic Trackpad 2がこっちのドライバーを掴んでしまうと、上手く動作しません。
なので、下記コマンドで入力デバイスの詳細を表示して確認します。
これで一覧を出します。下記は例ですが、idが表示されるのでMagic TrackPad 2のidをひかえます。
1 | $ xinput list |
入力デバイスの詳細を表示します。下はX1 CarbonのTouchPadの例です。
1 | $ xinput list-props 12 |
表示されたデバイス詳細にlibinput
とあれば、libinput
を使えています。synapticXXXXX
みたいな感じの表示が沢山書いてあったらsynaptic
のドライバーを使ってしまっています。もう少しマシな確認方法を見つけたかったのですが、まあコレで分かります。
もし、synaptic
だった場合は、思い切ってアンインストールします。まあ、問題が出たら元に戻せばいいさの精神です。
1 | sudo apt remove xserver-xorg-input-synaptics |
3. libinputのバージョンについて
Kernelを4.20にアップデートして、synapticドライバーをアンインストールしても、Magic TrackPad 2は思ったように動いてくれません。正確に言うと、動作はするのですが、かなり圧力をかけてタッチしないと動きません。
これは、TouchPadのsensitivity(敏感さ)の設定らしいのですが、libinput
のデフォルトの状態だとMagic TrackPad 2は相当重たい感じになります。はっきり言って使い物にならないです。
このSensitivityの設定についてですが、Ubuntu18.04LTSにstableでインストールされているlibinput
のバージョン1.10系で、公式サイトの手順通りに試したのですが、上手く行かなかったです。そのため、libinput
のバージョン1.12系にアップデートしました。libinput
のバージョンは下記のコマンドでチェック出来ます。※libinput-toolsのインストールが必要です。
1 | $ libinput --version |
この記事を書いている2019/03/03現在、1.12.1-1がstableですので、それをインストールします。
https://launchpad.net/ubuntu/+source/libinput
サイトにアクセスして、下記の4つのdebをダウンロードします。お使いの環境に合わせてダウンロードするファイルは変えてください。X1 Carbonであれば、AMD64でOK。
1 | libinput10_1.12.1-1_amd64.deb |
インストールが終わったら、rebootしてバージョンを確認します。
1 | $ libinput --version |
4. quirk
libinput
の1.12系は、設定ファイルを適切な場所に配置することで、libinput
の設定を上書きすることが出来ます。細かいデバイスごとの差異をこれで吸収しようという意図のようです。なお、公式サイトにはquirkのやり方は将来変更されるかもしれないと書いてあるので、libinput
のバージョンごとにやり方が細かく変わって来そうです。
1.12系の場合は、下記のファイルを設置すればOKです。
1 | $ cat /etc/libinput/local-overrides.quirks |
内容については、Magic Trackpad 2のドライバーを作成した方が、README.mdに書いてくれているものです。
https://github.com/robotrovsky/Linux-Magic-Trackpad-2-Driver
quirkは「癖、ねじれ」とかいう意味だそうで、まさしくデバイスごとの癖を直すためのファイルですね。
libinput
のquirk設定については公式サイトに確認方法も含めてよく書いてあるので、試してみると面白いです。感圧の数値とかも見ることができます。
https://wayland.freedesktop.org/libinput/doc/1.12.4/touchpad-pressure.html
まとめ
以上の設定を完了すると、Ubuntu 18.04 LTSでMagic Trackpad 2がヌルヌル動いてくれます。今回の設定作業の最中に、libinput
をアップデートしたり削除したりしている内にUbuntuの入力装置が全部動かなくなるという状態に陥りましたが、復旧できました。その手順については、次のエントリーにて…
2020-05-14追記
Magic Trackpad 2 がlibinput
の力でヌルヌル動くようになったのですが、基本的に自宅で作業するときに一時的に使うことが多かったため、あまり長時間の使用はしていませんでした。たまに、カーソルが反応しなくなる時もありましたが、電源ON/OFFをすることで復旧するので、あまり気にもしていませんでした。
変化が起きたのは、Covid-19の影響で自宅作業が増えてきた2020年2月以降、自宅作業が多くなってくると、カーソル無反応現象が1〜2時間に1回の頻度で発生することがわかりました。打ち合わせをしている時に発生すると、大急ぎで電源ON/OFFをする羽目になるので、ストレスがたまります。
Web上での情報を元に、この問題を解消するために自分がやってみたことが下記の通りです。
- Ubuntu自体のバージョンアップ 18.04 -> 20.04
libinput
のバージョンアップ 1.12 -> 1.15bluetoothd
のコントローラーモード変更 “dual” -> “bredr”, “le”- qurikでの
touch-size
,touchpad-pressure
の調整
これらは、全て効果がありませんでした。
しかし、最後にダメ元で試した方法により、カーソル無反応現象の発生が収まりました。対応後二日以上経過していますが、Magic Trackpad 2の接続状態は良好です。
対応内容詳細
dmesg
や journalctl -ru bluetooth
で出てくるログに以下のような行が出てくると、私の症状と同じです。
このログが出ると、Magic Trackpad 2のマウスカーソルは動かなくなります。
1 | [28915.578230] magicmouse 0005:004C:0265.0016: unknown main item tag 0x0 |
厳密にいうと、指でトラックパッドの上をいろんな方向になぞるとちょっとだけカーソルが動いたりします。接続されているがカーソルが動かないというフリーズしたような状態になるのがポイントです。
カーネルのbugzilla
に下記の投稿があり、投稿者からのpatchファイルも添付されています。
103631 – magicmouse disconnects when CONFIG_HID_BATTERY_STRENGTH=Y
2015年頃にCONFIG_HID_BATTERY_STRENGTH
というカーネルパラーメーターのデフォルト値が変わったことが影響しているとのことです。 Magic Trackpad 2のバッテリー容量が現象してくると、電池消費を抑えるために接続断するという動作です。
どうやら、バッテリーが減って、カーネルパラメーターの閾値以下になることで、Magic Trackpad 2との接続を切ろうとするのですが、ドライバーが上手く対応できておらず、フリーズしたような状態に陥るようです。
投稿されているパッチは2種類あります。それぞれ、以下の内容です。
- Bluetoothモジュールの電池消費を抑える機能を全体的にOFFにする
- Magic Trackpad 2だけを対象にして、電池消費を抑える機能をOFFにする
今回は、2のパッチをあててカーネルをコンパイル&適用&再起動しました。
パッチの内容
1 | --- a/drivers/hid/hid-input.c |
でも、どうやってパッチあてたら…という方もいると思いますので、手順の参考リンクを貼っておきます。というか私も初めてやった作業でした。
初心者向けKernelのビルド手順 | ガジェット好きの日記
私の場合、Ubuntu 20.04 LTSにアップグレードした状態で、カーネルのバージョンは
1 | $ uname -r |
でした。完全に同じバージョンのソースを落としたかったのですが、見つけられなかったので5.4.40
を元にしてパッチをあてて作業しました。
現在は…
1 | $ uname -r |
となっています。ひとまず現状としては、Linux上で快適に動くトラックパッドを得ることができたので満足しています。パッチを当てるという新しい経験も出来て、非常に嬉しいです。
この修正内容は、内容が内容なのでカーネルに取り込まれることは無さそうです。Bluetoothモジュールのデバッグ方法を色々としらべているので、上手くデバッグできるようになったら、ドライバー本体にPR投げてみたいなぁという野望が生まれました。