ペンタブノートPCでLinuxを使う

ThinkPad X201 TabletThinkPad X220 TabletLinux (Debian sid)をインストールして, なかなか快適に使えるようになってきたので備忘を兼ねて設定方法を書いておく.

やったこと

  • ペンタブレットがちゃんと動くようにする
  • 画面を(ベゼルボタンで)回転できるようにする
    • 加速度センサーで回転も超頑張ると不可能ではないらしいがやってない
  • 画面の回転でペンタブレットの座標がおかしくならないようにする
  • ソフトウェアキーボードの設定
  • ペンタブレットならではのソフトウェアを試す
    • 自由に書いたりPDFに注釈したり
    • 手書き文字認識
    • マルチタッチのピンチ操作で拡大/縮小

ドライバ

とくに何もしなくても自動的にインストールされる. インストールされているものを見ると以下のものが関係ありそう.

  • libwacom-common
  • libwacom2
  • xserver-xorg-input-wacom

ハードウェア認識の修正(X220のみ)

udevパッケージの設定がX20*にしか対応していなかったので, X220では修正が必要.

/lib/udev/rules.d/95-keymap.rules
-ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="ThinkPad X20* Tablet*", ATTR{[dmi/id]product_version}=="* Tablet", RUN+="keymap $name lenovo-thinkpad_x200_tablet"
+ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="ThinkPad X2* Tablet*", ATTR{[dmi/id]product_version}=="* Tablet", RUN+="keymap $name lenovo-thinkpad_x200_tablet"

なぜかディスプレイを反転するとXが落ちるので, 反転時に何もしないようにする.

/etc/acpi/handler.sh
+video/tabletmode)
+    exit 1
+    ;;

上のスクリプトをオプションで有効にする必要あり.

/etc/default/acpid
-#OPTIONS=""
+OPTIONS="-S"

回転設定

ディスプレイの回転そのものはxrandrコマンドでできる. ただし, それだけではペンタブレットの座標系が更新されないので, 縦長のディスプレイなのに座標系は横長にマップされておかしなことになる. ディスプレイが回転したことをペンダブレットドライバに教えるにはxsetwacomというコマンドを使えばいいらしい.

......という辺りのことをよきにはからってくれるthink-rotate*1というものを作ってくれている人がいるので, それを使うのが早い!

think-rotateのインストール
$ sudo aptitude install git make python-docutils xinput
$ git clone https://github.com/martin-ueding/think-rotate
$ cd think-rotate
$ make
$ sudo make install
ベゼルボタンに回転コマンドを割り当て

ベゼルボタンにはキーコードが適切に割り当たっているはずなので, あとはそのキーコードのキーシンボルを設定すれば, コマンドのショートカットキーとして使える.

キーコードはxevコマンドを起動して実際にボタンを押すことで確認できる(ついでにシンボルが設定されているかどうかも分かる). キーコードには何か未使用のシンボルを設定しないといけないので, ここではなんとなくそれっぽいXF86RotationKBというシンボルを使うことにする.

$ vi ~/.Xmodmap
keycode 161 = XF86RotationKB NoSymbol XF86RotationKB

あとはシステム設定のキーボード設定で/usr/bin/think-rotateのショートカットキーを設定するだけ.

ソフトウェアキーボード

think-rotateには回転のついでにKDE用のkvkbdを起動する設定も書かれているけれど, ディスプレイを反転だけして回転せずに使う場合もあるし, ロック解除の時にも必要なので, 別途設定した方がよさそう.

GNOMEでも使えるものとしてはxvkbdmatchbox-keyboardがあるけれど, 設定してもロック画面で使えるようにならなかったので, Ubuntuonboardコマンドを無理矢理Debianに入れた.

onboardのインストール

アーキテクチャに合わせてUbuntuアーカイブを選ぶ. ここではamd64.

$ wget http://archive.ubuntu.com/ubuntu/pool/main/v/virtkey/python-virtkey_0.60.0-0ubuntu5_amd64.deb
$ wget http://archive.ubuntu.com/ubuntu/pool/main/o/onboard/onboard_0.97.0-0ubuntu4_amd64.deb
$ sudo dpkg -i python-virtkey_0.60.0-0ubuntu5_amd64.deb
$ sudo dpkg -i onboard_0.97.0-0ubuntu4_amd64.deb

