Ubuntu/LinuxでCaps・Super・Ctrl・TabをEscに割り当てる:Wayland・X11・Fnの境界

別のキーを Esc として動作させる前に、変更する層を決めます。対象は、単一アプリ、現在の GNOME ユーザー、X11 セッション、特定の入力デバイス、Linux 仮想コンソール、またはマシン全体のいずれかです。範囲が広いほど、パスワード入力、画面ロック、アクセシビリティのナビゲーション、復旧のリスクが高まります。最も安全な既定方針は、物理 Esc を残し、通常のユーザーセッションで追加の Esc を一つだけ試し、ロールバックを確認してから永続化することです。

1. まず最も狭い適用範囲を選ぶ

目的優先する層最初に行わないこと
Vim だけで Insert mode を抜けやすくするアプリの組み込みキーまたはアプリ設定マシン全体のキーボードを変更する
Caps Lock を追加の Esc にするGNOME ユーザー単位の標準 XKB optionEsc/Caps を交換する、または既存 XKB options を置換する
1 台のキーボードの右 Ctrl、Super、Tab を Esc にするinput-remapper の単一デバイス、単一プリセットテスト全キーボードを一度に変更して autoload を有効にする
古い X11 アプリだけを扱うX11/XKB セッション設定xmodmap がネイティブ Wayland アプリも制御すると仮定する
Linux テキストコンソールまたはログイン画面管理者が管理する console/systemd 設定第 2 の入力経路なしでグローバル変更する
Fn が独立イベントを出さないキーボードの firmware/vendor 設定keycode を推測する、または組み合わせの結果を Fn と呼ぶ

Caps、Super、Ctrl、Tab を同時に割り当てないでください。候補を一つずつ試し、反対側の Ctrl、Tab、Super、物理 Esc、または 2 台目のキーボードを復旧経路として残します。

2. これらのキーには既に重要な役割がある

  • Caps Lock:多くの場合は低リスクな候補ですが、Orca の laptop layout は Caps Lock を既定の Orca modifier として使えます。Caps Lock やスクリーンリーダーが必要なら先に確認します。
  • Super/Win:GNOME は Activities を開くために使い、Super+Space は入力ソースの切り替えにもよく使われます。割り当てるとデスクトップ操作が変わります。
  • Ctrl:端末、エディター、ブラウザー、アクセシビリティ機能が広く依存します。どうしても試すなら右 Ctrl だけを候補にし、左 Ctrl を残します。
  • Tab:GNOME のアクセシビリティ文書では、Tab と Ctrl+Tab をキーボードフォーカス移動に使います。キーボードナビゲーション、フォーム、スクリーンリーダーに依存する利用者から Tab を奪わないでください。
  • Fn:多くの laptop はキーボード controller/firmware 内で Fn を処理します。Linux には、組み合わせ後の明るさ、音量、function-key event だけが見えるか、独立 Fn event がまったく見えない場合があります。

パスワード欄では通常、文字が見えません。範囲を誤った割り当ては、画面ロック、sudo、ディスク解除、リモートコンソールまで発覚しないことがあります。テスト中に本物のパスワードを入力しないでください。

3. 変更前に復旧経路を用意する

永続化する操作の前に:

  • 物理 Esc を残し、交換から始めない。
  • 2 台目のキーボードを接続してテストするか、スクリーンキーボード、管理されたリモートセッション、TTY でログインできることを確認する。リモート経路は、変更対象と同じ入力 stack に依存してはいけません。
  • パスワードを入力する前に raw key を取得するツールを終了する。
  • セッション種類、入力ソース、XKB options、console keymap、支援技術、input-remapper autoload 状態を記録する。
  • ユーザー設定を読み取り専用でバックアップする。システム全体の作業には、管理者、maintenance window、console rollback も必要です。

「ログアウトすれば戻る」を保証と考えないでください。GNOME gsettings、input-remapper autoload、console keymap、hwdb はログインや再起動を越えて残る場合があります。

4. Wayland、X11、設定元を読み取り専用で棚卸しする

最初に次のコマンドを実行します。GNOME/X11 以外や関連ソフトがない環境では一部が失敗します。失敗を記録し、空の出力を既定値とは解釈しません。

