「Xorg/キーボード設定」の版間の差分
(冒頭を同期) |
(→キーボードレイアウトの設定: 同期) |
||
| 61行目: | 61行目: | ||
Xorg のキーボードレイアウトは複数の方法で設定することが可能です。以下は使用されるオプションの説明です: |
Xorg のキーボードレイアウトは複数の方法で設定することが可能です。以下は使用されるオプションの説明です: |
||
| − | * {{ic|XkbModel}} はキーボードのモデルを選択します。 |
+ | * {{ic|XkbModel}} はキーボードのモデルを選択します。キーボード上の一部の追加キーにのみ影響を与えます。{{ic|pc104}} と {{ic|pc105}} は安全なフォールバックです。しかし、例えばラップトップには通常いくつかの追加キーが存在し、適切なモデルを設定することでそれらのキーを利用することができます。 |
| − | * {{ic|XkbLayout}} はキーボードのレイアウトを選択します。レイアウトを素早く切り替えたい場合、カンマで区切ることで複数のレイアウトを指定することが可能です。 |
+ | * {{ic|XkbLayout}} はキーボードのレイアウトを選択します。レイアウトを素早く切り替えたい場合などは、カンマで区切ることで複数のレイアウトを指定することが可能です。 |
| − | * {{ic|XkbVariant}} は特定のレイアウトのバリアントを選択します。例えば、{{ic|sk}} のデフォルトのバリアントは {{ic|qwertz}} ですが、手動で {{ic|qwerty}} などを指定することができます。 |
+ | * {{ic|XkbVariant}} は {{ic|XkbLayout}} で利用可能な特定のレイアウトのバリアントを選択します。例えば、{{ic|sk}} (Slovak) のデフォルトのバリアントは {{ic|qwertz}} ですが、手動で {{ic|qwerty}} などを指定することができます。 |
| − | * {{ic|XkbOptions}} には追加のオプションを含めます。レイアウトの切り替えや、通知 LED、コンポーズモードなどを指定するために使われます。 |
+ | * {{ic|XkbOptions}} には追加のオプションを含めます (コンマ区切り)。レイアウトの切り替えや、通知 LED、コンポーズモードなどを指定するために使われます。例は [[#よく使われる XKB オプション]] セクションを参照してください。 |
| − | : {{Note|指定したレイアウトと同じ数だけバリアントを指定してください。デフォルトのバリアントでいい場合は、空文字を指定してください (カンマはそのまま)。例えば、第一にデフォルトの {{ic|us}} レイアウト、第二に {{ic|us}} レイアウトの {{ic|dvorak}} バリアントを使いたい場合、{{ic|XkbLayout}} には {{ic|us,us}} を {{ic|XkbVariant}} には {{ic|,dvorak}} を指定してください。}} |
||
| + | {{Note|指定したレイアウトと同じ数だけバリアントを指定してください。デフォルトのバリアントでいい場合は、空文字を指定してください (カンマはそのまま)。例えば、第一にデフォルトの {{ic|us}} レイアウト、第二に {{ic|us}} レイアウトの {{ic|dvorak}} バリアントを使いたい場合、{{ic|XkbLayout}} には {{ic|us,us}} を {{ic|XkbVariant}} には {{ic|,dvorak}} を指定してください。}} |
||
| − | レイアウトの名前は基本的に [[Wikipedia:ISO_3166-1_alpha-2#Officially_assigned_code_elements|2-letter country code]] です。キーボードのモデル・レイアウト・バリアント・オプション、そしてその説明を見たいときは {{ic|/usr/share/X11/xkb/rules/base.lst}} を開いて下さい。また、以下のコマンドを使うことで一覧を表示することができます: |
||
| + | |||
| + | レイアウトの名前は基本的に[[Wikipedia:ISO_3166-1_alpha-2#Officially_assigned_code_elements|2文字の国名コード]]です。キーボードのモデル・レイアウト・バリアント・オプション、そしてその説明を見たいときは {{ic|/usr/share/X11/xkb/rules/base.lst}} を開いて下さい。また、以下のコマンドを使うことで説明なしの一覧を表示することができます: |
||
* {{ic|localectl list-x11-keymap-models}} |
* {{ic|localectl list-x11-keymap-models}} |
||
| 74行目: | 75行目: | ||
* {{ic|localectl list-x11-keymap-options}} |
* {{ic|localectl list-x11-keymap-options}} |
||
| − | 以下のサブセクションに |
+ | 以下のサブセクションにあるサンプルはどれも同じ効果があります。{{ic|pc104}} モデルで、第一レイアウトに {{ic|jp}} 第二レイアウトに {{ic|us}} を、{{ic|us}} レイアウトに {{ic|dvorak}} バリアント、そしてレイアウトの切り替えに {{ic|Win+Space}} を使うよう設定します。詳しい情報は {{man|7|xkeyboard-config}} を見てください。 |
| + | |||
| + | {{Note|[[Fcitx]]/[[IBus]] はキーボードレイアウトの制御を試みるため、これらのフレームワークを使用しているユーザは、以下の方法でうまく行かなかったり、少しの間しか効果がなかったりします。Fcitx のユーザは、1番目の入力メソッドを {{ic|Keyboard - ''layout''}} に設定する必要があります。[[Fcitx#入力メソッドの設定]] を参照してください。IBus のユーザは、X の設定ファイルを使用している場合は Preference -> Advanced で "Use system keyboard layout" オプションを有効化する必要があり、setxkbmap を使用している場合は手動でレイアウトを指定する必要があります。}} |
||
=== setxkbmap を使う === |
=== setxkbmap を使う === |
||
| − | ''setxkbmap'' |
+ | ''setxkbmap'' は、現在の X セッション限定でキーボードレイアウトを設定します。しかし、[[xinitrc]] や [[xprofile]] を使うことで設定を永続化させることができます。これは、次の [[#X の設定ファイルを使う]] で指定したシステム全体の設定をオーバーライドします。しかし、外部キーボードなどの場合は、''setxkbmap'' が実行された時にキーボードのデバイス ID が指定されなかった場合、設定は永続化されません。また、キーボードが X サーバのコアキーボードデバイスである場合もです。 |
| − | 使用方法は次の通りです: |
+ | 使用方法は次の通りです ({{man|1|setxkbmap}} を参照): |
$ setxkbmap [-model ''xkb_model''] [-layout ''xkb_layout''] [-variant ''xkb_variant''] [-option ''xkb_options''] |
$ setxkbmap [-model ''xkb_model''] [-layout ''xkb_layout''] [-variant ''xkb_variant''] [-option ''xkb_options''] |
||
| + | {{Note|''setxkbmap'' は、コマンドラインで指定したオプションを、以前設定したオプション (ルートウィンドウのプロパティに保存されています) に追加します。以前指定したオプションを全て置き換えたい場合は、最初に {{ic|-option}} フラグに空の引数を渡してください。}} |
||
| − | 全てのオプションを指定する必要はありません。例えば、レイアウトだけを変えることができます: |
||
| + | レイアウトだけを変更するには ({{ic|-layout}} はデフォルトのフラグです): |
||
| − | $ setxkbmap -layout ''xkb_layout'' |
||
| + | $ setxkbmap ''xkb_layout'' |
||
| − | コマンドラインの引数の全ての一覧は {{man|1|setxkbmap}} を見て下さい。 |
||
| + | 複数のカスタマイズを施すには: |
||
| − | 例: |
||
| − | $ setxkbmap -model pc104 -layout jp,us -variant ,dvorak -option grp: |
+ | $ setxkbmap -model pc104 -layout jp,us -variant ,dvorak -option grp:win_space_toggle |
=== X の設定ファイルを使う === |
=== X の設定ファイルを使う === |
||
| + | |||
| + | {{Note|{{ic|xorg.conf}} は X サーバによってスタートアップ時にパースされます。変更を適用するには、X を再起動してください。}} |
||
X の設定ファイルの構文は [[Xorg#設定]] で説明しています。この方法はシステム全体で適用される設定を作成して再起動後も設定が持続します。 |
X の設定ファイルの構文は [[Xorg#設定]] で説明しています。この方法はシステム全体で適用される設定を作成して再起動後も設定が持続します。 |
||
| 107行目: | 112行目: | ||
Option "XkbModel" "pc104" |
Option "XkbModel" "pc104" |
||
Option "XkbVariant" ",dvorak" |
Option "XkbVariant" ",dvorak" |
||
| − | Option "XkbOptions" "grp: |
+ | Option "XkbOptions" "grp:win_space_toggle" |
EndSection |
EndSection |
||
}} |
}} |
||
| 123行目: | 128行目: | ||
次のコマンドは上のサンプルと全く同じ内容で {{ic|/etc/X11/xorg.conf.d/00-keyboard.conf}} ファイルを作成します: |
次のコマンドは上のサンプルと全く同じ内容で {{ic|/etc/X11/xorg.conf.d/00-keyboard.conf}} ファイルを作成します: |
||
| − | # localectl set-x11-keymap jp,us pc104 ,dvorak grp: |
+ | # localectl --no-convert set-x11-keymap jp,us pc104 ,dvorak grp:win_space_toggle |
| + | |||
| + | {{Tip|''localectl'' は、変数 {{ic|XKBLAYOUT}}、{{ic|XKBMODEL}}、{{ic|XKBVARIANT}}、そして {{ic|XKBOPTIONS}} を使用してキーボードの設定を {{ic|/etc/vconsole.conf}} にも書き込みますが[https://github.com/systemd/systemd/blob/v253/src/locale/localed-util.c#L308-L311]、Xorg サーバはそのファイルから設定を読み込みません。}} |
||
== よく使われる XKB オプション == |
== よく使われる XKB オプション == |
||
2023年7月29日 (土) 18:45時点における版
この記事は Xorg のキーボード設定の基本を説明しています。キーボードレイアウトの変更や追加のキーマッピングなどの高度な話題については、それぞれ X keyboard extension と 特別なキーボードキー を参照してください。
Xorg サーバーはキーボードレイアウトを定義するために X keyboard extension (XKB) を使用します。オプションで xmodmap を使って内部のキーマップテーブルに直接アクセスすることもできますが、複雑な作業にはお勧めできません。また、systemd の localectl を使って Xorg サーバーと仮想コンソールの両方でキーボードレイアウトを定義することができます。
目次
キーボード設定の表示
次のコマンドを使うことで 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-state print "%s"
de
キーボードレイアウトの設定
Xorg のキーボードレイアウトは複数の方法で設定することが可能です。以下は使用されるオプションの説明です:
XkbModelはキーボードのモデルを選択します。キーボード上の一部の追加キーにのみ影響を与えます。pc104とpc105は安全なフォールバックです。しかし、例えばラップトップには通常いくつかの追加キーが存在し、適切なモデルを設定することでそれらのキーを利用することができます。XkbLayoutはキーボードのレイアウトを選択します。レイアウトを素早く切り替えたい場合などは、カンマで区切ることで複数のレイアウトを指定することが可能です。XkbVariantはXkbLayoutで利用可能な特定のレイアウトのバリアントを選択します。例えば、sk(Slovak) のデフォルトのバリアントはqwertzですが、手動でqwertyなどを指定することができます。XkbOptionsには追加のオプションを含めます (コンマ区切り)。レイアウトの切り替えや、通知 LED、コンポーズモードなどを指定するために使われます。例は #よく使われる XKB オプション セクションを参照してください。
レイアウトの名前は基本的に2文字の国名コードです。キーボードのモデル・レイアウト・バリアント・オプション、そしてその説明を見たいときは /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 バリアント、そしてレイアウトの切り替えに Win+Space を使うよう設定します。詳しい情報は xkeyboard-config(7) を見てください。
setxkbmap を使う
setxkbmap は、現在の X セッション限定でキーボードレイアウトを設定します。しかし、xinitrc や xprofile を使うことで設定を永続化させることができます。これは、次の #X の設定ファイルを使う で指定したシステム全体の設定をオーバーライドします。しかし、外部キーボードなどの場合は、setxkbmap が実行された時にキーボードのデバイス ID が指定されなかった場合、設定は永続化されません。また、キーボードが X サーバのコアキーボードデバイスである場合もです。
使用方法は次の通りです (setxkbmap(1) を参照):
$ setxkbmap [-model xkb_model] [-layout xkb_layout] [-variant xkb_variant] [-option xkb_options]
レイアウトだけを変更するには (-layout はデフォルトのフラグです):
$ setxkbmap xkb_layout
複数のカスタマイズを施すには:
$ setxkbmap -model pc104 -layout jp,us -variant ,dvorak -option grp:win_space_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:win_space_toggle"
EndSection
localectl を使う
X の設定ファイルを手動で編集する代わりに、localectl ツールを使うことができます。このツールは設定を /etc/X11/xorg.conf.d/00-keyboard.conf に保存します。起動時に localectl は変更を上書きするので、手動でこのファイルを編集してはいけません。
使用法は次の通りです:
# localectl [--no-convert] set-x11-keymap layout [model [variant [options]]]
model, variant または options を設定するには、 直前のすべてのフィールドを指定する必要がありますが、 "" で空文字列を渡すことで、 直前のフィールドをスキップすることができます。--no-convert オプションが渡されない限り、指定されたキーマップは最も近いコンソールのキーマップに変換され、 vconsole.conf のコンソール設定に適用されることもあります。詳しくは localectl(1) を参照してください。
次のコマンドは上のサンプルと全く同じ内容で /etc/X11/xorg.conf.d/00-keyboard.conf ファイルを作成します:
# localectl --no-convert set-x11-keymap jp,us pc104 ,dvorak grp:win_space_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
Switch languages using Alt Shift
To set Alt+Shift as a layout shortcut, use grp:alt_shift_toggle in XkbOptions.
However, there is a known issue with XKB that causes other shortcuts of the type Alt+Shift+any_key to break. Moreover, XKB may set the right Alt to be AltGr by default in some keyboard layouts, making RAlt+RShift not working for layout switching.
As a workaround, sxhkd may be used to switch layouts by adding the following to sxhkdrc:
Shift_L + Alt_L
setxkbmap -query | grep -q 'fr' && setxkbmap us || setxkbmap fr,us
Shift_R + Alt_R
setxkbmap -query | grep -q 'fr' && setxkbmap us || setxkbmap fr,us
Note that for some reason, Alt must be pressed before Shift to be detected by sxhkd.
Ctrl+Alt+Backspace で Xorg を終了する
デフォルトで、キーの組み合わせ Ctrl+Alt+Backspace は無効になっています。XkbOptions に terminate:ctrl_alt_bksp を指定することで有効にできます。また、xmodmap でキーを Terminate_Server にバインドすることでも設定できます (既存の XkbOptions 設定は元に戻ります)。
どちらにしても ServerFlags の DontZap 設定を "off" にする必要がありますが、バージョン R6.8.0 (2004年) からデフォルト設定となっています [2]。
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 サーバーのバグトラッカーにはこの件についてバグレポートが存在しますが、現時点では簡単な解決方法はありません。詳しくは [3] や [4] を見てください。
解決方法
まず、キーボードの設定をファイルにエクスポートしてください:
$ 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 の起動時に上記のコマンドを自動的に実行させるようにしても良いでしょう。
One-click key functions
To assign an additional one-click function to a modifier key, you can use xcape. For example it is possible to have CapsLock work as Escape when pressed alone, and as Control when used with another key. First set the Control swapping using setxkbmap as mentioned earlier, and xcape to set the Escape association:
$ xcape -e 'Caps_Lock=Escape'
You can set multiple associations separated with a semicolon, e.g.: Caps_Lock=Escape;Shift_L=Escape.
If you hold a key for longer than the timeout value (default 500 ms), xcape will not generate a key event.
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
Using AutoRepeat configuration option
To persist the configuration and change the seat defaults, you can create an Xorg configuration file as described in #Using X configuration files, and add a AutoRepeat section entry: [5]
/etc/X11/xorg.conf.d/00-keyboard.conf
Section "InputClass"
...
Option "AutoRepeat" "200 30"
...
EndSection
参照
- Madduck guide on extending XKB