SuperキーがUbuntuのロゴになっていて専用のフォントが要るので, それも入れる. (Superキーの表示を変える方法はあるかも.)

$ mkdir -p ~/.fonts
$ cd ~/.fonts
$ wget http://font.ubuntu.com/download/ubuntu-font-family-0.80.zip
$ unzip ubuntu-font-family-0.80.zip
$ rm ubuntu-font-family-0.80.zip
$ fc-cache .

onboardは初回起動時にロック解除時に使用するかどうか訊かれるので, 使用すると答えれば自動的に設定してくれる.

ベゼルボタンから起動する

回転の場合と同じように, ベゼルボタンにショートカットキーを割り当てて, /usr/bin/onboardを起動するようにできる. たとえば, X201の回転ボタンとロックボタンの間のボタン(ツールを起動するボタン?)で起動するようにしたければ, ~/.Xmodmapに次のように書いて, ショートカットキーを設定すればよい.

keycode 149 = XF86Launch0 NoSymbol XF86Launch0

動作の確認

自由に書いてみる

Windowsで言うところのWindows Journalに相当するソフトウェアとしてxournalというのがあるので, これを使うとペンタブレットの使い心地がよくわかる.

個人的に数式や形式的な証明の導出木なんかを書くことが多くて, 清書する場合はTeXで書くとしても考えをまとめる途中のものを走り書きするには手書きするしかないので, これはとても重宝する. ノードグラフ等をよく描くという人にもきっと便利だろう. もちろん論文のPDFを読みながらメモをするのにも使える(PDFに注釈をつけるモードがある).

ペンタブレットによる自由帳は, 紙面の物理的制約がない分だけ紙よりも優れている. とくに

  • 既に書いたものを移動/削除できる
    • どこに書くか悩まなくてもとりあえず書けばいい
  • ストローク単位での移動/削除もできる
    • 線が重なりあっていても特定の線だけ綺麗に消せる
  • 幅が足りなくなったら, 既に書いた部分を縮小すればいい

あたりの特徴が素晴らしい.

これらの特徴を最大限に活かすために, ペンのボタンを押したときの動作を自由選択ツールにしておくと便利.

手書き文字認識

ibusで動くibus-tegakiというのがあるのでそれを入れる. 以下をインストールしてibusの入力方式で「tegaki」を指定すれば日本語の手書き文字認識が使える.

$ aptitude install tegaki-recognize ibus-tegaki tegaki-zennia-japanese

ただし, 残念ながらアルファベットは認識してくれないらしい. (アルファベットはさすがにソフトウェアキーボードで打つ方が速いと思うので問題ない?)

ピンチ操作

X201/X220はマルチタッチにも対応していて, これもとくに何もしなくても動作するらしい. ただソフトウェアごとの対応状況は微妙. もう少しなんとかならないのか調べてみる必要あり.

evince
なんかスクロールしてしまう? ちゃんと拡大/縮小できたときもあったような
eog
拡大/縮小できるけれど, 同じ操作でも拡大になったり縮小になったりよくわからない

雑感


Linuxペンタブレットは問題が多くて辛いという印象で, なかなかWindowsから移行できずにいたので, なんとかだいたいうまく動くようになって本当によかった.

実は, Debian sidはDebian wheezyの上にkvm-qemuで仮想化して動かしていて, ホストOSの/etc/inittabX -queryすることで, ホストOSのXサーバにゲストOSのXクライアントをXDMCPで接続させて使っているという変態仕様なので, さすがにこの環境では問題だらけだろう, と思っていたら, 仮想化なしでも必要な上記の設定以外に何もしていないのに全く問題なく動いてくれて, 感動した. Xすごい. (もちろん, ペンタブレット以外の部分では問題だらけなので, ノートPCの仮想化についてはまたそのうちまとめる.)

*1:名前だけ見るとThinkPad専用っぽいけどxsetwacomが動く環境ならThinkPadでなくてもいけるはず.