# Keyboard Configuration in Xorg (日本語)

関連記事

- コンソールでのキーボード設定
- Extra Keyboard Keys
- Xorg
- X KeyBoard extension

Note: この記事ではレイアウトの修正や追加キーのマッピングなどを除く基本的な設定についてのみ説明しています。省かれている高度な話題については Extra Keyboard Keys を参照してください。

Xorg は X KeyBoard extension (XKB) を使ってキーボードレイアウトを管理しています。また、xmodmap を使って内部のキーマップテーブルに直接アクセスすることができます。一般的に、単純な作業以外での xmodmap の使用は推奨されていません。

この記事ではほとんどの環境で効果がある XKB を使った低いレベルでの設定を説明していますが、GNOME などのデスクトップ環境によって設定が上書きされることもあります。デスクトップ環境ごとの情報も読んで下さい:

- GNOME (日本語)#XkbOptions でキーボードを変更する
- KDE (日本語)#キーボードの設定

## キーボード設定の表示

次のコマンドを使うことで 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-git:

    $ xkb-switch

    us

- xkblayout-state:

    $ xkblayout-state print "%s"

    de

## キーボードレイアウトの設定

Xorg のキーボードレイアウトは複数の方法で設定することが可能です。以下は使用されるオプションの説明です:

- `XkbModel` はキーボードのモデルを選択します。あなたのキーボードにある追加キーにのみ影響を与えます。`pc104` と `pc105` は安全なフォールバックです。ラップトップには追加キーが複数存在することがあり、適切なモデルを設定することでそれらのキーを利用することができます。
- `XkbLayout` はキーボードのレイアウトを選択します。レイアウトを素早く切り替えたい場合、カンマで区切ることで複数のレイアウトを指定することが可能です。
- `XkbVariant` は特定のレイアウトのバリアントを選択します。例えば、`sk` のデフォルトのバリアントは `qwertz` ですが、手動で `qwerty` などを指定することができます。

  Warning: 指定したレイアウトと同じ数だけバリアントを指定してください。デフォルトのバリアントでいい場合は、空文字を指定してください (カンマはそのまま)。例えば、第一にデフォルトの `us` レイアウト、第二に `us` レイアウトの `dvorak` バリアントを使いたい場合、`XkbLayout` には `us,us` を `XkbVariant` には `,dvorak` を指定してください。

- `XkbOptions` には追加のオプションを含めます。レイアウトの切り替えや、通知 LED、コンポーズモードなどを指定するために使われます。

レイアウトの名前は基本的に 2-letter country code です。キーボードのモデル・レイアウト・バリアント・オプション、そしてその説明を見たいときは `/usr/share/X11/xkb/rules/base.lst` を開いて下さい。また、以下のコマンドを使うことで一覧を表示することができます:

- `localectl list-x11-keymap-models`
- `localectl list-x11-keymap-layouts`
- `localectl list-x11-keymap-variants [layout]`
- `localectl list-x11-keymap-options`

以下のサブセクションに含まれているサンプルはどれも同じ設定です。`pc104` モデルで、第一レイアウトに `jp` 第二レイアウトに `us` を、`us` レイアウトに `dvorak` バリアント、そしてレイアウトの切り替えに `Alt+Shift` を使うよう設定します。

### 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/10-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 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` を指定することで有効にできます。

### 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 を使わせることで修正できます。

Tip: XIM はとても古く、他の入力メソッドの方がうまくいくかもしれません: SCIM, uim, IBus など。詳しくは Internationalization#Input methods in Xorg を見て下さい。

### 通貨記号

ほとんどのヨーロッパ言語キーボードでは `5` キーの上にユーロ記号 (€) が印字されています。`ALT`+`5` などでユーロを打てるようにするには、`lv3:lalt_switch` や `eurosign:5` オプションを使って下さい。

ルピー記号 (₹) は同じように `rupeesign:4` で使うことができます。

## 他の設定

### 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

Categories:

- Keyboards (日本語)
- X Server (日本語)