echo "$XDG_SESSION_TYPE"
echo "$XDG_CURRENT_DESKTOP"
loginctl show-session "$XDG_SESSION_ID" -p Type -p Remote
gsettings writable org.gnome.desktop.input-sources xkb-options
gsettings get org.gnome.desktop.input-sources xkb-options
localectl status
localectl list-x11-keymap-options | grep -E '^caps:(escape|swapescape|escape_shifted_capslock)$'
command -v xev setxkbmap xmodmap libinput input-remapper-control
setxkbmap -query
xmodmap -pm
systemctl status input-remapper --no-pager

$XDG_SESSION_TYPE=wayland の場合、setxkbmapxmodmapxev が示すのは最大でも Xwayland 境界までであり、ネイティブ Wayland アプリが同じ map を使う証明にはなりません。GNOME のユーザー単位 xkb-options はデスクトップセッションが適用します。ネイティブ Wayland、Xwayland、ロック画面を別々にテストします。

localectl はシステムの console/X11 既定値を示しますが、現在の GNOME ユーザーの最終構成とは限りません。個人の Vim 操作を解決するために localectl set-keymapset-x11-keymap でマシン設定を上書きしないでください。

5. 対象キーがシステムに見えることを先に証明する

Linux 入力 subsystem に EV_KEY などの event が届いて初めて userspace tool が割り当てられます。まずデバイスを一覧し、専用テスト画面で対象キーと Esc だけを押します。

libinput list-devices
grep -E 'Name=|Handlers=|EV=' /proc/bus/input/devices

X11 セッションでは小さなテスト画面で確認できます。

xev -event keyboard

Wayland または低層診断では、libinput 文書の libinput debug-events --show-keycodes を利用できます。通常は保護された input device の読み取りが必要です。このツールは raw key を見ます。チャット、password manager、ログイン操作を止め、テストキーだけを押してすぐ終了し、私的入力を含む完全ログを共有しないでください。唯一のキーボードを grab mode にしません。

keycode は、キーボード、protocol、session、tool を越えた永続 ID ではありません。2014 年原文の 9115151 は当時の特定 X11 環境の観測値であり、現在の設定定数ではありません。

6. Fn の hardware/firmware 境界

Fn 単独を押しても kernel、libinput、input-remapper に独立 event が出なければ、XKB や userspace が割り当てられる「Fn キー」はありません。機種によっては Fn と別のキーを KEY_BRIGHTNESSUPKEY_VOLUMEUPXF86WakeUp、通常の F キーに変換します。それは組み合わせの結果であり、独立した Fn event ではありません。

キーボード/laptop vendor の firmware 設定、Fn Lock、公式 utility を確認します。XF86WakeUp が Fn だと推測したり、未確認の割り当てを作るために ACPI、kernel driver、hwdb を変更したりしないでください。hardware が event を公開しなければ、software は確実に取得できません。

7. まずアプリ内の代替手段を検討する

Vim 公式 help は Insert mode の Ctrl-[Esc と同等の command としています。キーボード map を変更せず、パスワード、デスクトップ、Tab ナビゲーション、他アプリに影響しないため、最初に試す候補です。

ほかの editor、terminal multiplexer、IDE にも独自 shortcut 設定がある場合があります。アプリ内 UI を優先し、競合、macro、plugin、remote application の境界を確認します。Vim の Ctrl-[ の意味が全プログラムに適用されると仮定せず、通常のテキストに現れやすい文字列をグローバルに Esc へ割り当てないでください。

8. GNOME:Caps Lock を安全に追加 Esc にする

現在の xkeyboard-config には caps:escape があり、Caps Lock を追加の Esc にしつつ物理 Esc を残します。caps:swapescape より復旧しやすく、Esc を失う危険を減らせます。

次の script は現在の XKB options が空の場合だけ進むため、Compose、layout switching、その他の既存 option を上書きしません。元の GVariant 値を保存し、backup の上書きを拒否し、結果を直ちに読み戻します。

CurrentOptions="$(gsettings get org.gnome.desktop.input-sources xkb-options)"
BackupPath="gnome-xkb-options-$(date +%Y%m%d-%H%M%S).txt"
umask 077
test ! -e "$BackupPath" || exit 1
echo "$CurrentOptions" | tee "$BackupPath"
case "$CurrentOptions" in
  "@as []"|"[]") ;;
  *) echo "Stop: merge existing XKB options deliberately"; exit 1 ;;
esac
gsettings set org.gnome.desktop.input-sources xkb-options "['caps:escape']"
gsettings get org.gnome.desktop.input-sources xkb-options

