Kinesisを接続したらkinesisというデバイスファイルを作るようにした

観測史上もっとも暑い残暑だということでしたが、10月になってもこんだけ暑いのは東京に出てきてから初めてな気がします。窓を開けても暑いとか勘弁してください。

さて、私は部屋では基本的にHappy Hacking Keyboard Professional JPを使っています。

日本語配列なのは、スペースバーの長さよりも、その周辺に割り振れるキーが多いことが一番の理由です。Awesome/XMonadでは親指で押しやすい位置にモディファイアキーがあるのが大事だと思います。

しかし、それなりの時間をこのキーボードで叩いていると、態勢が悪いのかもしれませんが、手首とか腋?のあたりが突っ張ってくるような感じがするようになってきました。特に退職してからはキーボードの触る時間が格段に長くなったので、疲労も溜まるようになってきました。
実は以前からKinesis Advantageを購入して、一時期利用していました。

が、当時利用していたテーブルというかコタツの位置が高く、Kinesisを使ってもかなりきつく、逆に腕がきつくなってしまったのと、コタツの上が純粋に狭かったので使わなくなってしまいました。
今はテーブルを新しくして、高さもちょうどよくなったので、再度利用しようと引っ張りだしたのですが、Xでのキーボード認識がいまいちうまくいってくれませんでした。

KinesisLinuxにそのまま繋ぐと、/dev/input/by-id の直下に Vendor_Product_event_kbd のようなデバイスファイルが作られます。HHKBだと、Productの名前がちゃんと出るのですが、Kinesisだとコードがそのまま出るだけで、xorg.confにマッチルールを書こうにもちょっとなー、という状態になってしまいました。

別にKinesis以外のキーボードを利用することはそんなにないのですが、HHKBと切り替えて使いたい時には、ちゃんとマッチルールを作らないと、USなのにJPのレイアウトが適用されたりして悲惨なことになります。というかなりました。

ここでやっと掲題になるのですが、現在のLinuxでは、デバイスの管理にはudevという仕組みを使います。これ自体は2.6から導入されているので、かなり昔から利用できるものですが、色々調べてみると、udevのルールを記述する際に情報収集として利用するツールとして、「udevinfo」というツールがどこでも利用するように書かれていました。

・・・が、私が利用しているGentooのバージョンではそんなものは影も形もありません。(udev-171-r6)
どうも現在は udevinfo の代わりに、「udevadm」というツールを利用するようです。

udevについて紹介されているページではよく↓のようなコマンドが掲載されていました。

$ udevinfo -a -p $(udevinfo -q path -n /path/to/dev)

udevadmでは、以下のようにすれば大体同じようなデータが取れます。

$ udevadm info --query=all --name=/path/to/dev --attribute-walk
もしくは
$ udevadm info --query=all --attribute-walk --path=$(udevadm info --query=path --name=/name/of/dev)

多分後者の方が正当だとは思いますが、結構長いので、必要な情報が取れるのなら前者でいいと思います。

udevのルール自体は、/etc/udev/rule.d に、10-local.rules として以下を入力しました。

KERNELS=="input*",SUBSYSTEMS=="input",ATTRS{name}=="HID 05ac:0204",SYMLINK+="input/kinesis"

KERNELS とか SUBSYSTEMS の部分は、KERNEL/SUBSYSTEM と書かれているものもありましたが、どうもそれでは動かないみたいでしたので、ちゃんとudevadmから取得した情報を使ってやった方がいいようです。ATTRS{*}の*の部分も同じです。

↑を作ったら、Gentooでは/etc/init.d/udev restartを実行すれば、自動的に/dev/input/kinesisが作られます。こいつをマッチングルールに使ってやればOKです。
ドライブを接続したら自動的にマウントする、とかもudevのルールとfstabを利用すれば出来るようです。私はそんな頻繁に外したり繋げたりするものがないのでやりませんが、興味のある方は検索してみてください。

まぁ実際にはこれだけではXでKinesisを使えるようにするにはちょっと足りなくて、xorg.conf.dとかに設定を追記する必要があるのですが、それはまたいずれ。