別のキーを Esc として動作させる前に、変更する層を決めます。対象は、単一アプリ、現在の GNOME ユーザー、X11 セッション、特定の入力デバイス、Linux 仮想コンソール、またはマシン全体のいずれかです。範囲が広いほど、パスワード入力、画面ロック、アクセシビリティのナビゲーション、復旧のリスクが高まります。最も安全な既定方針は、物理 Esc を残し、通常のユーザーセッションで追加の Esc を一つだけ試し、ロールバックを確認してから永続化することです。
Table of Contents
1. まず最も狭い適用範囲を選ぶ
| 目的 | 優先する層 | 最初に行わないこと |
|---|---|---|
| Vim だけで Insert mode を抜けやすくする | アプリの組み込みキーまたはアプリ設定 | マシン全体のキーボードを変更する |
| Caps Lock を追加の Esc にする | GNOME ユーザー単位の標準 XKB option | Esc/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 の場合、setxkbmap、xmodmap、xev が示すのは最大でも Xwayland 境界までであり、ネイティブ Wayland アプリが同じ map を使う証明にはなりません。GNOME のユーザー単位 xkb-options はデスクトップセッションが適用します。ネイティブ Wayland、Xwayland、ロック画面を別々にテストします。
localectl はシステムの console/X11 既定値を示しますが、現在の GNOME ユーザーの最終構成とは限りません。個人の Vim 操作を解決するために localectl set-keymap や set-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 年原文の 9、115、151 は当時の特定 X11 環境の観測値であり、現在の設定定数ではありません。
6. Fn の hardware/firmware 境界
Fn 単独を押しても kernel、libinput、input-remapper に独立 event が出なければ、XKB や userspace が割り当てられる「Fn キー」はありません。機種によっては Fn と別のキーを KEY_BRIGHTNESSUP、KEY_VOLUMEUP、XF86WakeUp、通常の 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 を読みます。推奨順序:
- GUI を開き、対象のキーボードを明示的に選び、新しい preset を作る。
- 候補キーを一つだけ記録し、GUI autocomplete が示す
Escapeまたは対応名を output に選ぶ。古い keycode を手入力しない。 - Apply で一時的に inject するが、Autoload は有効にしない。
- 物理 Esc を残す。右 Ctrl を試すなら左 Ctrl を残す。キーボードナビゲーションが必要なら Tab を試さない。
- 通常テキスト、デスクトップ shortcut、必要なアプリで press/release を試す。パスワードを入力せず、画面をロックしない。
- 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 -pke と xmodmap -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. 検証マトリクス
| 確認項目 | 期待する証拠 | 失敗時の対応 |
|---|---|---|
| 元の物理 Esc | menu/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 が使える | 先に戻し、利用者が評価する |
| 入力ソース/Compose | switch と 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/inputaccess を与えず、未知の 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. 公式・プロジェクト資料
- libxkbcommon:XKB 概要と RMLVO options
- libxkbcommon:ユーザー設定と検索 path
- GNOME:キーボードと入力ソース
- GNOME:Tab・Super・Esc によるキーボードナビゲーション
- GNOME Orca:Caps Lock modifier
- GNOME gsettings-desktop-schemas:input-sources schema
- systemd:localectl 公式ソース文書
- systemd:公式 keyboard hwdb data と KEYBOARD_KEY
- Linux kernel:input event interface
- Linux kernel:EV_KEY などの event code
- Linux kernel:uinput virtual device
- libinput:debug tool
- input-remapper:project と install の境界
- input-remapper:Usage・Stop・autoload・privacy warning
- Vim:Insert mode の Escape 同等 command
資料の確認日は 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
~~~~