既存 options がある場合は停止し、GNOME keyboard settings またはレビュー済み GVariant list で併合します。配列全体を置換するコマンドを貼り付けないでください。通常の editor、terminal、ネイティブ Wayland、Xwayland で Caps と物理 Esc を試し、すぐに画面をロックしません。

Caps Lock 機能も残す必要がある場合は、ローカル環境に caps:escape_shifted_capslock が列挙されることを確認し、現在の xkeyboard-config の説明を読んで個別に評価します。すべての distribution version が同じ option を持つとは仮定しません。

9. GNOME XKB options を復元する

同じ shell では先ほどの $BackupPath を使えます。新しい shell では placeholder を実際の信頼できる backup path に置き換えます。

BackupPath="PASTE_THE_BACKUP_PATH"
test -r "$BackupPath" || exit 1
SavedOptions="$(cat "$BackupPath")"
gsettings set org.gnome.desktop.input-sources xkb-options "$SavedOptions"
gsettings get org.gnome.desktop.input-sources xkb-options

読み戻した値が backup と完全一致することを確認し、Caps、Esc、Compose、入力ソース切り替え、既存 shortcut をテストします。未知の旧リストの復元を gsettings reset で代用しないでください。reset は schema default に戻すだけで、ユーザーの以前の値とは限りません。

10. Super、右 Ctrl、Tab:input-remapper で 1 デバイスをテストする

標準 XKB option に目的の任意 mapping がない場合があります。input-remapper project は virtual input を介して X11/Wayland をサポートし、device/preset ごとに mapping を保存すると説明しています。/dev/input へのアクセスと event injection が必要なため、通常のアプリ設定より権限と影響範囲が広くなります。

distribution 公式 package または project の正式 release だけから install し、導入 version に対応する Usage を読みます。推奨順序:

  1. GUI を開き、対象のキーボードを明示的に選び、新しい preset を作る。
  2. 候補キーを一つだけ記録し、GUI autocomplete が示す Escape または対応名を output に選ぶ。古い keycode を手入力しない。
  3. Apply で一時的に inject するが、Autoload は有効にしない。
  4. 物理 Esc を残す。右 Ctrl を試すなら左 Ctrl を残す。キーボードナビゲーションが必要なら Tab を試さない。
  5. 通常テキスト、デスクトップ shortcut、必要なアプリで press/release を試す。パスワードを入力せず、画面をロックしない。
  6. GUI の Stop で injection を止め、元キーが戻ることを確認してから永続化の必要性を決める。

help、device、利用可能 symbol、service 状態を読み取り専用で確認します。

input-remapper-control --help
input-remapper-control --list-devices
input-remapper-control --symbol-names | grep -Ei 'esc|escape'
systemctl status input-remapper --no-pager

project 文書は debug log が私的入力を含み得ること、誤った autoload で device が使えなくなる可能性を警告しています。stuck key や無効な device が発生したら、まず GUI Stop を使います。project は injection を止める復旧策として device を 2 回抜き差しする方法も説明しています。第 2 の入力経路なしで autoload を有効にしません。

11. X11 の xmodmap は旧式のセッション限定方式

xmodmap は X11 の modifier/key map を変更します。ネイティブ Wayland client は制御せず、Xwayland 混在セッションではアプリ間で結果が不一致になります。Ctrl、Super、Caps を modifier から外すと、modifier が stuck または失われた状態にもなり得ます。

歴史的 keycode をコピーしません。古い X11 環境を保守する場合は、xmodmap -pkexmodmap -pm を保存し、今回の xev 証拠に基づいて隔離テストセッションだけを変更し、別端末から X session を終了できるようにします。現代の GNOME では標準 XKB option を優先し、任意のデバイス単位 mapping には停止可能な input-remapper preset を優先します。

12. Console、ログイン画面、systemd hwdb はシステム全体の変更

Linux virtual console keymap は GNOME user session と別です。localectl は console/X11 の system default を設定し、TTY login と password entry に影響できます。systemd keyboard hwdb は device match と scan code によって desktop 到達前の KEYBOARD_KEY_ を書き換えられるため、Wayland/X11/user の境界を越えて作用し、マシン全体をロックアウトしやすくなります。

これらは管理者が管理する固定 hardware 専用です。正確な hardware match、元の scan-code 証拠、設定 backup、2 台目のキーボード、物理または out-of-band console、maintenance window、段階的 rollout が必須です。個人の Esc 嗜好のため全キーボードに広い hwdb rule を書かず、/usr/lib の vendor file を編集しません。libxkbcommon も system XKB root は update で上書きされると警告しています。

