結論からいうと、JIS配列はちょっとした手続きでHHKB風味にマップできる。
背景
あまり言及されないが、キーボード設定の自在さは Linuxデスクトップの強みのひとつだ。Linuxの表示系には(X / Waylandどちらであれ)XKBというキーボードユーティリティが組み込まれており、これで柔軟かつ包括的なキーボード設定ができる。一方、ほかのOS ── たとえばWindows ── では数多のツールが開発されてきたとはいえ、どれも非公式であって決定的とはいえなかった1。このため、Win(Super)キーが OS側の謎のショートカットどもに支配されていて上書きできない、というようなアホらしいことが起こる。Linuxではそういうことはない。端的に:キーの生殺与奪を握られずに済む。
このことは組み込みのキーボードとうまく付き合っていくほかないラップトップなんかでは特に有効で、今回の主題もここにある。つまり、気に入らない配列と出会ったらとにかく再マップしてやればよいのである。
要件
JIS配列のThinkpadを対象に、以下の要件を満たすよう設定した。
1. HHKB風キーマップ・キーバインド
US配列に準拠。
CapsLock
→Ctrl
- 私たちは
A
の隣の特等席をCapsLock
に渡してやれるほど寛大ではないので。
Alt
、Esc
、バッククォートの位置を変更
Alt
は最下列両端、Esc
は(JIS配列でいう)全角 / 半角
の位置、バッククォートは最上列右端。
- 「裏」キーバインド(
Fn
)
- HHKBにおいて修飾キー(
Fn
)押下時に利用できる(矢印キー等)のキーバインドのこと。これを通常のキーボードでエミュレートするには、JIS配列における無変換
やかな/カナ
のような余剰キーに修飾キーの機能を割り振る作業が必要。
- (以下ではThinkpadに搭載の
Fn
キーと区別するため、この修飾キーをMod
と呼称する)
- 最下段に
Mod
とSuper
- これは公式仕様によらない私のカスタム。HHKB の最下段にある左右のMetaキーをどう使うかに対応している。
2. US配列
私は US配列主義者ゆえ、JIS配列をUS配列として強引に利用する設定も行う(特にEnter
周辺)。
3. 非ラテン文字の入力
さらに、趣味の都合上ロシア語(キリル文字)やセルビア・クロアチア語(ラテン文字拡張、キリル文字拡張)も入力するため、US配列とこれらの言語の配列をスムーズに切り替える必要があった2。オタクってクソめんどくさいね!
解決策
最終的な変更の一覧
key | remap / role |
---|
CapsLock | Ctrl |
左右Ctrl | Alt |
Delete | バッククォート |
かな/カナ | Super |
無変換 | Mod |
半角/全角 | Esc |
Super + Space | 言語配列切り替え |
Mod + misc | 色々 |
ディレクトリ構成
設定ファイルとその説明
全体を包括する設定はkeymap/hhkb
にある。
今回影響するのはxkb_types
、xkb_compat
、xkb_symbols
の行。上のディレクトリ構造と照らし合わせるとなんとなく対応がわかると思うが、以降のファイルの内容をこれらの行で読み込んでいる。各ファイルの詳細に移る前に、xkb_symbols
の行で利用している、XKBに予め用意されたプリセットについて補足しておく。
項目 | 備考 |
---|
us+ru:2+hr:3 | 利用したい言語配列を略号で記載する。n 個目(n>=2)の言語は+<lang>:n のように記載するのがミソ3。 |
group(win_space_toggle) | 上で記載した配列間をsuper + space キーで切り替える。 |
ctrl(nocaps) | CapsLock →Ctrl 。 |
jp(hztg_escape) | 不要な半角/全角 キーをEsc にマップ。 |
ctrl(rctrl_ralt) , ctrl(swap_lalt_lctl) | 左右それぞれのAlt とCtrl を入れ替え |
おわかりかと思うが、実はこのプリセットの組み合わせだけで要件のうち後者二つ(US配列、多言語配列対応)と前者の一部は実現できている。したがって以降ではMod
キーの挙動を設定していく。
compat
まずcompat。 無変換
をMod5
(そういう修飾キー)に割り当てている。
types
次にtypes。ここではMUHENKAN
というtypeを定義して、Shift
や上で定めたMod5
を押した時にどのLevelの挙動をさせるかを指定する。
symbols
最後にsymbols。二つに分けているが特に意味はない。
下手な説明よりファイルを見たほうがよほどわかりやすい。Group1, 2, 3は先程指定した三つの言語(us
, ru
, hr
)に、[]
の中の並びは同じくtypesで定義した(あるいははじめから決まっている)各Levelにそれぞれ対応している。
設定の適用
以上のファイル群を~/.config/xkb/
とか~/.xkb/
とか適当な場所に配置して、各自の環境ごとに読み込めば終了。例えばswayなら:
おわりに
いかがでしたか? これが HHKB に脳を破壊された哀れなオタクの黒魔術である
書いたあとで気づいたが、みんな大好きArchWikiにもわりと詳細な記述があるので、そちらを参照したほうが良いかもしれない。
この設定ファイルがどのように編み出されたかに関する付記
この設定をひねり出すために、XKBのドキュメントを丁寧に紐解いた……などということはなく、xkbcomp $DISPLAY output.xkb
が吐いた設定ダンプとウンウン向き合う涙ぐましい努力があったことを、ここに申し添えておく。
参考サイト