XKBで自前のレイアウトをちゃんと選択出来るようにする
以下の方法がPop! OS 22.04で有効なことを確認済み
ホーム以下に.xkb/symbolなどを作ってxkbcompやsetxkbmapで読み込む方法で自前のレイアウトにカスタムしていたが、
スリープ復帰時にリセットされる(対処しているものの、稀に発生)
特に何したか見に覚えがないタイミングでリセットされる(わかんないけど、稀に発生)
外付けキーボードを抜き差ししたタイミングでリセットされる(毎回、確実に発生)
が起きる。上2つは稀だったため目を瞑って開発に勤しんできたが、Ergodoxを購入して使うようになったため、Ergodoxを抜き差ししたり、Ergodoxのリセットを行うたびにPop! OS側のレイアウトがリセットされてしまうため、さすがに耐えられなかった。
そこで、重い腰を上げ、こちらの記事を参考に、キーボード設定で自前のレイアウトを表示させ、選択できるようにした。
まず、/usr/share/X11/xkb/symbols/jpの// EXTRAS:の前に、以下を追加。
code:/usr/share/X11/xkb/symbols/jp
partial alphanumeric_keys modifier_keys
xkb_symbols "pdk" {
namegroup1 = "Japanese (Pinkyless Dvorak)";
key <ESC> { Escape };
key <AE01> { 1, exclam };
key <AE02> {
symbolsGroup1= 2, at ,
symbolsGroup2= 2, at
};
key <AE03> { 3, numbersign };
key <AE04> { 4, dollar };
key <AE05> { 5, percent };
key <AE06> {
symbolsGroup1= 6, asciicircum ,
symbolsGroup2= 6, asciicircum
};
key <AE07> {
symbolsGroup1= 7, ampersand ,
symbolsGroup2= 7, ampersand
};
key <AE08> {
symbolsGroup1= 8, asterisk ,
symbolsGroup2= 8, asterisk
};
key <AE09> {
symbolsGroup1= 9, parenleft ,
symbolsGroup2= 9, parenleft
};
key <AE10> {
symbolsGroup1= 0, parenright ,
symbolsGroup2= 0, parenright
};
key <AE11> {
symbolsGroup1= bracketleft, braceleft ,
symbolsGroup2= bracketleft, braceleft
};
key <AE12> {
symbolsGroup1= bracketright, braceright ,
symbolsGroup2= bracketright, braceright
};
key <BKSP> { BackSpace, BackSpace };
key <TAB> { Tab, ISO_Left_Tab };
key <AD01> {
type= "ALPHABETIC",
symbolsGroup1= apostrophe, quotedbl
};
key <AD02> {
type= "ALPHABETIC",
symbolsGroup1= comma, less
};
key <AD03> {
type= "ALPHABETIC",
symbolsGroup1= o, O
};
key <AD04> {
type= "ALPHABETIC",
symbolsGroup1= u, U
};
key <AD05> {
type= "ALPHABETIC",
symbolsGroup1= y, Y
};
key <AD06> {
type= "ALPHABETIC",
symbolsGroup1= f, F
};
key <AD07> {
type= "ALPHABETIC",
symbolsGroup1= g, G
};
key <AD08> {
type= "ALPHABETIC",
symbolsGroup1= c, C
};
key <AD09> {
type= "ALPHABETIC",
symbolsGroup1= r, R
};
key <AD10> {
type= "ALPHABETIC",
symbolsGroup1= l, L
};
key <AD11> {
symbolsGroup1= slash, question ,
symbolsGroup2= slash, question
};
key <AD12> {
symbolsGroup1= equal, plus ,
symbolsGroup2= equal, plus
};
key <RTRN> { Return };
key <LCTL> { Caps_Lock };
key <AC01> {
type= "ALPHABETIC",
symbolsGroup1= p, P
};
key <AC02> {
type= "ALPHABETIC",
symbolsGroup1= i, I
};
key <AC03> {
type= "ALPHABETIC",
symbolsGroup1= e, E
};
key <AC04> {
type= "ALPHABETIC",
symbolsGroup1= a, A
};
key <AC05> {
type= "ALPHABETIC",
symbolsGroup1= period, greater
};
key <AC06> {
type= "ALPHABETIC",
symbolsGroup1= d, D
};
key <AC07> {
type= "ALPHABETIC",
symbolsGroup1= s, S
};
key <AC08> {
type= "ALPHABETIC",
symbolsGroup1= t, T
};
key <AC09> {
type= "ALPHABETIC",
symbolsGroup1= h, H
};
key <AC10> {
symbolsGroup1= z, Z ,
symbolsGroup2= z, Z
};
key <AC11> {
symbolsGroup1= minus, underscore ,
symbolsGroup2= minus, underscore
};
key <TLDE> {
symbolsGroup1= grave, asciitilde ,
symbolsGroup2= grave, asciitilde
};
key <LFSH> { Shift_L };
key <BKSL> { Super_R, Super_R };
key <AB01> {
type= "ALPHABETIC",
symbolsGroup1= j, J
};
key <AB02> {
type= "ALPHABETIC",
symbolsGroup1= q, Q
};
key <AB03> {
type= "ALPHABETIC",
symbolsGroup1= semicolon, colon
};
key <AB04> {
type= "ALPHABETIC",
symbolsGroup1= k, K
};
key <AB05> {
type= "ALPHABETIC",
symbolsGroup1= x, X
};
key <AB06> {
type= "ALPHABETIC",
symbolsGroup1= b, B
};
key <AB07> {
type= "ALPHABETIC",
symbolsGroup1= m, M
};
key <AB08> { w, W };
key <AB09> { n, N };
key <AB10> { v, V };
key <RTSH> { Shift_R };
key <LALT> { Alt_L, Meta_L };
key <SPCE> { Return };
key <CAPS> { Control_L, Control_L };
key <AB11> { Shift_R, Shift_R };
key <KATA> { Katakana };
key <HIRA> { Hiragana };
key <HENK> { space };
key <MUHE> { BackSpace };
key <KPEN> { KP_Enter };
key <RCTL> { Control_R };
key <LNFD> { Linefeed };
key <AE13> { backslash, bar };
key <LWIN> { Super_L };
key <RWIN> { Super_R };
key <I187> { parenleft };
key <I188> { parenright };
modifier_map Lock { <LCTL> };
modifier_map Shift { <LFSH> };
modifier_map Shift { <RTSH> };
modifier_map Shift { <AB11> };
modifier_map Mod1 { <LALT> };
modifier_map Control { <CAPS> };
modifier_map Mod2 { <NMLK> };
modifier_map Mod5 { <LVL3> };
modifier_map Control { <RCTL> };
modifier_map Mod1 { <RALT> };
modifier_map Mod4 { <LWIN> };
modifier_map Mod4 { <RWIN> };
modifier_map Mod5 { <MDSW> };
modifier_map Mod1 { <META> };
modifier_map Mod4 { <SUPR> };
modifier_map Mod4 { <BKSL> };
modifier_map Mod4 { <HYPR> };
};
次に、/usr/share/X11/xkb/rulesのbase.lst(559行目付近)とevdev.lst(559行目付近)に以下を追加。
code:/usr/share/X11/xkb/rules/base.lst
dvorak jp: Japanese (Dvorak)
pdk jp: Japanese (Pinkyless Dvorak) <--新たに追加
phonetic kg: Kyrgyz (phonetic)
そんでもって、/usr/share/X11/xkb/rulesのbase.xmlとevdev.xmlのに以下を追加。
code:/usr/share/Xll/xkb/rules/base.xml
<layoutList>
<layout>
<configItem>
<name>us</name>
... (省略)
</configItem>
<variantList>
...... (省略)
<variant>
<configItem>
<name>dvp</name>
<description>English (programmer Dvorak)</description>
</configItem>
</variant>
<variant> <!-- こっから新たに追加 -->
<configItem>
<name>pdk</name>
<description>English (Pinkyless Dvorak)</description>
</configItem>
</variant>
...... (省略)
</layout>
<layout>
<configItem>
<name>jp</name>
... (省略)
</configItem>
<variantList>
...... (省略)
<variant> <!-- こっから新たに追加 -->
<configItem>
<name>dvorak</name>
<description>Japanese (Dvorak)</description>
</configItem>
</variant>
<variant>
<configItem>
<name>pdk</name>
<description>Japanese (Pinkyless Dvorak)</description>
</configItem>
</variant>
</variantList>
</layout>
...... (省略)
で、再起動する。その後、Keyboard設定を開いて入力ソースを追加すると、リストに
https://gyazo.com/ce3fff373bbc74a2c06f50ab8f9e1dce
こんな感じで現れる。ただし、このままだと「変換」、「無変換」キーがinet(evdev)の設定で書き換わってしまうので/usr/share/X11/xkb/symbols/inetを
code:/usr/share/X11/xkb/symbols/inet
// Commented out because HZTG has same keycode as TLDE
// key <HZTG> { Zenkaku_Hankaku };
key <HKTG> { Hiragana_Katakana };
// key <HENK> { Henkan }; <-- ここコメントアウト
// key <MUHE> { Muhenkan }; <-- ここコメントアウト
key <KATA> { Katakana };
key <HIRA> { Hiragana };
key <RO> { Romaji };
とする。
#Pop!_OS #Keyboard