変換・無変換キーのFnキー化について(Ubuntu)

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」への割り当てについては今後調べてみようと思う。

 
 
スポンサーリンク