ログイン画面は display manager/system setting が制御します。ログイン後の GNOME mapping が正常でも password login の安全性は証明されません。ログイン画面や kiosk の mapping は管理者に任せ、非 production machine で先に検証します。

13. 検証マトリクス

確認項目期待する証拠失敗時の対応
元の物理 Escmenu/dialog を閉じ、Vim Insert mode を抜けられる直ちに戻し、ロックしない
追加 Esc候補の press/release が各 1 回の Esc になり、repeat/stuck がないStop/XKB 復元後、event を調べる
元キーの役割Super overview、左 Ctrl、Tab navigation など予定した経路が残る範囲を狭めるか Caps を選ぶ
Wayland と Xwayland両方のアプリ種別が計画どおりxmodmap patch を重ねない
アクセシビリティOrca modifier、Tab focus、screen keyboard が使える先に戻し、利用者が評価する
入力ソース/Composeswitch と Compose options が上書きされていないbackup から完全な配列を戻す
画面ロック/login第 2 入力と rollback があるときだけ試すrollback がなければ永続化を止める
再接続/reboot承認した mapping だけが残るautoload を無効化または設定復元

一度に一つの変数だけを変更します。「1 回押すと Esc が出る」だけでなく、press、hold、repeat、release をテストします。

14. パスワード、プライバシー、アクセシビリティの境界

  • raw-event tool と input-remapper debug は全キーを記録できます。実行中は password、chat、recovery code を入力しない。
  • 全ユーザーに /dev/input access を与えず、未知の script を root で常駐させない。
  • Caps Lock は Orca modifier、Tab は keyboard focus、Super/Ctrl は desktop/application shortcut になり得ます。
  • ユーザー単位の GNOME map は console、display manager、container、remote desktop、全アプリへの global guarantee ではありません。
  • 割り当て後は keycap と実際の動作が異なります。共有、公共、アクセシビリティ機器には表示し、rollback を記録します。

職業上の健康やアクセシビリティ目的なら、実際の利用者を acceptance test に参加させます。利便性のために確実な login、focus navigation、assistive technology を失ってはいけません。

15. 停止してエスカレーションする条件

  • Fn に独立 kernel/input event がない、または tool 間の観測が矛盾する。
  • 唯一の Esc、Ctrl、Tab、Super、またはキーボードを置換しようとしている。
  • 既存 XKB options、xmodmap、input-remapper autoload、hwdb、vendor layer を説明できない。
  • root 常駐 script、広い hwdb match、/usr/share//usr/lib 編集、/dev/input 権限開放がなければ続けられない。
  • screen reader、kiosk、full-disk unlock、production login、remote maintenance がその device に依存し、利用者承認と物理 rollback がない。
  • テストで event 重複、release 欠落、stuck modifier、suspend 後の変化、session 間不一致が出る。

session type、device name、実際の event、XKB options、tool version、最小再現を保存し、desktop/distribution、input-remapper、hardware vendor の maintainer に渡します。私的な raw keystroke log は公開しません。

16. 公式・プロジェクト資料

資料の確認日は 2026-09-01 です。desktop、XKB data、hardware firmware、input-remapper interface は変化します。ローカル version の help と対応 version の公式文書を参照してください。

17. 2014 年原文アーカイブ(来歴確認専用)

以下の fence は source_export の完全な可視本文を byte 単位で保持します。末尾空白の正規化も私的値の編集もしていません。固定 X11 keycode、WinKey keysym の仮定、再起動で file が適用されるという説明、Fn と XF86WakeUp の同一視は、現行設定手順ではなく不活性な歴史資料です。

~~~~markdown

Ubuntu下键盘按键替换
首先要知道键盘每个击键的Keycode, 这个可以使用xev在一台键盘layout相同的电脑上查到。

得知ESC的keycode是9,Symbol为”Escape” ,准备替换为WinKey(就是那个Windows logo的按键),WinKey 的 keycode是115。

具体的做法是在用户的家目录下建立.Xmodmap 文件,里面输入以下代码,重启即可:

keycode 9 =WinKey
keycode 115 = Escape

用Fn键替换:

keycode 9 = XF86WakeUp
keycode 151 = Escape

用右Control键替换:

remove Control = Control_R
keycode 9 = Control_R
keycode 105 = Escape
add Control = Control_R

~~~~

Leave a Reply