TenForward

技術ブログ。はてなダイアリーから移転しました

Happy Hacking Keyboard 2 の ◇ キー

私の仕事のメイン環境 (Plamo Linux やその他の Linux, Windows XPKVM スイッチで切り替え) のキーボードは HHK2 (Pro2 じゃなくて 2) (→ これ) を使っているのですが,最近は自宅も会社も MacBook (Air/Pro) を使っています.

元々日本語入力のオンオフは Ctrl-\ キーというちょっと変則的なキーを使っていました.egg 風ですな.

最近は Mac も慣れてきたので,普通の Command-Space にも慣れてきたし,そちらも Linux で設定しようかなと思ってやってみました.しかし HHK2 の時点では◇をAltにディップスイッチで割り当てることは出来ません(Fnキー or 無変換キーの二択).

xmodmap を使って簡単に

じゃあ xmodmap 使えば簡単やん,って事で,xev で◇キーのコードを調べると 102 です.

Plamo の場合,コンソール画面から startx で X を起動するのが普通なので,.xinitrc に以下を書けば簡単に◇キーを Alt に出来ます.

xmodmap -e 'keycode 102 = Alt_L'

しかしイマイチ動きが微妙でオンになるときならないときとかあって,スペースが挿入されたりします... >< xev で動きを見てみると,本物の Alt キーや Ctrl キーだと,キーを押しても一度しか KeyPress イベントが飛んでないようです.しかし◇キーだとリピート入力されてしまいます.

じゃあ,

xset -r 102

ってやれば,ということでやってみると,だいぶマシになりましたが,最初 2 回だけリピートされてしまっているようです.Why??

(ここで◇キーを押す!)
KeyPress event, serial 34, synthetic NO, window 0x1e00001,
    root 0xbb, subw 0x0, time 9349158, (105,-15), root:(1399,171),
    state 0x0, keycode 102 (keysym 0xffe9, Alt_L), same_screen YES,
    XKeysymToKeycode returns keycode: 64
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x1e00001,
    root 0xbb, subw 0x0, time 9349310, (105,-15), root:(1399,171),
    state 0x8, keycode 102 (keysym 0xffe9, Alt_L), same_screen YES,
    XKeysymToKeycode returns keycode: 64
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x1e00001,
    root 0xbb, subw 0x0, time 9349414, (105,-15), root:(1399,171),
    state 0x0, keycode 102 (keysym 0xffe9, Alt_L), same_screen YES,
    XKeysymToKeycode returns keycode: 64
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x1e00001,
    root 0xbb, subw 0x0, time 9349942, (105,-15), root:(1399,171),
    state 0x8, keycode 102 (keysym 0xffe9, Alt_L), same_screen YES,
    XKeysymToKeycode returns keycode: 64
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

xkeyboard-config の設定ファイルを書き換える

そこで,イマドキの X.org のキーボード設定ファイル群である xkeyboard-config の設定ファイルを書き換えてみました.

定義ファイルは Plamo の場合は /usr/share/X11/xkb/keycodes にあります.私の環境では X のキーボードは evdev を使っていますので,ここにある evdev というファイルを書き換えます.

右 Alt って使ってないので,とりあえずこれと入れ替え.

--- evdev.dist	2012-01-24 15:06:01.312391386 +0900
+++ evdev	2012-01-24 15:06:34.562533050 +0900
@@ -69,7 +69,7 @@
 	<LCTL> = 37;
 	<SPCE> = 65;
 	<RCTL> = 105;
-	<RALT> = 108;
+	<RALT> = 102;
 	// Microsoft keyboard extra keys
 	<LWIN> = 133;
 	<RWIN> = 134;
@@ -151,7 +151,7 @@
 	<HKTG> = 101;	// Hiragana/Katakana toggle
 	<AB11> = 97;	// backslash/underscore
 	<HENK> = 100;	// Henkan
-	<MUHE> = 102;	// Muhenkan
+	<MUHE> = 108;	// Muhenkan
 	<AE13> = 132;	// Yen
 	<KATA> =  98;	// Katakana
 	<HIRA> =  99;	// Hiragana

これで無事◇を押すと右ALTと認識されていました.が!!,xev で押しっ放しにすると,先と同じ 2 度イベントが飛んでくるようです... >

なら意味がないやってことで xmodmap の方法に戻しました... (トホホ)

(後日談 2012/02/01)

実は私の環境はキーボードを ATEN の KVM 切り替え機につないで,そこから出た PS/2 の線を PS2/USB 変換ケーブルで USB 変換して接続,というややこしいトラブルの種になりそうな構成です.


もしかしたらこの変換ケーブルがマズいのかも知れないよなあ,と思って,たまたま変換ケーブルの別の製品が使えたのでつないでみた所,2 度イベントが飛んでこなくなりました!これのせいか〜 ^^;


ところがこのつなぎかえた PS2/USB 変換ケーブルの方はマウスが微妙なんですよね.勝手に右クリックしたときのメニューが出てきたり,そのままマウスが利かなくなったりして使っていなかったモノでした.うーん,悩ましい... としばらく考えて,KVM 切り替え機から出てきたキーボードの線は今回問題がない方,KVM 切り替え機から出てきたマウスの線は以前から使っている物と PS2/USB 切り替え機を二つ別々につないで使っています.^^:


とりあえずこのエントリーはキーの入れ替えとか定義のメモになるのでそのまま.:-)