Xorg/キーボード設定
この記事ではレイアウトの修正や追加キーのマッピングなどを除く基本的な設定についてのみ説明しています。省かれている高度な話題については X KeyBoard extension あるいは特別なキーボードキーを参照してください。
概要
Xorg は X KeyBoard extension (XKB) を使ってキーボードレイアウトを管理しています。また、xmodmap を使って内部のキーマップテーブルに直接アクセスすることができます。一般的に、単純な作業以外での xmodmap の使用は推奨されていません。また、systemd の localectl を使うことで Xorg サーバーと仮想端末の両方のキーボードレイアウトを定義することもできます。
この記事ではほとんどの環境で効果がある XKB を使った低いレベルでの設定を説明していますが、GNOME などのデスクトップ環境によって設定が上書きされることもあります。デスクトップ環境ごとの情報も読んで下さい:
キーボード設定の表示
次のコマンドを使うことで XKB の設定を表示することができます:
$ setxkbmap -print -verbose 10
Setting verbose level to 10
locale is C
Applied rules from evdev:
model: evdev
layout: jp
options: terminate:ctrl_alt_bksp
Trying to build keymap using the following components:
keycodes: evdev+aliases(qwerty)
types: complete
compat: complete+japan
symbols: pc+jp+inet(evdev)+terminate(ctrl_alt_bksp)
geometry: pc(pc104)
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+jp+inet(evdev)+terminate(ctrl_alt_bksp)" };
xkb_geometry { include "pc(pc104)" };
};
サードパーティのユーティリティ
現在使用しているキーボードレイアウトの情報を表示するための"非公式の"ユーティリティも存在します。
- xkb-switch-gitAUR:
$ xkb-switch
us
- xkblayout-stateAUR:
$ xkblayout-state print "%s"
de
キーボードレイアウトの設定
Xorg のキーボードレイアウトは複数の方法で設定することが可能です。以下は使用されるオプションの説明です:
XkbModelはキーボードのモデルを選択します。あなたのキーボードにある追加キーにのみ影響を与えます。pc104とpc105は安全なフォールバックです。ラップトップには追加キーが複数存在することがあり、適切なモデルを設定することでそれらのキーを利用することができます。XkbLayoutはキーボードのレイアウトを選択します。レイアウトを素早く切り替えたい場合、カンマで区切ることで複数のレイアウトを指定することが可能です。XkbVariantは特定のレイアウトのバリアントを選択します。例えば、skのデフォルトのバリアントはqwertzですが、手動でqwertyなどを指定することができます。
XkbOptionsには追加のオプションを含めます。レイアウトの切り替えや、通知 LED、コンポーズモードなどを指定するために使われます。
レイアウトの名前は基本的に 2-letter country code です。キーボードのモデル・レイアウト・バリアント・オプション、そしてその説明を見たいときは /usr/share/X11/xkb/rules/base.lst を開いて下さい。また、以下のコマンドを使うことで一覧を表示することができます:
localectl list-x11-keymap-modelslocalectl list-x11-keymap-layoutslocalectl list-x11-keymap-variants [layout]localectl list-x11-keymap-options
以下のサブセクションに含まれているサンプルはどれも同じ設定です。pc104 モデルで、第一レイアウトに jp 第二レイアウトに us を、us レイアウトに dvorak バリアント、そしてレイアウトの切り替えに Alt+Shift を使うよう設定します。詳しい情報は man xkeyboard-config を見てください。
setxkbmap を使う
setxkbmap ツールは実行中の X サーバーのキーボードレイアウトを設定し、セッションが終了するまで設定は持続します。また xinitrc を使うことで設定を再起動後も永続させることができます。X の設定ファイルによって指定されたシステム全体の設定を上書きしたいときに有用です。
使用方法は次の通りです:
$ setxkbmap [-model xkb_model] [-layout xkb_layout] [-variant xkb_variant] [-option xkb_options]
全てのオプションを指定する必要はありません。例えば、レイアウトだけを変えることができます:
$ setxkbmap -layout xkb_layout
コマンドラインの引数の全ての一覧は man 1 setxkbmap を見て下さい。
例:
$ setxkbmap -model pc104 -layout jp,us -variant ,dvorak -option grp:alt_shift_toggle
X の設定ファイルを使う
X の設定ファイルの構文は Xorg#設定 で説明しています。この方法はシステム全体で適用される設定を作成して再起動後も設定が持続します。
以下サンプル:
/etc/X11/xorg.conf.d/00-keyboard.conf
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "jp,us"
Option "XkbModel" "pc104"
Option "XkbVariant" ",dvorak"
Option "XkbOptions" "grp:alt_shift_toggle"
EndSection
localectl を使う
X の設定ファイルを手動で編集する代わりに、localectl ツールを使うことができます。このツールは設定を /etc/X11/xorg.conf.d/00-keyboard.conf に保存します。起動時に localectl は変更を上書きするので、手動でこのファイルを編集してはいけません。
使用法は次の通りです:
$ localectl [--no-convert] set-x11-keymap layout [model [variant [options]]]
次のコマンドは上のサンプルと全く同じ内容で /etc/X11/xorg.conf.d/00-keyboard.conf ファイルを作成します:
$ localectl set-x11-keymap jp,us pc104 ,dvorak grp:alt_shift_toggle
よく使われる XKB オプション
キーボードレイアウトの切り替え
キーボードレイアウトの簡単な切り替えを有効にするには、まず切り替えるために複数のレイアウトを指定してください (最初のレイアウトがデフォルトになります)。次に、切り替えに使用するキー (もしくはキーの組み合わせ) を指定します。例えば、CapsLock キーで US と Swedish レイアウトを切り替えたい場合、XkbLayout の引数に us,se を XkbOptions の引数に grp:caps_toggle を指定してください。
CapsLock 以外のキーコンビネーションを使うこともできます。/usr/share/X11/xkb/rules/base.lst 内の grp: で始まって toggle で終わっているのがそうです。利用できるオプションの完全な一覧を表示するには、次のコマンドを実行してください:
$ grep "grp:.*toggle" /usr/share/X11/xkb/rules/base.lst
Ctrl+Alt+Backspace で Xorg を終了する
デフォルトで、キーの組み合わせ Ctrl+Alt+Backspace は無効になっています。XkbOptions に terminate:ctrl_alt_bksp を指定することで有効にできます。また、xmodmap でキーを Terminate_Server にバインドすることでも設定できます (既存の XkbOptions 設定は元に戻ります)。
どちらにしても ServerFlags の DontZap 設定を "off" にする必要がありますが、バージョン R6.8.0 (2004年) からデフォルト設定となっています [1]。
Caps Lock と左 Control を交換する
Caps Lock と左 Control キーを交換するには、XkbOptions に ctrl:swapcaps を追加してください。次のコマンドを実行することで似たようなオプションとその説明を表示できます:
$ grep -E "(ctrl|caps):" /usr/share/X11/xkb/rules/base.lst
マウスキーを有効にする
現在マウスキーはデフォルトで無効にされているので keypad:pointerkeys を XkbOptions に加えて手動で有効にする必要があります。Shift+NumLock ショートカットによってマウスキーの切り替えが行えます。
コンポーズキーの設定
コンポーズキーを押して他のキーを押すと、ユニコード文字が打ち込まれます。例えば、多くの設定では compose_key ' e を押すことで é が作られます。キーボードレイアウトとは異なる言語を入力する必要があるときに有用です (英語キーボードでフランス語・イタリア語・ドイツ語を入力する場合など)。
例えば、右の Alt キーをコンポーズキーにしたいのなら、XkbOptions に compose:ralt を指定してください。
他のキーをコンポーズキーにすることもできます。/usr/share/X11/xkb/rules/base.lst 内の compose: で始まっているのがそうです。利用できるオプションの完全な一覧を表示するには、次のコマンドを実行してください:
$ grep "compose:" /usr/share/X11/xkb/rules/base.lst
キーの組み合わせ
コンポーズキーのデフォルトのコンビネーションは /usr/share/X11/locale/used_locale/Compose に保存されているロケールによります。used_locale は例えば en_US.UTF-8 になります。
デフォルトのファイルを ~/.XCompose にコピーして編集することでコンポーズキーの組み合わせを定義することが可能です。コンポーズキーは数千のユニコード文字全てで動作し、基本多言語面にない文字も含みます。
ただし、GTK はデフォルトで XIM を使わないので ~/.XCompose に設定したキーが使えません。この問題は ~/.xprofile に export GTK_IM_MODULE=xim や export XMODIFIERS="@im=none" を追加して GTK に XIM を使わせることで修正できます。
通貨記号
ほとんどのヨーロッパ言語キーボードでは 5 キーの上にユーロ記号 (€) が印字されています。ALT+5 などでユーロを打てるようにするには、lv3:lalt_switch や eurosign:5 オプションを使って下さい。
ルピー記号 (₹) は同じように rupeesign:4 で使うことができます。
他の設定
Caps Lock が押されたときにすぐに状態を切り替える
大文字を打つときに Caps Lock キーを多用している場合、Caps Lock によって状態を変えるときに遅延が発生し、思うように大文字にならないことがあります (例: THe, ARch LInux)。こうなっているのはタイプライター時代からの継承です。
オペレーティングシステムによっては遅延が存在しません。意図的にそうしている場合もあれば間違ってそうなっていることもあります。どちらにせよ好みの問題です。X サーバーのバグトラッカーにはこの件についてバグレポートが存在しますが、現時点では簡単な解決方法はありません。詳しくは [2] や [3] を見てください。
解決方法
まず、キーボードの設定をファイルにエクスポートしてください:
$ xkbcomp -xkb $DISPLAY xkbmap
xkbmap ファイルの中から key <CAPS> から始まる Caps Lock のセクションを探してください:
key <CAPS> { [ Caps_Lock ] };
以下のコードでセクション全体を置き換えてください:
key <CAPS> {
repeat=no,
type[group1]="ALPHABETIC",
symbols[group1]=[ Caps_Lock, Caps_Lock],
actions[group1]=[ LockMods(modifiers=Lock), Private(type=3,data[0]=1,data[1]=3,data[2]=3)]
};
キーボード設定を保存してリロード:
$ xkbcomp -w 0 xkbmap $DISPLAY
リロードした設定は再起動すると消えてしまうため、X の起動時に上記のコマンドを自動的に実行させるようにしても良いでしょう。
typematic delay と rate の調整
typematic delay はキーリピートを始めるのにキーを押し続ける必要がある時間 (ミリ秒) を表します。キーリピートが開始されると、typematic rate によって指定された頻度 (Hz) で文字が繰り返されます。これらの値は xset コマンドを使うことで変更できます:
$ xset r rate delay [rate]
例えば typematic delay を 200ms に typematic rate を 30Hz に設定するには、次のコマンドを実行します (xinitrc を使えば設定を永続化できます):
$ xset r rate 200 30
delay や rate の値を指定しないでコマンドを実行することで typematic の値をデフォルト (delay は 660ms で rate は 25Hz) に戻すことができます:
$ xset r rate
参照
- Madduck guide on extending XKB