ページ

2015-04-07

シェルスクリプトでゲームパッドのボタン入力をキー入力に変換する

ステップオーバーやステップインなどの作業はF7, F8などにバインドされていることが多いが、IDEによって異なるので、Windowsではゲームパッド/ジョイスティックのボタン入力にバインドしていた。Ubuntuでも同じようなことがしたいなぁと思ってやってみた。最終的なキーの対応は、こんな感じ。


パッケージのインストール

ツールが入っている「joystick」パッケージと、GUIで確認できる「jstest-gtk」パッケージをインストールする。
# apt-get install joystick jstest-gtk
これで、jstest-gtkコマンドが使えるようになるので、GUIで見ながら動作するかどうかを確認する。マッピング変更もできるらしい。jstest /dev/input/js0 などとすると、コマンドラインでも確認できる。

普通の使い方

さらに「xserver-xorg-input-joystick」パッケージをインストールし、Xを再起動すると、スティックがマウスカーソルに、ボタンがマウスボタンのように使えるようになる。Xの設定やら、xbindkeysの設定などすればそれはそれで良い感じで使えると思う。が、今回は消した。

シェルスクリプトで処理する

ただ、Xの入力に変換すると、どこのインプットデバイスから来たのかなど設定が面倒そうなので、(cf. Multiple keyboards)今回はシンプルにシェルスクリプトと先ほどのjstestコマンド、それからキー操作がコマンドでできるxdotoolコマンドでやることにした。

jstest --event /dev/input/js0 とすると、以下の感じで1行1イベントで飛んでくる。type 1がボタンのイベントで、numberがボタンの番号、valueがpress/releaseを意味している。type 2は軸の動作。

releaseだけ見ておけば使える感じになったので、こうなった。

sedにはバッファしない-uオプションを忘れないようにしないと、流れてこなくなる。

Pythonで処理する(おまけ)

jaraco.inputで一応できたけど、余計なイベントが飛んでくる感じだったので、もう少し気合を入れて実装しないといけなそうだった。今回は、コマンド実行するだけなのでシェルスクリプトで行くことにした。なお、pipでインストールできるjaraco.input 1.0.1はバグっていて、コンストラクタの処理を肩代わりしないといけないのに注意。最新版はもう少し頑張っている模様。

0 件のコメント:

コメントを投稿