サブ機のつもりだったThinkPad

気軽な作業マシンのつもりで、格安の中古ラップトップを導入した。

機体は ThinkPad X1 Carbon Gen 7。Linux Mint を入れて、サブ機として使うつもりだった。軽く調べものをする。文章を書く。出先で少し作業する。その程度の位置づけだった。

ところが、思った以上に具合がよかった。

薄い。軽い。キーボードがいい。Linux Mint も素直に動く。大企業のリース落ちラップトップとしては、余生どころか普通に現役だった。気がつくと、サブ機のはずがメイン機になっていた。

ただ、ひとつ気になることがあった。

タッチパッドである。

便利なものが、邪魔になることがある

タッチパッド自体が悪いわけではない。

むしろ普通に便利だ。スクロールできる。細かい操作もできる。現代のノートPCとしてはあって当然の入力装置である。

しかし、自分の使い方では誤操作が目立ってきた。

文章を書いている途中で、無意識に手のひらや親指の付け根が触れる。気づくとカーソル位置がずれている。別の場所に文字を打っている。選択範囲が変わっている。

小さな事故だ。

けれど、文章を書く端末としては地味に効く。

そのとき、ふと思い出した。

初めて手にしたラップトップもThinkPadだった。IBM ThinkPad R31。あの頃は、今のような巨大タッチパッド体験などなかった。キーボードの真ん中に赤いポチがあり、それを倒してポインタを動かしていた。

ならば、いっそ戻ればいい。

タッチパッドを無効化し、TrackPointに回帰する。

最初は touchpad-off だった

最初にやったことは単純だった。

xinput list でタッチパッドの名前を確認する。

SYNA8004:00 06CB:CD8B Touchpad

そして無効化する。

xinput disable "SYNA8004:00 06CB:CD8B Touchpad"

これだけで、機体の感触はかなり変わった。

手はホームポジションに残る。ポインタ操作は赤いポチへ集約される。文章を書く機械としての一貫性が増す。

当初は、この設定を単なる切り替えとして扱っていた。

#!/usr/bin/env bash
xinput disable "SYNA8004:00 06CB:CD8B Touchpad"

必要になったら戻す。

#!/usr/bin/env bash
xinput enable "SYNA8004:00 06CB:CD8B Touchpad"

つまり touchpad-off.shtouchpad-on.sh の世界である。

この時点では、まだ単なる便利設定だった。

X11の古いUXと衝突する

ところが、タッチパッドを切っただけでは終わらなかった。

TrackPointでスクロールするには、中央ボタンを押しながら赤ポチを倒す。この操作自体はThinkPadらしい。しかしLinux/X11環境では、中央ボタンには別の意味もある。

middle click paste である。

文字列を選択する

PRIMARY selection に入る

中クリック

貼り付け

これはX11の古い便利機能だ。慣れている人にとっては速い。しかし、自分が初めてThinkPadを使っていたWindows XP時代のUXとは違う。

自分の身体にとって、中央ボタンは貼り付けボタンではなかった。

中央ボタンは、TrackPointスクロールのためのボタンだった。

だから事故が起きる。

コードや文章を読んでいる。スクロールする。どこかで選択していた文字列が、意図せず貼り付く。カーソルズレとは別種の事故だが、これもまた入力経路のノイズだった。

中央ボタン自体を殺すわけにはいかない。スクロールに必要だからだ。

殺すべきはボタンではなく、pasteとしての解釈である。

xfconf-query -c xsettings -p /Gtk/EnablePrimaryPaste -n -t bool -s false 2>/dev/null \
  || xfconf-query -c xsettings -p /Gtk/EnablePrimaryPaste -s false

ただし、これはGTK/Xfce系アプリへの方針指定であって、X11全体からmiddle click pasteを消すものではなかった。Electron、ターミナル、一部エディタなど、アプリ側が独自にButton2を解釈する場合、依然として貼り付けが発動する。

そのため最終的には、TrackPointデバイス側でButton2をアプリケーションへ配送しないようにした。

