Ubuntuでの変換・無変換キーのFn化について
Windowsでは「AutoHotkey」を使ってキーバインドの変更をしていたが(過去の記事”AutoHotkeyの設定について“参照)、Ubuntuでも同じように変換・無変換キーをFn化するときのメモ。
xkbの設定
色々と試行錯誤をした結果、「Caps Lock」を修飾キーに設定し「変換」「無変換」に「Caps Lock」を割り当てることで、この両キーを「Fn」化することにした。「Fn」キーとの組み合わせの設定は以下のとおり。
「Fn」+「I」⇒「↑」
「Fn」+「K」⇒「↓」
「Fn」+「J」⇒「←」
「Fn」+「L」⇒「→」
「Fn」+「1」⇒「F1」
「Fn」+「2」⇒「F2」
「Fn」+「3」⇒「F3」
「Fn」+「4」⇒「F4」
「Fn」+「5」⇒「F5」
「Fn」+「6」⇒「F6」
「Fn」+「7」⇒「F7」
「Fn」+「8」⇒「F8」
「Fn」+「9」⇒「F9」
「Fn」+「0」⇒「F10」
「Fn」+「-」⇒「F11」
「Fn」+「^」⇒「F12」
「Fn」+「BS」⇒「Del」
「Fn」+「Esc」⇒「全角/半角」
「Fn」+「↑」⇒「PgUp」
「Fn」+「↓」⇒「PgDn」
「Fn」+「←」⇒「Home」
「Fn」+「→」⇒「End」
「Fn」+「H」⇒「Home」
「Fn」+「E」⇒「End」
「Fn」+「U」⇒「PgUp」
「Fn」+「D」⇒「PgDn」
「Fn」+「B」⇒「Pause」
「Fn」+「P」⇒「PrintScreen」
「Fn」+「S」⇒「ScrollLock」
「Fn」+「O」⇒「Ins」
compatの設定
『~/.xkb/compat/mycompat』を作成し、以下のように記述。
xkb_compatibility “caps_lock” {
interpret Caps_Lock { action = SetMods(modifiers=Mod5); };
};
keycodesの設定
『~/.xkb/keycodes/mykeycodes』を作成し、以下のように記述。
xkb_keycodes “mycodes” {
<NFER> = 102; // Muhenkan
<XFER> = 100; // Henkan
};
typesの設定
『~/.xkb/types/mytypes』を作成し、以下のように記述。
xkb_types “caps_lock” {
type “CAPS_LOCK” {
modifiers = Shift+Control+Mod5;
map[Shift] = Level2;
map[Mod5] = Level3;
map[Mod5+Control] = Level3;
map[Mod5+Shift] = Level3;
map[Mod5+Shift+Control] = Level3;
preserve[Mod5+Control] = Control;
preserve[Mod5+Shift] = Shift;
preserve[Mod5+Shift+Control] = Shift+Control;
level_name[Level1] = “Base”;
level_name[Level2] = “Shift”;
level_name[Level3] = “Caps_Lock”;
};
};
symbolsの設定
『~/.xkb/symbols/myswap』を作成し、以下のように記述。
partial modifier_keys
xkb_symbols “swapkeys” {
replace key { [ Caps_Lock ] };
replace key { [ Caps_Lock ] };
};
『~/.xkb/symbols/mysymbols』を作成し、以下のように記述。
xkb_symbols “caps_lockkeys” {
key.type = “CAPS_LOCK”;
key { [ s, S, Scroll_Lock ] };
key { [ d, D, Next ] };
key { [ h, H, Home ] };
key { [ j, J, Left ] };
key { [ k, K, Down ] };
key { [ l, L, Right ] };
key { [ e, E, End ] };
key { [ u, U, Prior ] };
key { [ i, I, Up ] };
key { [ o, O, Insert ] };
key { [ p, P, Print ] };
key { [ 1, exclam, F1 ] };
key { [ 2, quotedbl, F2 ] };
key { [ 3, numbersign, F3 ] };
key { [ 4, dollar, F4 ] };
key { [ 5, percent,F5 ] };
key { [ 6, ampersand, F6 ] };
key { [ 7, apostrophe, F7 ] };
key { [ 8, parenleft, F8 ] };
key { [ 9, parenright,F9 ] };
key { [ 0, 0, F10 ] };
key { [ minus, equal, F11 ] };
key { [ asciicircum, asciitilde, F12 ] };
key { [ BackSpace, BackSpace, Delete ] };
key { [ Escape, Escape, Zenkaku_Hankaku ] };
};
keymapの設定
『~/.xkb/keymap/mykbd』を作成し、以下のように記述。
xkb_keymap {
xkb_keycodes { include “evdev+aliases(qwerty)+mykeycodes(mycodes)” };
xkb_types { include “complete+mytypes(caps_lock)” };
xkb_compat { include “complete+japan+mycompat(caps_lock)” };
xkb_symbols { include “pc+jp+inet(evdev)+myswap(swapkeys)+mysymbols(caps_lockkeys)” };
xkb_geometry { include “pc(pc105)” };
};
【参考】現状のkeymapを『setxkbmap -print』で確認し、それぞれに先に作成した設定をincludeした。
設定の反映
ターミナルより以下にて設定を反映。
xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
入力メソッド切替時のリセットを回避
設定を反映後、入力メソッドを切り替えるとリセットされてしまうことから、『dconf-editor』より『/org/gnome/settings-daemon/plugins/keyboard/active』の値を『0』とする。
設定の自動起動
ログイン時に設定が自動起動するように設定。
- 『~/bin/load_xkbmap.sh』を作成し以下を記述。
#!/bin/sh
if [ -s $HOME/.xkb/keymap/mykbd ]
then
sleep 1
xkbcomp -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY 2>/dev/null
fi
- スクリプトに実行権限を付ける:$ sudo chmod +x ~/bin/load_xkbmap.sh
- 自動起動を設定:$ gnome-session-properties [適当に名前をつけて、コマンド『/home/…/bin/load_xkbmap.sh』とする]
最後に
しばらくして、”Fn(変換/無変換)”+”P”に割り当てた”PrintScreen”が機能していないことに気づいた。他の割り当ては全て問題ないようなのでこのまま使ってみて、「P」への割り当てについては今後調べてみようと思う。
スポンサーリンク