「Xorg/キーボード設定」の版間の差分
(TranslationStatus) |
Kusanaginoturugi (トーク | 投稿記録) (→コンポーズキーの設定: 記事を追加) |
||
172行目: | 172行目: | ||
高度な設定については [[X keyboard extension#マウスの操作]] も参照してください。 |
高度な設定については [[X keyboard extension#マウスの操作]] も参照してください。 |
||
+ | |||
+ | === AltGr の設定 === |
||
+ | |||
+ | AltGr([[Wikipedia:AltGr key#History|Alternate Graphic]])キーは、キーボード上の追加の文字や記号にアクセスするために使用できます。Shift キーと同様に修飾キーとして機能しますが、キーの第 3 レベルのマッピングにアクセスすることができます。マッピングレベルは以下のように機能します: |
||
+ | |||
+ | * 1st Level: デフォルトのキー層(修飾キーなし)。 |
||
+ | * 2nd Level: Shift キーを押すことでアクセスでき、二次的な文字(例: 大文字化)や記号(例: @ 記号)を提供します。 |
||
+ | * 3rd Level: AltGr キーを押すことでアクセスでき、第 1 レベルおよび第 2 レベルでは利用できない追加の文字や記号にアクセスできます。 |
||
+ | |||
+ | 2nd レベルの文字は通常、キーボードのキーに印刷されており、見つけるのは簡単です。一方、追加レベルの文字を確認するには、{{ic|xmodmap -pk}} を使用するか、{{ic|/usr/share/X11/xkb/symbols}} にあるキーボードマッピングを参照することができます。 |
||
=== コンポーズキーの設定 === |
=== コンポーズキーの設定 === |
2024年8月16日 (金) 23: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-models
localectl list-x11-keymap-layouts
localectl 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
を指定してください。XkbLayout
の個数は XkbVariant
の個数と一致している必要があります。別のバリアント間だけで切り替えたい場合は、同じレイアウトを重複して指定してください (例: de,de
)。
利用可能なレイアウト (及びバリアント) のリストは xkeyboard-config(7) § LAYOUTS で見られます。レイアウトの切り替えに使用可能なキーの組み合わせは xkeyboard-config(7) § Switching to another layout にリストアップされています。
注意点として、grp:alts_toggle
オプションには信頼性がなく、おそらく修正されないでしょう。なので、他のキーの組み合わせが推奨されます。
Alt Shift で言語を切り替える
Alt+Shift
をレイアウト切り替えのショートカットとして設定するには、XkbOptions
で grp:alt_shift_toggle
を使用してください。
しかし、XKB には、Alt+Shift+any_key
という形式の他のショートカットの機能を破壊してしまうという既知の問題が存在します。さらに、XKB は一部のキーボードレイアウトで右 Alt
を AltGr
とデフォルトで設定する場合があり、このせいで RAlt+RShift
でレイアウト切り替えを行うことができなくなってしまいます。
回避策として、以下を sxhkdrc
に追加することで sxhkd をレイアウト切り替えに使用することができます:
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
とある理由により、Alt
は Shift
の前に押さないと sxhkd が認識しないことに注意してください。
Ctrl+Alt+Backspace で Xorg を終了する
デフォルトで、キーの組み合わせ Ctrl+Alt+Backspace
は無効になっています。XkbOptions
に terminate:ctrl_alt_bksp
を指定することで有効にできます。また、xmodmap
でキーを Terminate_Server
にバインドすることでも設定できます (既存の XkbOptions
設定は元に戻ります)。どちらにしても ServerFlags
の DontZap
設定を "off" にする必要がありますが、2004年からデフォルトで "off" になっています [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
ショートカットによってマウスキーの切り替えが行えます。
高度な設定については X keyboard extension#マウスの操作 も参照してください。
AltGr の設定
AltGr(Alternate Graphic)キーは、キーボード上の追加の文字や記号にアクセスするために使用できます。Shift キーと同様に修飾キーとして機能しますが、キーの第 3 レベルのマッピングにアクセスすることができます。マッピングレベルは以下のように機能します:
- 1st Level: デフォルトのキー層(修飾キーなし)。
- 2nd Level: Shift キーを押すことでアクセスでき、二次的な文字(例: 大文字化)や記号(例: @ 記号)を提供します。
- 3rd Level: AltGr キーを押すことでアクセスでき、第 1 レベルおよび第 2 レベルでは利用できない追加の文字や記号にアクセスできます。
2nd レベルの文字は通常、キーボードのキーに印刷されており、見つけるのは簡単です。一方、追加レベルの文字を確認するには、xmodmap -pk
を使用するか、/usr/share/X11/xkb/symbols
にあるキーボードマッピングを参照することができます。
コンポーズキーの設定
通常、典型的なキーボードにはコンポーズキーなんて存在しませんが、既存のキーをコンポーズキーとして設定することができます。
まず Compose
キーを押し、その後に追加のキー (通常は2つ) を押します。典型的な用途としては、キーボードの言語以外の文字を入力するためや、AltGr
修飾キーでは入力できないあまり使用されない文字を入力するためなどがあります。例えば、Compose
'
e
を押すと é
になり、Compose
-
-
-
を押すと "エムダッシュ" —
になります。
いくつかの風変わりなキーボードには Compose
キーがありますが、通常、すでにあるキーを Compose
キーに置き換えることで使えるようにします。例えば、Menu
キーを Compose
キーにするには、デスクトップ環境の設定を使うか、XkbOptions
に compose:menu
を渡します (setxkbmap の場合は setxkbmap -option compose:menu
)。利用可能なキー置き換えは /usr/share/X11/xkb/rules/base.lst
で定義されています:
$ grep "compose:" /usr/share/X11/xkb/rules/base.lst
欲しいキーマッピングがこのファイルにない場合、xmodmap を使ってキーを Multi_key
keysym にマップすることもできます。Multi_key
keysym はデフォルトでコンポーズキーとして機能します (xmodmap の設定は setxkbmap によってリセットされることに注意してください)。
キーの組み合わせ
コンポーズキーのデフォルトの組み合わせは /usr/share/X11/locale/used_locale/Compose
(used_locale
は en_US.UTF-8
などです) に保存されているロケールによります。
先のデフォルトのファイルを ~/.XCompose
にコピーして、独自のコンポーズキーの組み合わせを定義することができます。または、空の ~/.XCompose
を作成し、include "%L"
を使ってデフォルトのファイルをインクルードすることもできます。例えば:
~/.XCompose
include "%L" <Multi_key> <g> <a> : "α" <Multi_key> <g> <b> : "β" <Multi_key> <g> <g> : "γ"
コンポーズキー (~/.XCompose
内では <Multi_key>
と表記しています) は、数千もの有効な Unicode 文字のどれでも機能します (基本多言語面外のものも含む)。Compose(5) を見てください。XCompose ファイルの形式について説明されています。
ただし、GTK はデフォルトで XIM を使わないので ~/.XCompose
に設定したキーが使えません。この問題は、グラフィカル環境の変数 GTK_IM_MODULE=xim
や XMODIFIERS="@im=none"
の両方/片方を設定して GTK に XIM の使用を強制することで修正できます。
他のキーで通貨記号を入力する
ほとんどのヨーロッパ言語キーボードでは 5
キーにユーロ記号 (€) が印字されています。Alt+5
などでユーロを打てるようにするには、lv3:lalt_switch
と eurosign:5
オプションを使って下さい。
ルピー記号 (₹) は同じように rupeesign:4
で使うことができます。
Caps Lock が押されたときにすぐに状態を切り替える
大文字を Caps Lock キーを使って打つ人は、Caps Lock の状態を切り替える時に短い遅延が発生し、2文字以上が大文字になってしまうという経験があるかもしれません (例: THe、ARch LInux)。これは、Caps Lock キーの有効化は即座に起こりますが、無効化は2つ目のキーが押されたときにしか起こらないからです。この挙動はタイプライター由来です。タイプライターでは Caps Lock の機能はシフトされた活字棒を物理的にロックすることで実現されていて、Shift キーを押して離すとロックが解除されていました。
一部の人気なオペレーティングシステムでは意図的 (一部の人々にとってはこの挙動は紛らわしいため) またはミスでこの挙動が削除されていますが、これは好みの問題です。現在、この挙動を持たない他のオペレーティングシステムから反映された挙動に切り替える簡単な方法が存在しないため、バグレポートは 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 の起動時に上記のコマンドを自動的に実行させるようにしても良いでしょう。
ワンクリックキーの機能
xcape を使用することで、追加のワンクリック機能を修飾キーに割り当てることができます。例えば、CapsLock
を、1回だけ押した場合は Escape
として、他のキーと一緒に使った場合は Control
として機能させることができます。まず、上で説明したように setxkbmap を使って Control
の交換を設定し、そして xcape を使って Escape
の関連付けを設定してください:
$ xcape -e 'Caps_Lock=Escape'
複数の関連付けをセミコロンで区切って設定することもできます。例えば: Caps_Lock=Escape;Shift_L=Escape
タイムアウト (デフォルトでは 500 ms) よりも長くキーを押すと、xcape はキーイベントを生成しません。
オートリピートの遅延と速度の調整
オートリピート遅延 (タイプマチック遅延とも) はキーリピートを始めるのにキーを押し続ける必要がある時間 (典型的にはミリ秒) を表します。キーリピートが開始されると、オートリピート速度 (タイプマチック速度とも) によって指定された頻度 (通常 Hz) で文字が繰り返されます。これらの設定は Xorg と仮想コンソールとで別々に設定されることに注意してください。
xset を使う
xset ツール (xorg-xset によって提供) を使うことで、アクティブな X サーバに対してオートリピートの遅延と速度を設定することができます。しかし、実行時に特定のアクションを行うと、X サーバがこれらの変更をリセットし、デフォルトの設定に戻してしまう場合があります。
使用方法:
$ xset r rate delay [rate]
例えば、オートリピート遅延を 200ms に設定し、オートリピート速度を 30Hz に設定するには、以下のコマンドを使ってください (xinitrc や xautocfg を使うことでこの設定を永続化させることができます):
$ xset r rate 200 30
遅延も速度も指定せずにコマンドを実行すると、オートリピートの設定がデフォルト (遅延 660ms、速度 25Hz) にリセットされます:
$ xset r rate
xautocfg を使う
xautocfgAUR は、新しく接続されたデバイスに対して自動的にリピート速度の設定を適用することができます。このツールは X11 のイベントを監視し、新しいキーボードが接続された際にリピート速度の設定をそのキーボードに適用します。
- 設定を調節してください。
xautocfg.service
ユーザーユニットを有効化するか、xautocfg
を手動で起動してください。
graphical-session.target
がウィンドウマネージャかデスクトップ環境によって開始されていることを確認してください!
~/.config/xautocfg.cfg
[keyboard] # いつリピートを開始するか delay = 220 # hz 単位のリピート速度 rate = 45
AutoRepeat 設定オプションを使う
設定をシステム全体で永続化させるには、#X の設定ファイルを使う で説明されているように Xorg の設定ファイルでデフォルト値を変更し、AutoRepeat
セクションエントリを追加してください: [5]
AutoRepeat
のパラメータはミリ秒単位の delay
と interval
です。xset の 25Hz rate
を設定したい場合、それに対応する interval
は 1000 / 25 = 40 ミリ秒となります。
/etc/X11/xorg.conf.d/00-keyboard.conf
Section "InputClass" ... Option "AutoRepeat" "200 40" ... EndSection
X サーバのスタートアップオプションを使う
設定を永続化させるもう一つの方法は、以下のオプションを使って設定を X サーバにスタートアップ時に渡すことです:
-ardelay ミリ秒
- オートリピート遅延を設定します (オートリピートが始まるまでにキーを押す必要のある時間をミリ秒で)。-arinterval ミリ秒
- オートリピート間隔を設定します (オートリピートによって生成されるキーストロークの時間間隔をミリ秒で)。
X サーバのオプションの完全なリストは Xserver(1) を、それらのオプションを渡す方法についてはあなたのディスプレイマネージャのマニュアルなどを参照してください。
参照
- XKB の拡張に関する Madduck のガイド (Wayback Machine でアーカイブ済み)