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ウィンドウマネージャを使用してこれらのフラグを維持する方法がわかりません。上記の解決策は正常に動作します。

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

答え2

2つの可能性:

1).xinitrc非実行 - xinit、startx、および他のいくつかのメソッドはそれを使用してXセッションを開始しますが、普遍的にはサポートされていません。これを実行していないディスプレイマネージャを使用している可能性があります。 .xinitrcにいくつかのコンテンツを追加すると、そのようなケースであることtouch /tmp/xinitrc-was-runを確認するのに役立ちます。

2) Xorgは、接続されているクライアントが存在しない場合、自動的にデフォルト設定にリセットされます。ウィンドウマネージャまたは他のエントリが実行される前に.xinitrcが完了すると、xmodmapまたはsetxkbmapの変更は失われます。

定義されたXKBオプションを使用する場合は、Xorgが起動するたびに設定を変更するためにプログラムを実行する必要はなく、Xorgに正しい設定で起動するように指示するだけです。たとえば、Ctrl-Alt-Backspaceを有効にしてXserverを終了するには、次の/etc/X11/xorg.conf.d/90-zap.confファイルをインストールしました。

# This configuration snippet enables the Ctrl-Alt-Backspace server kill key
# 
# To use it, link or copy into /etc/X11/xorg.conf.d/
#
# Note that only the last XkbOptions setting seen for a device will be used,
# so to use multiple options, copy this file and add options into the Option
# string, such as "terminate:ctrl_alt_bksp,ctrl:swapcaps"

Section "InputClass"
    Identifier "keyboard zap by default"
    MatchIsKeyboard "on"

    Option "XKbOptions" "terminate:ctrl_alt_bksp"
EndSection

これについての詳細は、X.Orgのドキュメントで確認できます。https://www.x.org/releases/X11R7.7/doc/xorg-docs/input/XKB-Config.html

答え3

XkbOptions を X11 構成ファイルに入れることができます。

たとえば、CapsLockとEscapeを置き換えるには、次の方法を使用します/etc/X11/xorg.conf.d/00-keyboard.conf

# Written by systemd-localed(8), read by systemd-localed and Xorg. It's
# probably wise not to edit this file manually. Use localectl(1) to
# instruct systemd-localed to update it.
Section "InputClass"
    Identifier "system-keyboard"
    MatchIsKeyboard "on"
    Option "XkbLayout" "en"
    Option "XkbOptions" "caps:swapescape"
EndSection

GNOMEを実行している場合は、次の点に注意してください。

GNOME は gnome-settings-daemon を使用してキーボード構成を管理します。キーボード管理者は GSettings を使用してキーボード設定を保存し、初期設定では xkb 設定のみを使用します [...]

次のコマンドを使用して設定をクリーンアップできます。

   gsettings reset org.gnome.desktop.input-sources xkb-options 
   gsettings reset org.gnome.desktop.input-sources sources

再ログインした後、システムのデフォルト値を復元する必要があります。

バラよりここ

関連情報