「Xorg/キーボード設定」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎localectl を使う: 項に格下げ)
(TranslationStatus)
 
(2人の利用者による、間の19版が非表示)
1行目: 1行目:
  +
[[Category:X サーバー]]
 
[[Category:キーボード設定]]
 
[[Category:キーボード設定]]
  +
[[en:Xorg/Keyboard configuration]]
[[Category:X サーバー]]
 
[[en:Keyboard configuration in Xorg]]
+
[[fr:Xorg (Français)/Keyboard configuration]]
[[es:Keyboard configuration in Xorg]]
+
[[ru:Xorg (Русский)/Keyboard configuration]]
[[ru:Keyboard configuration in Xorg]]
+
[[uk:Xorg (Українська)/Keyboard configuration]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related|コンソールでのキーボード設定}}
+
{{Related|X keyboard extension}}
  +
{{Related|Linux コンソール/キーボード設定}}
 
{{Related|特別なキーボードキー}}
 
{{Related|特別なキーボードキー}}
 
{{Related|Xorg}}
 
{{Related|Xorg}}
{{Related|X KeyBoard extension}}
+
{{Related|キーボードショートカット}}
 
{{Related articles end}}
 
{{Related articles end}}
   
この記事はレイアウトの修正や追加キーマッピングなどを除く基本的な設定についてみ説明しています。省かれている高度な話題については [[X KeyBoard extension]] あるいは[[特別なキーボードキー]]を参照してください。
+
この記事は [[Xorg]] のキーボード設定の基本を説明しています。キーボードレイアウトの変更や追加キーマッピングなどの高度な話題については、それぞれ [[X keyboard extension]] [[特別なキーボードキー]] を参照してください。
 
== 概要 ==
 
 
Xorg は [[X KeyBoard extension]] (XKB) を使ってキーボードレイアウトを管理しています。また、[[xmodmap]] を使って内部のキーマップテーブルに直接アクセスすることができます。一般的に、単純な作業以外での ''xmodmap'' の使用は推奨されていません。また、[[systemd]] の ''localectl'' を使うことで Xorg サーバーと仮想端末の両方のキーボードレイアウトを定義することもできます。
 
   
  +
