Gentoo Linux on ThinkPad X1 Carbon 5th
今年も会社のマシンを買い換えてもらいました(ありがとうございます)。X1 Carbon の2017年モデルです。前のモデルと比較すると
- CPU が Skylake から Kaby Lake に
- ディスプレイが狭額縁になって幅と奥行がそれぞれ 1cm ずつぐらい縮んだ
- 0.5mm ぐらい薄くなった
- 50g ぐらい軽くなった
- バッテリー容量が少しだけ増えた (52Wh -> 57Wh)
- タッチパッドがパコパコ言わなくなって落ち着いたクリック感になった
- 国内モデルでも LTE モデムを選べるようになった
- Thunderbolt 3 / USB 3.1 Type-C 端子が2つ付いて、充電と DisplayPort 出力にはこれを使うようになった
- OneLink+ (Lenovo 独自の多用途拡張端子) が廃止された。Ethernet アダプタ接続用の端子が復活した
という感じです。順当に進化していますね。
Gentoo のインストールは前年とほぼ同じ手順でいけました。違いは libinput の unmask が必要なくなったことぐらいでしょうか。LTE モデムは CONFIG_USB_NET_CDC_MBIM
ですんなり使えました。
一点ハマったのがポインティングデバイスの挙動がものすごく不安定なこと。X1 Carbon (5th) - Error: Touchpad lost sync at byte 1 : archlinux と同じ症状で、まともに使えたものではありません。
結論を先に書いておくと、TrackPoint とタッチパッドを両方ちゃんと動かすことはできませんでした。UEFI の設定で TrackPoint を disable にするとタッチパッドだけは問題なく動作するようになるので、これで凌いでいます。幸いこのモデルのタッチパッドは改善されていて MacBook と比べてもそう見劣りするものでもないし、ジェスチャも便利だからひとまずこれでいいかなあという感じです。
以下調べたこと:
- カーネルパラメータに
psmouse.proto=imps
を指定する- TrackPoint はセンターボタンスクロールを含め動作するが、タッチパッドの便利機能(二本指スクロールとか)が使えなくなる
- このマシンに載っているポインティングデバイスは Elantech 製のようだが、Linux だと Synaptics TouchPad として認識されているのがそもそもおかしいのでは?
- カーネルソースを弄って強制的に Elantech デバイスとして認識させてみると、magic knock には反応するものの未知のレスポンスを返してくる
- それを無視すると未知の hardware version を返してくる
- hardware version を最新の 4 と仮定して先に進めても capabilities の取得に失敗する。ここで断念した
- おそらく現状の Linux カーネル (4.11, 4.12) では対応できていないバージョンのデバイスなのだろう
- ALPS 製ポインティングデバイスが載っていることもあるようで、こっちなら問題ないのかも
追記
その後、ポインティングデバイスをちゃんと動作させることができました。
- git-sources-4.12_rc4 を入れる
以下のパッチを当てる
diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index 16c3046..0dff49e 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c @@ -173,6 +173,7 @@ static const char * const smbus_pnp_ids[] = { "LEN0046", /* X250 */ "LEN004a", /* W541 */ "LEN200f", /* T450s */ + "LEN0073", /* X1 Carbon 5 (Elantech) */ NULL }; diff --git a/drivers/input/rmi4/rmi_smbus.c b/drivers/input/rmi4/rmi_smbus.c index 225025a..2939a2f 100644 --- a/drivers/input/rmi4/rmi_smbus.c +++ b/drivers/input/rmi4/rmi_smbus.c @@ -322,7 +322,7 @@ static int rmi_smb_probe(struct i2c_client *client, rmi_dbg(RMI_DEBUG_XPORT, &client->dev, "Smbus version is %d", smbus_version); - if (smbus_version != 2) { + if (smbus_version != 2 && smbus_version != 3) { dev_err(&client->dev, "Unrecognized SMB version %d\n", smbus_version); return -ENODEV;
CONFIG_HID_RMI
,CONFIG_RMI4_SMB
を有効にする
こんな感じになります。TrackPoint が Logitech Wheel Mouse として認識されちゃってますが、動作に異常はなさそうです。
$ dmesg | grep -E 'psmouse|rmi4'
[ 2.074298] psmouse serio1: synaptics: queried max coordinates: x [..5678], y [..4758]
[ 2.108620] psmouse serio1: synaptics: queried min coordinates: x [1266..], y [1094..]
[ 2.108628] psmouse serio1: synaptics: Trying to set up SMBus access
[ 2.121537] rmi4_smbus 0-002c: registering SMbus-connected sensor
[ 2.183858] rmi4_f01 rmi4-00.fn01: found RMI device, manufacturer: Synaptics, product: TM3288-003, fw id: 2538625
[ 2.260783] input: Synaptics TM3288-003 as /devices/rmi4-00/input/input8
[ 3.650267] input: PS/2 Logitech Wheel Mouse as /devices/rmi4-00/rmi4-00.fn03/serio2/input/input17
$ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Synaptics TM3288-003 id=11 [slave pointer (2)]
⎜ ↳ PS/2 Logitech Wheel Mouse id=12 [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)]
↳ Sleep Button id=8 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
↳ ThinkPad Extra Buttons id=10 [slave keyboard (3)]