問題点
MacBookにインストールされたUbuntu(Linux Mint)において、JIS配列のキーボードをUS配列として使用したいが、デフォルトで用意されているレイアウトではUSキーボードにある`キーがない為、`を入力できない。
解決策
Jansiと同様に¥キーを押した際に`が入力されるように変更する。
xkbcomp
今回はxkbcompというコマンドを使って設定ファイルを読みこませる。この設定ファイルの場所はどこでもいいのだが、$HOME/.xkb/keymap
に置くことにする。その設定ファイルの形式は以下のようになっている。
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us(mac)+us"
replace key <AE13> { [ grave, asciitilde ] };
};
xkb_geometry { include "macintosh(applealu_jis)" };
};
xkbcompコマンドを使用する際、物理キーボードのマッピング等の設定ファイルが格納されたフォルダを指定する。Ubuntu/Linux Mintの場合/usr/share/X11/xkb
にある。その配下にはcompat
, symbols
, geometry
などのフォルダがあり、上記設定ファイルのxkb_compat
, xkb_symbols
, xkb_geometry
はその対応するフォルダを読み込む。
例えば、上記のxkb_geometry
の場合はxkb/geometry/macintosh
のファイル内にあるxkb_geometry appleau_jis
の設定をインクルードしている。
geometory
xkb/geometory
の配下には物理キーボードとシンボルのマッピングを定義する設定ファイルが入っている。
xkb/geometory/macintosh
は以下のようになっている。このrow>keys
の設定はキーボードの1行と対応しており、この例の場合それぞれTab,q,w,e,r...のキーがAE01
,AE02
,AE03
,AE04
のシンボルに対応している。このシンボルを使って次のキーのマッピングを変更する。
xkb_geometry "applealu_jis" {
...
row {
top= 0;
left= 0;
keys {
{ <AE01>, "KEY1", 0 },
{ <AE02>, "NORM", 3.5 }, { <AE03>, "NORM", 3.5 },
{ <AE04>, "NORM", 3.5 }, { <AE05>, "NORM", 3.5 },
{ <AE06>, "NORM", 3.5 }, { <AE07>, "NORM", 3.5 },
{ <AE08>, "NORM", 3.5 }, { <AE09>, "NORM", 3.5 },
{ <AE10>, "NORM", 3.5 }, { <AE11>, "NORM", 3.5 },
{ <AE12>, "NORM", 3.5 }, { <AE13>, "NORM", 3.5 },
{ <BKSP>, "BKSP", 3.5 }
};
};
}
キーボードの設定ファイル(keymap)にはxkb_geometry { include "[ファイルパス]([xkb_geometry名])" };
を書く。今回の場合、MacのJIS配列のキーボードの定義を使うのでxkb_geometry { include "macintosh(applealu_jis)" };
となる。
symbols
xkb/symbols
の配下にはシンボルと実際の入力をマッピングを定義する設定ファイルが入っている。
xkb/symbols/us
xkb_symbols "basic" {
name[Group1]= "English (US)";
key <TLDE> { [ grave, asciitilde ] };
key <AE01> { [ 1, exclam ] };
key <AE02> { [ 2, at ] };
key <AE03> { [ 3, numbersign ] };
}
key <AE01>
はgeometoryで定義されたシンボル、{[grave, asciitilde ]};
はシンボルに対応するキーが押された際の実際の入力を定義する。上記の例ではgrave
はそのままキーを押した場合の入力、asciitilde
はシフトキーを押しながらそのキーを押した場合の入力の定義となる。
MacBook上のJIS配列のキーボードをUS配列として使う場合、1
キーの横にあるはずの****(TLDE)キーが存在しない為、代わりに使用されない
¥キー(AE13)を**
**を入力する為に使用する。既に定義されているキーを置き換えるので、設定は以下のようになる。
replace key <AE13> { [ grave, asciitilde ] };
キーマップ変更の手順
1. keymapファイルを作る
$HOME/.xkb/keymap
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us(mac)+us"
replace key <AE13> { [ grave, asciitilde ] };
};
xkb_geometry { include "macintosh(applealu_jis)" };
};
2. xkbcompでキーボードの設定を変更
xkbcomp -I/usr/share/X11/xkb ~/.xkb/keymap $DISPLAY> /dev/null
3. .zshrc(.bashrc)に追加
動作することを確認できたら、Ubuntu/Linux Mint起動時にその設定が反映されるように変更する。
echo 'xkbcomp -I/usr/share/X11/xkb ~/.xkb/keymap $DISPLAY> /dev/null' >> $HOME/.zshrc;