xbindkeysで捗るお話

xbindkeysについて

xbindkeysは,キーボードのinputをフックして適当なコマンドを発行できるデーモンです.自分だけのキーボードショートカットを作ったりするとき便利ですね.使い方は,xbindkeys -kでキーを取得して,そいつを~/.xbindkeysrcに書いてxbindkeysを動かせばOKです.例えば,Control+Shift+F11したときに音声のミュートをトグルするようなショートカットを作ってみましょう.まずはキーを取得します.

xbindkeys -k

上記コマンドを入力した上でControl+Shift+F11とか入力すると,以下のように出力されます.

Press combination of keys or/and click under the window.
You can use one of the two lines after "NoCommand"
in $HOME/.xbindkeysrc to bind a key.
"(Scheme function)"
    m:0x5 + c:95
    Control+Shift + F11

この出力を参考に,~/.xbindkeysrcを編集します.

"amixer sset Master toggle"
	Control+Shift + F11

設定が書けたらxbindkeysを立ち上げます.複数動いていると面倒なので,先に既存のxbindkeysを殺しておきます.

killall xbindkeys; xbindkeys

この状態でControl+Shift+F11するとミュートのトグルが効くと思います.これで,適当なキーにコマンドを割り当てることができるので,Control+Mod4*1+[aenpfb]でどこでもEmacsキーバインドが使えるようにします.

まずは以下のファイルを/usr/local/bin/enter_keystroke.shとかに保存します.

#!/bin/bash

base=`basename $0 | sed -e 's/\.sh$//g'`
cmd=`echo $base | awk -F '_' '{print $1}'`
keystroke=`echo $base | sed -e 's/^[^_]\+_//g'`

id=`xdotool getwindowfocus`
case $cmd in
key)
  xdotool key --window $id "$keystroke" > /dev/null 2>&1
  ;;
type)
  echo -n "$keystroke" | xclip -i -selection clipboard
  xdotool key --window $id "ctrl+v" > /dev/null 2>&1
  ;;
*)
	echo "usage: ln -s $0 {key|type}_<keystroke>.sh"
	exit 1;;
esac

キー入力ができるようにシンボリックリンクを作成します.

chmod +x /usr/local/bin/enter_keystroke.sh
ln -s /usr/local/bin/enter_keystroke.sh /usr/local/bin/key_Right.sh
ln -s /usr/local/bin/enter_keystroke.sh /usr/local/bin/key_Left.sh
ln -s /usr/local/bin/enter_keystroke.sh /usr/local/bin/key_Up.sh
ln -s /usr/local/bin/enter_keystroke.sh /usr/local/bin/key_Down.sh
ln -s /usr/local/bin/enter_keystroke.sh /usr/local/bin/key_Home.sh
ln -s /usr/local/bin/enter_keystroke.sh /usr/local/bin/key_End.sh

~/.xbindkeysrcに以下を追記します.

"/usr/local/bin/key_Home.sh"
	Control+Mod4 + a
"/usr/local/bin/key_End.sh"
	Control+Mod4 + e
"/usr/local/bin/key_Down.sh"
	Control+Mod4 + n
"/usr/local/bin/key_Up.sh"
	Control+Mod4 + p
"/usr/local/bin/key_Right.sh"
	Control+Mod4 + f
"/usr/local/bin/key_Left.sh"
	Control+Mod4 + b

xbindkeysを再起動します.

killall xbindkeys; xbindkeys

これで,Control+Mod4 + [aenpfb]が効くようになりました.~/.profileとかにxbindkeysって書いておきましょう.

*1:superキーとか.WindowsキーやCommandキーがそれに相当.