web-dev-qa-db-ja.com

X11でキャップロックを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に何かが必要な場合は、両方のファイルと必要なすべてのコンテンツを表示してください(最後に何かを追加するように指示することもできますが、&または同様のものが必要な場合は、教えてください)。

9
ethanmad

編集:役立つユーザーが指摘したように、私の最初の解決策は更新後も存続しません。コメントの彼の解決策はうまくいくはずです。代わりにswap Caps Lock and Escapeを使用する場合は、.xinitrcまたはi3 configから次のコマンドを追加することをお勧めします。

.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が~/.xinitrcを読み込まないという同様の問題が発生した後、xmodmapを完全に回避し、/usr/share/X11/xkb/symbolsに移動して、key => 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ウィンドウマネージャーでこれらのフラグをオンに保つ方法を理解できませんでした。上記のソリューションは正常に動作するはずです。

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

4
capsloch

2つの可能性:

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

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 を参照してください。

1
alanc