X11でCaps Lockをescに永続的に再マップする方法は?

X11でCaps Lockをescに永続的に再マップする方法は?

エスケープのためにCaps Lockを再マッピングしたいです。X11から(つまり、物理的なCaps Lockボタンを押すとアプリケーションはescとして解釈され、escの動作は変わりません。)解決策X再起動で生き残らなければならないxmodmap と setxkbmap が許容されるソリューションです。(類似プログラムも同様です。)ソリューションが移植可能でドットファイルの一部になりたいので、GUIを扱いたくありません。より良い、より簡単で、より確実な解決策がない場合はお知らせください。しかし、私はDEを使用していないことに注意してください(i3wmを試してください)。

これまで私はxmodmapとsetxkbmapを試してみましたが、ほとんど成功しませんでした。

xmodmapを使った試みは次のとおりです。

# ~/.xinitrc
xmodmap ~/.xmodmap

そして

# ~/.xmodmap
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

コマンドラインから実行すると$ xmodmap ~/.xmodmap正常に動作し、必要に応じて動作します。問題は、xが再起動されるたびにリセットされることです。これがxinitrcが現れると予想される場所です。 xが起動してxmodmapコマンドが実行されるたびにロードする必要はありませんか?このコマンドがうまくいったら、ファイルから読み取ったときに何もしないのですか?

setxkbmapでいくつか試しましたが、何も機能しませんでした。以下の2つの試みは、ファイルに異なる時間に表示されます。

# ~/.xinitrc
setxkbmap -option caps:esc     # attempt 1
setxkbmap -option esc:nocaps   # attempt 2

どちらのコマンドもコマンドラインで認識できるものは何もしないので、私のコマンドが間違っているとします。私はこのソリューションが単一行であり、他のファイルのどれも必要としないので、このソリューションのアイデアが好きです。それがうまくいった場合。

無効な.xinitrcファイルが使用されましたか?私はstartxが~/.xinitrcからロードされることを知っています。

いくつかの中間ステップを混乱させないように、1行(ファイルに複数行が必要な場合)ではなくファイル全体を含めることができる可能な解決策を要求します。たとえば、.xinitrcのエントリと.xcapsrebindのエントリが必要な場合は、その2つのファイルと必要なすべてのコンテンツを表示します(最後にエントリを追加するように求めるメッセージも処理できますが、&または同様のエントリが必要な場合は、してください)。

ベストアンサー1

編集:ある有用なユーザーが指摘したように、私の元のソリューションは更新後も維持されません。コメントの彼の解決策はうまくいくでしょう。欲しいなら交換代わりに、.xinitrcまたはi3構成で次のコマンドを追加することをお勧めします。

.xinitrc:

xmodmap -e "clear lock"
xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
xmodmap -e "keycode 66 = Escape NoSymbol Escape"

i3設定ファイル(通常は.config/i3/configまたは.i3/configにあります)

# swap caps lock and escape
exec_always --no-startup-id xmodmap -e "clear lock"
exec_always --no-startup-id xmodmap -e "keycode 9 = Caps_Lock NoSymbol Caps_Lock"
exec_always --no-startup-id xmodmap -e "keycode 66 = Escape NoSymbol Escape"

私はこの質問がかなり古いことを知っていますが、まだこの問題を解決しようとしている人のために答えを追加できると思いました。

DEがロードされないのと同様の問題が発生した後、~/.xinitrcxmodmapを完全に回避し、/usr/share/X11/xkb/symbolskey => symbolマッピングを直接修正しました。

このために/usr/share/X11/xkb/symbols。ほとんどのキーボードではこのpcファイルが必要です。

ファイルを開いた後、EscapeキーとCaps_Lockキーを手動で切り替えました(結果は下に表示されます)。これは、X がハードウェアをキーシンボルにマップする方法に影響を与えるため、GNOME や i3 などを使用するかどうかにかかわらず動作するはずです。

私が生成したファイルの一部は次のとおりです。

default  partial alphanumeric_keys modifier_keys

xkb_symbols "pc105" {

    key <ESC>  {        [ Caps_Lock             ]       };

    // The extra key on many European keyboards:
    key <LSGT> {        [ less, greater, bar, brokenbar ] };

    // The following keys are common to all layouts.
    key <BKSL> {        [ backslash,    bar     ]       };
    key <SPCE> {        [        space          ]       };

    include "srvr_ctrl(fkey2vt)"
    include "pc(editing)"
    include "keypad(x11)"

    key <BKSP> {        [ BackSpace, BackSpace  ]       };

    key  <TAB> {        [ Tab,  ISO_Left_Tab    ]       };
    key <RTRN> {        [ Return                ]       };

    key <CAPS> {        [ Escape                ]       };
    key <NMLK> {        [ Num_Lock              ]       };

    key <LFSH> {        [ Shift_L               ]       };
    key <LCTL> {        [ Control_L             ]       };
    key <LWIN> {        [ Super_L               ]       };

    key <RTSH> {        [ Shift_R               ]       };
    key <RCTL> {        [ Control_R             ]       };
    key <RWIN> {        [ Super_R               ]       };
    key <MENU> {        [ Menu                  ]       };

これは私に魅力のように働きます。

関連文書を見てみると、EscapeやCaps Lockの交換など、特定のキーを切り替えるための一種のフラグが繰り返し参照され、部分的に実装されることがわかりました。私はこれがGnome Tweak Toolとsetxkbmapが使用していると思います。しかし、i3ウィンドウマネージャを使用してこれらのフラグを維持する方法がわかりません。上記の解決策は正常に動作します。

これが問題を解決することを願っています!

おすすめ記事