xinput set-button-map "TPPS/2 Elan TrackPoint" 1 0 3 4 5 6 7

0 は中央ボタンをアプリケーションへ渡さない指定である。これと同時に、libinput側では中央ボタンをTrackPointスクロール用のモディファイアとして残す。

xinput set-prop "TPPS/2 Elan TrackPoint" "libinput Scroll Method Enabled" 0 0 1
xinput set-prop "TPPS/2 Elan TrackPoint" "libinput Button Scrolling Button" 2

これで、中央ボタンはスクロールのために残る。中クリック貼り付けは封印される。貼り付けは Ctrl+V / Ctrl+Shift+V に統制される。

Mode-Inという名前に変わった

この時点で、やっていることは単なるタッチパッドのon/offではなくなっていた。

Touchpad を無効化する
PrimaryPaste を無効化する
TrackPoint を主入力として固定する
中央ボタンをスクロールのために残す
Button2をアプリケーションへ配送しない
貼り付け経路を明示的なキー操作に寄せる

これは入力モードへの移行だ。 そして、スクリプト名を変えた。

touchpad-off.sh ではなく、thinkpadder-mode-in.sh

#!/usr/bin/env bash
set -euo pipefail

TOUCHPAD="SYNA8004:00 06CB:CD8B Touchpad"
TRACKPOINT="TPPS/2 Elan TrackPoint"
PRIMARY_PASTE="/Gtk/EnablePrimaryPaste"

xinput disable "$TOUCHPAD" 2>/dev/null || true

xfconf-query -c xsettings -p "$PRIMARY_PASTE" -n -t bool -s false 2>/dev/null \
  || xfconf-query -c xsettings -p "$PRIMARY_PASTE" -s false

if xinput list --name-only | grep -Fxq "$TRACKPOINT"; then
  xinput set-prop "$TRACKPOINT" "libinput Scroll Method Enabled" 0 0 1 2>/dev/null || true
  xinput set-prop "$TRACKPOINT" "libinput Button Scrolling Button" 2 2>/dev/null || true
  xinput set-button-map "$TRACKPOINT" 1 0 3 4 5 6 7 2>/dev/null || true
fi

Xfce の autostart にも登録する。

[Desktop Entry]
Type=Application
Name=ThinkPadder Mode In
Comment=Enter TrackPoint-first ThinkPad input mode
Exec=/home/rbcn2000/.local/bin/thinkpadder-mode-in.sh
OnlyShowIn=XFCE;
X-GNOME-Autostart-enabled=true
Terminal=false

起動したら、自動的にThinkPadder Modeへ入る。

制約はインターフェースだ

この選択は、万人向けではない。

タッチパッドを使えるほうが便利な人は多い。X11のmiddle click pasteを愛用している人もいる。戻る導線を常に見える場所に置きたい人もいるだろう。

しかし、自分にとっては、退路を断って操作を固定するほうが合理的だった。

誤操作を減らしたい。入力姿勢を安定させたい。TrackPoint中心の身体感覚に戻りたい。その目的に対して、選択肢を減らすことは不便化ではなかった。

制約は、インターフェースだった。

できることを増やすだけがUXではない。できないことを作ることで、身体が迷わなくなることもある。タッチパッドを断つから、赤ポチに戻る。Button2をアプリケーションへ渡さないから、中央ボタンをスクロールのために信頼できる。

道具を自分に合わせるだけがカスタマイズではない。

自分の身体を、道具の思想に合わせるカスタマイズもある。

TrackPointはマウスの代替ではない。

キーボードの延長である。

そう考えるなら、タッチパッドを無効化することは単なる懐古ではない。入力経路を統制し、身体化を支えるための設計である。


この記事では、TrackPoint UXを入り口に、制約と身体化設計について考えた。

同じ出来事を、もう少し個人的な記憶として書いた記事はこちら。

https://fragmentofview.rbcn.cc/posts/red-dot-in-the-middle/

cover image: unsplash