Xorg のキーボードドライバをいじってみた
修飾キーって単一でタイプしたときに何か別の表現もったほうがいいんじゃないの?とかスペースバーって押しやすい位置にあるわりに表現がスペースを入力するだけってどんだけ富豪的なんだとか、キーボードの入力効率について考えるたびに思ってしまいます。
先日、「SandS (Space and Shift) でシフトキーを親指で押して小指を守ろう!」(*) という記事を読んで、それなりに効果があるらしいことがわかったので実際にやってみました。
(*) http://www.pqrs.org/~tekezo/macosx/doc/keyboard/
いろいろやりかたはあると思うのですが、冴えない頭が Xorg のキーボードドライバをいじるのが一番楽だと判断したので今回はそこをいじりました。
よくわかりませんが、結構新しい Xorg が必要です。いじったのは xf86-input-keyboard-1.2.2(*) です。
(*) http://xorg.freedesktop.org/archive/individual/driver/xf86-input-keyboard-1.2.2.tar.bz2
ソースコードを展開しておいて、
https://kserver.panicode.com/panicode/experimental/xf86-input-keyboard-key-hack.patch
からパッチをダウンロードしてきて、
% cd xf86-input-keyboard-1.2.2 % patch -p0 < xf86-input-keyboard-key-hack.patch % autoconf % autoheader % configure --enable-hybrid-space --enable--hybrid-ctrl % make % cp src/.libs/kbd_drv.so /usr/lib/xorg/modules/input
でインストールできます。既存の kbd_drv.so を上書きしてますが、それがいやな方はいろいろいじる必要があると思います。
xorg.conf は以下のようになっている必要があります。
/etc/X11/xorg.conf:
Section "InputDevice" Identifier "Keyboard0" Driver "kbd" EndSection
--enable-hybrid-space を有効にしておくと、 Space キーと何かのキーを押したときに(Space キーを修飾キーのよう使ったときに)、 Space キーが Shift キーのようになります。また、単一で Space キーを押した場合は、そのままスペースが入力されます。例えば、 Space+a は "A" が入力され Space は " " が入力されます。
個人的には思っていたほど良くはありませんでした。というのは通常、スペースは Space キーを press したときに入力されるのですが、 --enable-hybrid-space の場合は press したときに Shift の役目をさせて、そのまま release されたら Space キーの役目をするようにしているので、実際に入力されるまでに若干の遅延が発生するのです。あと、これは慣れなのかもしれませんが、 Space キーと何かを押すというのは案外難しいです。日頃から Emacs を使って小指を鍛えている僕には微妙な結果でした( SKK も使ってるんですが)。まあ、慣れればものすごく便利なのかもしれないのでとりあえず有効にしてあります。
--enable-hybrid-ctrl を有効にしておくと、単一で Ctrl キーを押したときに ESC キーのようになります。これはかなり便利です。特に vi 系のエディタで力を発揮してくれます。ホームポジションを壊して ESC キーを押すかわりに Ctrl キーをポン (*) 。たまに意図せず Ctrl 押してしまうことがありますが、そんなのが気にならないぐらい便利です。
(*) vi 系のエディタ使ってる人って Ctrl+g を ESC にしてたりするのだろうか
あとは単純に Shift キーを押したら何かするとかありそうだけどアイデアが切れたのでこれぐらいで。
追記
クセなのかわからないのですが単一 Ctrl キーをついつい押してしまい混乱することがあるので Ctrl キーのかわりに Shift キーにしてみました (--enable-hybrid-shift) 。またハイブリッド Space キーは HHKB Pro ではあまり快適ではなかったので(慣れの問題?)無効にしました。あと Tab キーが Super キーのように振る舞うようになりました (--enable-hybrid-tab) 。こんな変態キーバインド誰も使わないと思いますが一応。
さらに追記
/etc/X11/xorg.conf で自由にキーコードが設定できるようになりました。ダミーのキーコードを設定して Xmodmap でバインドするということも可能です。僕は以下のような感じです。
/etc/X11/xorg.conf:
Section ”InputDevice" Identifier "Keyboard0" Driver "kbd" Option "HybridTab" "116" # ESC Option "HybridCtrl" "9" #Option "HybridShift" "9" # Shift Option "HybridSpace" "50" EndSection
~/.Xmodmap:
keycode 116 = Hyper_L
- Category(s)
- linux
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/matsuyama/hack-xorg-keyboard-driver/tbping