Xorg サーバーはキーボードレイアウトを定義するために [[X keyboard extension]] (XKB) を使用します。オプションで [[xmodmap]] を使って内部のキーマップテーブルに直接アクセスすることもできますが、複雑な作業にはお勧めできません。また、[[systemd]] の ''localectl'' を使って Xorg サーバーと仮想コンソールの両方でキーボードレイアウトを定義することができます。
この記事ではほとんどの環境で効果がある XKB を使った低いレベルでの設定を説明していますが、[[GNOME]] などのデスクトップ環境によって設定が上書きされることもあります。デスクトップ環境ごとの情報も読んで下さい:
 
   
  +
{{Note|XKB のオプションは、[[GNOME]] や [[KDE]] などのいくつかのデスクトップ環境が提供するツールで上書きすることができます。}}
* [[GNOME#XkbOptions でキーボードを変更する]]
 
* [[KDE#キーボードの設定]]
 
   
 
== キーボード設定の表示 ==
 
== キーボード設定の表示 ==
56行目: 53行目:
 
{{hc|$ xkb-switch|us}}
 
{{hc|$ xkb-switch|us}}
   
* {{AUR|xkblayout-state}}{{Broken package link|パッケージが存在しません}}:
+
* {{AUR|xkblayout-state-git}}:
   
 
{{hc|$ xkblayout-state print "%s"|de}}
 
{{hc|$ xkblayout-state print "%s"|de}}
64行目: 61行目:
 
Xorg のキーボードレイアウトは複数の方法で設定することが可能です。以下は使用されるオプションの説明です:
 
Xorg のキーボードレイアウトは複数の方法で設定することが可能です。以下は使用されるオプションの説明です:
   
* {{ic|XkbModel}} はキーボードのモデルを選択します。あなたのキーボードにある追加キーにのみ影響を与えます。{{ic|pc104}} と {{ic|pc105}} は安全なフォールバックです。ラップトップには追加キーが複数存在することがあり、適切なモデルを設定することでそれらのキーを利用することができます。
+
* {{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、コンポーズモードなどを指定するために使われます。例は [[#よく使われる XKB オプション]] セクションを参照してください。
: {{Warning|指定したレイアウトと同じ数だけバリアントを指定してください。デフォルトのバリアントでいい場合は、空文字を指定してください (カンマはそのまま)。例えば、第一にデフォルトの {{ic|us}} レイアウト、第二に {{ic|us}} レイアウトの {{ic|dvorak}} バリアントを使いたい場合、{{ic|XkbLayout}} には {{ic|us,us}} を {{ic|XkbVariant}} には {{ic|,dvorak}} を指定してください。}}
 
* {{ic|XkbOptions}} には追加のオプションを含めます。レイアウトの切り替えや、通知 LED、コンポーズモードなどを指定するために使われます。
 
   
  +
{{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}}
77行目: 75行目:
 
* {{ic|localectl list-x11-keymap-options}}
 
* {{ic|localectl list-x11-keymap-options}}
   
以下のサブセクションに含まれているサンプルはどれも同じ設定です。{{ic|pc104}} モデルで、第一レイアウトに {{ic|jp}} 第二レイアウトに {{ic|us}} を、{{ic|us}} レイアウトに {{ic|dvorak}} バリアント、そしてレイアウトの切り替えに {{ic|Alt+Shift}} を使うよう設定します。詳しい情報は {{man|7|xkeyboard-config}} を見てください。
+
以下のサブセクションにるサンプルはどれも同じ効果があります。{{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'' ツール実行中の X サーバーのキーボードレイアウトを設定し、セッションが終了するまで設定は持続します。また [[xinitrc]] を使うことで設定を再起動後も永続させることができます。[[#X の設定ファイルを使う|X の設定ファイル]]によって指定されたシステム全体の設定を上書きしたいとき有用です。
+
''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:alt_shift_toggle
+
$ 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#設定]] で説明しています。この方法はシステム全体で適用される設定を作成して再起動後も設定が持続します。
110行目: 112行目:
 
Option "XkbModel" "pc104"
 
Option "XkbModel" "pc104"
 
Option "XkbVariant" ",dvorak"
 
Option "XkbVariant" ",dvorak"
Option "XkbOptions" "grp:alt_shift_toggle"
+
Option "XkbOptions" "grp:win_space_toggle"
 
EndSection
 
EndSection
 
}}
 
}}
120行目: 122行目:
 
使用法は次の通りです:
 
使用法は次の通りです:
   
$ localectl [--no-convert] set-x11-keymap ''layout'' [''model'' [''variant'' [''options'']]]
+
# localectl [--no-convert] set-x11-keymap ''layout'' [''model'' [''variant'' [''options'']]]
  +
  +
''model'', ''variant'' または ''options'' を設定するには、 直前のすべてのフィールドを指定する必要がありますが、 {{ic|""}} で空文字列を渡すことで、 直前のフィールドをスキップすることができます。{{ic|--no-convert}} オプションが渡されない限り、指定されたキーマップは最も近いコンソールのキーマップに変換され、 {{ic|vconsole.conf}} の[[コンソールでのキーボード設定|コンソール設定]]に適用されることもあります。詳しくは {{man|1|localectl}} を参照してください。
   
 
次のコマンドは上のサンプルと全く同じ内容で {{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:alt_shift_toggle
+
# 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 オプション ==
130行目: 136行目:
 
=== キーボードレイアウトの切り替え ===
 
=== キーボードレイアウトの切り替え ===
   
キーボードレイアウト簡単切り替えを有効にするには、まず切り替えめに複数のレイアウトを指定してください (最初のレイアウトがデフォルトになります)。次に、切り替えに使用するキー (もしくはキーの組み合わせ) を指定します。例えば、{{ic|CapsLock}} キーで US と Swedish レイアウトを切り替えたい場合、{{ic|XkbLayout}} の引数に {{ic|us,se}} を {{ic|XkbOptions}} の引数に {{ic|grp:caps_toggle}} を指定してください。
+
キーボードレイアウト簡単切り替えられるようにするには、まず切り替えた複数のレイアウトを指定してください (最初のレイアウトがデフォルトになります)。次に、切り替えに使用するキー (もしくはキーの組み合わせ) を指定します。例えば、{{ic|CapsLock}} キーで US と Swedish レイアウトを切り替えたい場合、{{ic|XkbLayout}} の引数に {{ic|us,se}} を {{ic|XkbOptions}} の引数に {{ic|grp:caps_toggle}} を指定してください。{{ic|XkbLayout}} の個数は {{ic|XkbVariant}} の個数と一致している必要があります。別のバリアント間だけで切り替えたい場合は、同じレイアウトを重複して指定してください (例: {{ic|de,de}})
   
  +
利用可能なレイアウト (及びバリアント) のリストは {{man|7|xkeyboard-config|LAYOUTS}} で見られます。レイアウトの切り替えに使用可能なキーの組み合わせは {{man|7|xkeyboard-config|Switching to another layout}} にリストアップされています。
{{ic|CapsLock}} 以外のキーコンビネーションを使うこともできます。{{ic|/usr/share/X11/xkb/rules/base.lst}} 内の {{ic|grp:}} で始まって {{ic|toggle}} で終わっているのがそうです。利用できるオプションの完全な一覧を表示するには、次のコマンドを実行してください:
 
   
  +
注意点として、{{ic|grp:alts_toggle}} オプションには[https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/issues/43 信頼性がなく]、おそらく修正されないでしょう。なので、他のキーの組み合わせが推奨されます。
$ grep "grp:.*toggle" /usr/share/X11/xkb/rules/base.lst
 
   
=== Ctrl+Alt+Backspace Xorg 終了する ===
+
==== Alt Shift言語切り替え====
   
  +
{{ic|Alt+Shift}} をレイアウト切り替えのショートカットとして設定するには、{{ic|XkbOptions}} で {{ic|grp:alt_shift_toggle}} を使用してください。
デフォルトで、キーの組み合わせ {{ic|Ctrl+Alt+Backspace}} は無効になっています。{{ic|XkbOptions}} に {{ic|terminate:ctrl_alt_bksp}} を指定することで有効にできます。また、{{ic|xmodmap}} でキーを {{ic|Terminate_Server}} にバインドすることでも設定できます (既存の {{ic|XkbOptions}} 設定は元に戻ります)。
 
  +
  +
しかし、XKB には、{{ic|Alt+Shift+''any_key''}} という形式の他のショートカットの機能を破壊してしまうという[https://gitlab.freedesktop.org/xorg/app/setxkbmap/-/issues/10 既知の問題]が存在します。さらに、XKB は一部のキーボードレイアウトで右 {{ic|Alt}} を {{ic|AltGr}} とデフォルトで設定する場合があり、このせいで {{ic|RAlt+RShift}} でレイアウト切り替えを行うことができなくなってしまいます。
  +
  +
回避策として、以下を {{ic|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
  +
  +
とある理由により、{{ic|Alt}} は {{ic|Shift}} の前に押さないと sxhkd が認識しないことに注意してください。
  +
  +
=== Ctrl+Alt+Backspace で Xorg を終了する ===
   
どちらにしても {{ic|ServerFlags}} の {{ic|DontZap}} 設定を "off" にする必要がありますが、バージョン R6.8.0 (2004年) からデフォルト設定となっています [https://www.x.org/archive/X11R6.8.0/doc/xorg.conf.5.html]。
+
デフォルトで、キーの組み合わせ {{ic|Ctrl+Alt+Backspace}} は無効になっています。{{ic|XkbOptions}} に {{ic|terminate:ctrl_alt_bksp}} を指定することで有効にできます。また、{{ic|xmodmap}} でキーを {{ic|Terminate_Server}} にバインドすることでも設定できます (既存の {{ic|XkbOptions}} 設定は元に戻ります)。どちらにしても {{ic|ServerFlags}} の {{ic|DontZap}} 設定を "off" にする必要がありますが、2004年からデフォルトで "off" になっています [https://www.x.org/archive/X11R6.8.0/doc/xorg.conf.5.html]。
   
 
=== Caps Lock と左 Control を交換する ===
 
=== Caps Lock と左 Control を交換する ===
150行目: 169行目:
 
=== マウスキーを有効にする ===
 
=== マウスキーを有効にする ===
   
現在[[Wikipedia:ja:マウスキー|マウスキー]]はデフォルトで無効にされているので {{ic|keypad:pointerkeys}} を {{ic|XkbOptions}} に加えて手動で有効にする必要があります。{{ic|Shift+NumLock}} ショートカットによってマウスキーの切り替えが行えます。
+
現在[[Wikipedia:ja:マウスキー|マウスキー]] (マウスに付いているキーのことではありません) はデフォルトで無効にされているので {{ic|keypad:pointerkeys}} を {{ic|XkbOptions}} に加えて手動で有効にする必要があります。{{ic|Shift+NumLock}} ショートカットによってマウスキーの切り替えが行えます。
  +
  +
高度な設定については [[X keyboard extension#マウスの操作]] も参照してください。
   
 
=== コンポーズキーの設定 ===
 
=== コンポーズキーの設定 ===
   
  +
通常、典型的なキーボードにはコンポーズキーなんて存在しませんが、既存のキーを[[Wikipedia:Compose key|コンポーズキー]]として設定することができます。
[[Wikipedia:Compose key|コンポーズキー]]を押して他のキーを押すと、ユニコード文字が打ち込まれます。例えば、多くの設定では {{ic|''compose_key'' ' e}} を押すことで {{ic|é}} が作られます。キーボードレイアウトとは異なる言語を入力する必要があるときに有用です (英語キーボードでフランス語・イタリア語・ドイツ語を入力する場合など)。
 
   
  +
まず {{ic|Compose}} キーを押し、その後に追加のキー (通常は2つ) を押します。典型的な用途としては、キーボードの言語以外の文字を入力するためや、{{ic|AltGr}} 修飾キーでは入力できないあまり使用されない文字を入力するためなどがあります。例えば、{{ic|Compose}} {{ic|'}} {{ic|e}} を押すと {{ic|é}} になり、{{ic|Compose}} {{ic|-}} {{ic|-}} {{ic|-}} を押すと "エムダッシュ" {{ic|—}} になります。
例えば、右の {{ic|Alt}} キーをコンポーズキーにしたいのなら、{{ic|XkbOptions}} に {{ic|compose:ralt}} を指定してください。
 
   
  +
いくつかの風変わりなキーボードには {{ic|Compose}} キーがありますが、通常、すでにあるキーを {{ic|Compose}} キーに置き換えることで使えるようにします。例えば、{{ic|Menu}} キーを {{ic|Compose}} キーにするには、[[デスクトップ環境]]の設定を使うか、{{ic|XkbOptions}} に {{ic|compose:menu}} を渡します ([[#setxkbmap を使う|setxkbmap]] の場合は {{ic|setxkbmap -option compose:menu}})。利用可能なキー置き換えは {{ic|/usr/share/X11/xkb/rules/base.lst}} で定義されています:
他のキーをコンポーズキーにすることもできます。{{ic|/usr/share/X11/xkb/rules/base.lst}} 内の {{ic|compose:}} で始まっているのがそうです。利用できるオプションの完全な一覧を表示するには、次のコマンドを実行してください:
 
   
 
$ grep "compose:" /usr/share/X11/xkb/rules/base.lst
 
$ grep "compose:" /usr/share/X11/xkb/rules/base.lst
  +
  +
欲しいキーマッピングがこのファイルにない場合、[[xmodmap]] を使ってキーを {{ic|Multi_key}} keysym にマップすることもできます。{{ic|Multi_key}} keysym はデフォルトでコンポーズキーとして機能します (''xmodmap'' の設定は ''setxkbmap'' によってリセットされることに注意してください)。
   
 
==== キーの組み合わせ ====
 
==== キーの組み合わせ ====
   
コンポーズキーのデフォルトのコンビネーションは {{ic|/usr/share/X11/locale/''used_locale''/Compose}} に保存されているロケールによります。{{ic|''used_locale''}} は例えば {{ic|en_US.UTF-8}} にります。
+
コンポーズキーのデフォルトの組み合わせは {{ic|/usr/share/X11/locale/''used_locale''/Compose}} ({{ic|''used_locale''}} は {{ic|en_US.UTF-8}} などです)保存されている[[ロケール]]によります。
   
デフォルトのファイルを {{ic|~/.XCompose}} にコピーして編集することでコンポーズキーの組み合わせを定義することが可能です。コンポーズキー数千ユニコード文字全てで動作し、基本多言語面にない文字含みます。
+
先のデフォルトのファイルを {{ic|~/.XCompose}} にコピーして、独自のコンポーズキーの組み合わせを定義することができます。また、空 {{ic|~/.XCompose}} をし、{{ic|include "%L"}} を使ってデフォルトのファイルをインクルードすることできます。例えば:
   
  +
{{hc|~/.XCompose|<nowiki>
ただし、GTK はデフォルトで [[Wikipedia:ja:XIM|XIM]] を使わないので {{ic|~/.XCompose}} に設定したキーが使えません。この問題は {{ic|~/.xprofile}} に {{ic|1=export GTK_IM_MODULE=xim}} や {{ic|1=export XMODIFIERS="@im=none"}} を追加して GTK に XIM を使わせることで修正できます。
 
  +
include "%L"
   
  +
<Multi_key> <g> <a> : "α"
{{Tip|XIM はとても古く、他の入力メソッドの方がうまくいくかもしれません: [[Smart Common Input Method platform|SCIM]], [[Uim を使って日本語を入力|uim]], [[IBus]] など。詳しくは[[国際化#Xorg での入力]]を見て下さい。}}
 
  +
<Multi_key> <g> <b> : "β"
  +
<Multi_key> <g> <g> : "γ"
  +
</nowiki>}}
   
  +
コンポーズキー ({{ic|~/.XCompose}} 内では {{ic|<Multi_key>}} と表記しています) は、数千もの有効な Unicode 文字のどれでも機能します (基本多言語面外のものも含む)。{{man|5|Compose}} を見てください。XCompose ファイルの形式について説明されています。
=== 通貨記号 ===
 
   
  +
ただし、GTK はデフォルトで [[Wikipedia:ja:XIM|XIM]] を使わないので {{ic|~/.XCompose}} に設定したキーが使えません。この問題は、[[環境変数#グラフィック環境|グラフィカル環境の変数]] {{ic|1=GTK_IM_MODULE=xim}} や {{ic|1=XMODIFIERS="@im=none"}} の両方/片方を設定して GTK に XIM の使用を強制することで修正できます。
ほとんどのヨーロッパ言語キーボードでは {{ic|5}} キーの上にユーロ記号 (€) が印字されています。{{ic|ALT}}+{{ic|5}} などでユーロを打てるようにするには、{{ic|lv3:lalt_switch}} や {{ic|eurosign:5}} オプションを使って下さい。
 
   
  +
{{Tip|XIM はとても古く、[[IBus]] や [[Fcitx5]] などの他の入力メソッドの方がうまくいくかもしれません。詳細は [[インプットメソッド]] を参照してください。}}
ルピー記号 (₹) は同じように {{ic|rupeesign:4}} で使うことができます。
 
   
  +
{{Note|XIM では {{ic|Ctrl+Shift+u}} の組み合わせで Unicode 文字の挿入ができません。}}
== 他の設定 ==
 
  +
  +
=== 他のキーで通貨記号を入力する ===
  +
  +
ほとんどのヨーロッパ言語キーボードでは {{ic|5}} キーにユーロ記号 (€) が印字されています。{{ic|Alt+5}} などでユーロを打てるようにするには、{{ic|lv3:lalt_switch}} と {{ic|eurosign:5}} オプションを使って下さい。
  +
  +
ルピー記号 (₹) は同じように {{ic|rupeesign:4}} で使うことができます。
   
 
=== Caps Lock が押されたときにすぐに状態を切り替える ===
 
=== Caps Lock が押されたときにすぐに状態を切り替える ===
   
大文字を打つときに Caps Lock キーを多用しいる場合、Caps Lock によって状態をえるときに遅延が発生し、思うように大文字にならないことがあ (例: ''THe'', ''ARch LInux'')。こってのは[[Wikipedia:ja:CapsLockキー|タイプライター]]時代から継承です。
+
大文字を Caps Lock キーを使っ打つ人は、Caps Lock 状態を切り替える短い遅延が発生し、2文字以上が大文字になってしまういう経験があるかもしれせん (例: ''THe''''ARch LInux'')。これは、Caps Lock キーの有効化は即座に起こりますが、無効化は2つ目のキーが押されたときにしか起こらないからです。こ挙動は[[Wikipedia:Caps_lock#History|タイプライター由来]]です。タイプライターでは Caps Lock 機能はシフトされた活字棒を物理的にロックすること実現されていて、Shift キーを押して離とロックが解除されていました
   
オペレーティングシステムによって遅延が存在しません。意図的にそうしている場合もあば間違ってそうなっていることもあります。どちらにせよ好みの問題です。X サーバのバグトラッカーにこの件につバグレポートが存在しますが、現時点では簡単な解決方法はありません。詳しくは [https://bugs.freedesktop.org/show_bug.cgi?id=27903] [https://bugs.freedesktop.org/show_bug.cgi?id=56491] てください
+
一部の人気なオペレーティングシステムは意図的 (一部の人々とっはこの挙動は紛らわしため) またはミスでこの挙動が削除されていますが、これは好みの問題です。現在、この挙動を持たない他のオペレーティングシステムから反映された挙動に切り替える簡単な方法が存在しないため、バグレポートは X サーバのバグトラッカーに投稿されたままです。この問題を追跡した場合は、バグレポートと最新の進捗状況が [https://bugs.freedesktop.org/show_bug.cgi?id=27903] [https://gitlab.freedesktop.org/xorg/xserver/issues/312] られます
   
 
==== 解決方法 ====
 
==== 解決方法 ====
211行目: 244行目:
 
リロードした設定は再起動すると消えてしまうため、X の起動時に上記のコマンドを自動的に実行させるようにしても良いでしょう。
 
リロードした設定は再起動すると消えてしまうため、X の起動時に上記のコマンドを自動的に実行させるようにしても良いでしょう。
   
=== typematic delay と rate 調整 ===
+
== ワンクリックキー機能 ==
   
  +
{{pkg|xcape}} を使用することで、追加のワンクリック機能を修飾キーに割り当てることができます。例えば、{{ic|CapsLock}} を、1回だけ押した場合は {{ic|Escape}} として、他のキーと一緒に使った場合は {{ic|Control}} として機能させることができます。まず、上で説明したように [[#Caps Lock と左 Control を交換する|setxkbmap]] を使って {{ic|Control}} の交換を設定し、そして ''xcape'' を使って {{ic|Escape}} の関連付けを設定してください:
''typematic delay'' はキーリピートを始めるのにキーを押し続ける必要がある時間 (ミリ秒) を表します。キーリピートが開始されると、''typematic rate'' によって指定された頻度 (Hz) で文字が繰り返されます。これらの値は ''xset'' コマンドを使うことで変更できます:
 
  +
  +
$ xcape -e 'Caps_Lock=Escape'
  +
  +
複数の関連付けをセミコロンで区切って設定することもできます。例えば: {{ic|1=Caps_Lock=Escape;Shift_L=Escape}}
  +
  +
タイムアウト (デフォルトでは 500 ms) よりも長くキーを押すと、''xcape'' はキーイベントを生成しません。
  +
  +
== オートリピートの遅延と速度の調整 ==
  +
  +
''オートリピート遅延'' (タイプマチック遅延とも) はキーリピートを始めるのにキーを押し続ける必要がある時間 (典型的にはミリ秒) を表します。キーリピートが開始されると、''オートリピート速度'' (タイプマチック速度とも) によって指定された頻度 (通常 Hz) で文字が繰り返されます。これらの設定は Xorg と[[Linux コンソール#オートリピートの遅延と速度の調整|仮想コンソール]]とで別々に設定されることに注意してください。
  +
  +
=== xset を使う ===
  +
  +
''xset'' ツール ({{Pkg|xorg-xset}} によって提供) を使うことで、アクティブな X サーバに対してオートリピートの遅延と速度を設定することができます。しかし、実行時に特定のアクションを行うと、X サーバがこれらの変更をリセットし、デフォルトの設定に戻してしまう場合があります。
  +
  +
使用方法:
   
 
$ xset r rate ''delay'' [''rate'']
 
$ xset r rate ''delay'' [''rate'']
   
例えば typematic delay を 200ms に typematic rate を 30Hz に設定するには、のコマンドを実行します ([[xinitrc]] を使えば設定を永続化できます):
+
例えば、オートリピート遅延を 200ms に設定し、オートリピート速度を 30Hz に設定するには、以下のコマンドを使ってください ([[xinitrc]] や ''xautocfg'' を使うことでこの設定を永続化させることができます):
   
 
$ xset r rate 200 30
 
$ xset r rate 200 30
   
delay や rate の値を指定しないでコマンドを実行するで typematic 値をデフォルト (delay は 660ms で rate は 25Hz) に戻すことができます:
+
遅延も速度も指定せずにコマンドを実行すると、オートリピート設定がデフォルト (遅延 660ms、速度 25Hz) にリセットされます:
   
 
$ xset r rate
 
$ xset r rate
  +
  +
=== xautocfg を使う ===
  +
  +
{{AUR|xautocfg}} は、新しく接続されたデバイスに対して自動的にリピート速度の設定を適用することができます。このツールは X11 のイベントを監視し、新しいキーボードが接続された際にリピート速度の設定をそのキーボードに適用します。
  +
  +
* 設定を調節してください。
  +
* {{ic|xautocfg.service}} [[ユーザーユニット]]を有効化するか、{{ic|xautocfg}} を手動で起動してください。
  +
  +
{{ic|graphical-session.target}} がウィンドウマネージャかデスクトップ環境によって開始されていることを確認してください!
  +
  +
{{hc|~/.config/xautocfg.cfg|2=
  +
[keyboard]
  +
  +
# いつリピートを開始するか
  +
delay = 220
  +
  +
# hz 単位のリピート速度
  +
rate = 45
  +
}}
  +
  +
=== AutoRepeat 設定オプションを使う ===
  +
  +
設定をシステム全体で永続化させるには、[[#X の設定ファイルを使う]] で説明されているように Xorg の設定ファイルでデフォルト値を変更し、{{ic|AutoRepeat}} セクションエントリを追加してください: [https://cgit.freedesktop.org/xorg/xserver/commit/?id=4f95d87d66b6a6e11aa8616c9242e0907ffee66b]
  +
  +
{{ic|AutoRepeat}} のパラメータはミリ秒単位の {{ic|delay}} と {{ic|interval}} です。''xset'' の 25Hz {{ic|rate}} を設定したい場合、それに対応する {{ic|interval}} は 1000 / 25 = 40 ミリ秒となります。
  +
  +
{{hc|/etc/X11/xorg.conf.d/00-keyboard.conf|
  +
Section "InputClass"
  +
...
  +
Option "AutoRepeat" "200 40"
  +
...
  +
EndSection
  +
}}
  +
  +
=== X サーバのスタートアップオプションを使う ===
  +
  +
設定を永続化させるもう一つの方法は、以下のオプションを使って設定を X サーバにスタートアップ時に渡すことです:
  +
  +
* {{ic|-ardelay ''ミリ秒''}} - オートリピート遅延を設定します (オートリピートが始まるまでにキーを押す必要のある時間をミリ秒で)。
  +
* {{ic|-arinterval ''ミリ秒''}} - オートリピート間隔を設定します (オートリピートによって生成されるキーストロークの時間間隔をミリ秒で)。
  +
  +
X サーバのオプションの完全なリストは {{man|1|Xserver}} を、それらのオプションを渡す方法についてはあなたの[[ディスプレイマネージャ]]のマニュアルなどを参照してください。
   
 
== 参照 ==
 
== 参照 ==
   
* [http://madduck.net/docs/extending-xkb/ Madduck guide] on extending XKB
+
* [https://web.archive.org/web/20170825051821/http://madduck.net:80/docs/extending-xkb/ XKB の拡張に関する Madduck のガイド] (Wayback Machine でアーカイブ済み)
  +
  +
{{TranslationStatus|Xorg/Keyboard configuration|2023-07-30|783565}}

2023年7月30日 (日) 22:40時点における最新版

関連記事

この記事は Xorg のキーボード設定の基本を説明しています。キーボードレイアウトの変更や追加のキーマッピングなどの高度な話題については、それぞれ X keyboard extension特別なキーボードキー を参照してください。

Xorg サーバーはキーボードレイアウトを定義するために X keyboard extension (XKB) を使用します。オプションで xmodmap を使って内部のキーマップテーブルに直接アクセスすることもできますが、複雑な作業にはお勧めできません。また、systemdlocalectl を使って Xorg サーバーと仮想コンソールの両方でキーボードレイアウトを定義することができます。

ノート: XKB のオプションは、GNOMEKDE などのいくつかのデスクトップ環境が提供するツールで上書きすることができます。

キーボード設定の表示

次のコマンドを使うことで 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
us
$ xkblayout-state print "%s"
de

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

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

  • XkbModel はキーボードのモデルを選択します。キーボード上の一部の追加キーにのみ影響を与えます。pc104pc105 は安全なフォールバックです。しかし、例えばラップトップには通常いくつかの追加キーが存在し、適切なモデルを設定することでそれらのキーを利用することができます。
  • XkbLayout はキーボードのレイアウトを選択します。レイアウトを素早く切り替えたい場合などは、カンマで区切ることで複数のレイアウトを指定することが可能です。
  • XkbVariantXkbLayout で利用可能な特定のレイアウトのバリアントを選択します。例えば、sk (Slovak) のデフォルトのバリアントは qwertz ですが、手動で qwerty などを指定することができます。
  • XkbOptions には追加のオプションを含めます (コンマ区切り)。レイアウトの切り替えや、通知 LED、コンポーズモードなどを指定するために使われます。例は #よく使われる XKB オプション セクションを参照してください。
ノート: 指定したレイアウトと同じ数だけバリアントを指定してください。デフォルトのバリアントでいい場合は、空文字を指定してください (カンマはそのまま)。例えば、第一にデフォルトの us レイアウト、第二に us レイアウトの dvorak バリアントを使いたい場合、XkbLayout には us,usXkbVariant には ,dvorak を指定してください。

レイアウトの名前は基本的に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) を見てください。

ノート: Fcitx/IBus はキーボードレイアウトの制御を試みるため、これらのフレームワークを使用しているユーザは、以下の方法でうまく行かなかったり、少しの間しか効果がなかったりします。Fcitx のユーザは、1番目の入力メソッドを Keyboard - layout に設定する必要があります。Fcitx#入力メソッドの設定 を参照してください。IBus のユーザは、X の設定ファイルを使用している場合は Preference -> Advanced で "Use system keyboard layout" オプションを有効化する必要があり、setxkbmap を使用している場合は手動でレイアウトを指定する必要があります。

setxkbmap を使う

setxkbmap は、現在の X セッション限定でキーボードレイアウトを設定します。しかし、xinitrcxprofile を使うことで設定を永続化させることができます。これは、次の #X の設定ファイルを使う で指定したシステム全体の設定をオーバーライドします。しかし、外部キーボードなどの場合は、setxkbmap が実行された時にキーボードのデバイス ID が指定されなかった場合、設定は永続化されません。また、キーボードが X サーバのコアキーボードデバイスである場合もです。

使用方法は次の通りです (setxkbmap(1) を参照):

$ setxkbmap [-model xkb_model] [-layout xkb_layout] [-variant xkb_variant] [-option xkb_options]
ノート: setxkbmap は、コマンドラインで指定したオプションを、以前設定したオプション (ルートウィンドウのプロパティに保存されています) に追加します。以前指定したオプションを全て置き換えたい場合は、最初に -option フラグに空の引数を渡してください。

レイアウトだけを変更するには (-layout はデフォルトのフラグです):

$ setxkbmap xkb_layout

複数のカスタマイズを施すには:

$ setxkbmap -model pc104 -layout jp,us -variant ,dvorak -option grp:win_space_toggle

X の設定ファイルを使う

ノート: xorg.conf は X サーバによってスタートアップ時にパースされます。変更を適用するには、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
ヒント: localectl は、変数 XKBLAYOUTXKBMODELXKBVARIANT、そして XKBOPTIONS を使用してキーボードの設定を /etc/vconsole.conf にも書き込みますが[1]、Xorg サーバはそのファイルから設定を読み込みません。

よく使われる XKB オプション

キーボードレイアウトの切り替え

キーボードレイアウトを簡単に切り替えられるようにするには、まず、切り替えたい複数のレイアウトを指定してください (最初のレイアウトがデフォルトになります)。次に、切り替えに使用するキー (もしくはキーの組み合わせ) を指定します。例えば、CapsLock キーで US と Swedish レイアウトを切り替えたい場合、XkbLayout の引数に us,seXkbOptions の引数に 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 をレイアウト切り替えのショートカットとして設定するには、XkbOptionsgrp:alt_shift_toggle を使用してください。

しかし、XKB には、Alt+Shift+any_key という形式の他のショートカットの機能を破壊してしまうという既知の問題が存在します。さらに、XKB は一部のキーボードレイアウトで右 AltAltGr とデフォルトで設定する場合があり、このせいで 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

とある理由により、AltShift の前に押さないと sxhkd が認識しないことに注意してください。

Ctrl+Alt+Backspace で Xorg を終了する

デフォルトで、キーの組み合わせ Ctrl+Alt+Backspace は無効になっています。XkbOptionsterminate:ctrl_alt_bksp を指定することで有効にできます。また、xmodmap でキーを Terminate_Server にバインドすることでも設定できます (既存の XkbOptions 設定は元に戻ります)。どちらにしても ServerFlagsDontZap 設定を "off" にする必要がありますが、2004年からデフォルトで "off" になっています [2]

Caps Lock と左 Control を交換する

Caps Lock と左 Control キーを交換するには、XkbOptionsctrl:swapcaps を追加してください。次のコマンドを実行することで似たようなオプションとその説明を表示できます:

$ grep -E "(ctrl|caps):" /usr/share/X11/xkb/rules/base.lst

マウスキーを有効にする

現在、マウスキー (マウスに付いているキーのことではありません) はデフォルトで無効にされているので keypad:pointerkeysXkbOptions に加えて手動で有効にする必要があります。Shift+NumLock ショートカットによってマウスキーの切り替えが行えます。

高度な設定については X keyboard extension#マウスの操作 も参照してください。

コンポーズキーの設定

通常、典型的なキーボードにはコンポーズキーなんて存在しませんが、既存のキーをコンポーズキーとして設定することができます。

まず Compose キーを押し、その後に追加のキー (通常は2つ) を押します。典型的な用途としては、キーボードの言語以外の文字を入力するためや、AltGr 修飾キーでは入力できないあまり使用されない文字を入力するためなどがあります。例えば、Compose ' e を押すと é になり、Compose - - - を押すと "エムダッシュ" になります。

いくつかの風変わりなキーボードには Compose キーがありますが、通常、すでにあるキーを Compose キーに置き換えることで使えるようにします。例えば、Menu キーを Compose キーにするには、デスクトップ環境の設定を使うか、XkbOptionscompose: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_localeen_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=ximXMODIFIERS="@im=none" の両方/片方を設定して GTK に XIM の使用を強制することで修正できます。

ヒント: XIM はとても古く、IBusFcitx5 などの他の入力メソッドの方がうまくいくかもしれません。詳細は インプットメソッド を参照してください。
ノート: XIM では Ctrl+Shift+u の組み合わせで Unicode 文字の挿入ができません。

他のキーで通貨記号を入力する

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

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

Caps Lock が押されたときにすぐに状態を切り替える

大文字を Caps Lock キーを使って打つ人は、Caps Lock の状態を切り替える時に短い遅延が発生し、2文字以上が大文字になってしまうという経験があるかもしれません (例: THeARch 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 に設定するには、以下のコマンドを使ってください (xinitrcxautocfg を使うことでこの設定を永続化させることができます):

$ 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 のパラメータはミリ秒単位の delayinterval です。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) を、それらのオプションを渡す方法についてはあなたのディスプレイマネージャのマニュアルなどを参照してください。

参照

翻訳ステータス: このページは en:Xorg/Keyboard configuration の翻訳バージョンです。最後の翻訳日は 2023-07-30 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。