X11でキャップロックをescに恒久的に再マッピングする方法は?


9

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
.xinitrcsetxkbmap -option caps:escape
jasonwryan

1
動いxmodmapている.xinitrcはずです。それは私がすることです。何か変わったものをマッピングして、xを起動したときに実際に実行されていることを確認しますか?また、どのウィンドウマネージャー/デスクトップ環境を使用していますか?KDEは定期的にキーボードマッピングを「修正」し、指示はありません。デスクトップの設定をチェックして、xmodmap背後で何も実行されていないことを確認してください。
yellowantphil 2015

jasonwryan:.xinitrcの両方で試しました。うまくいきませんでした。コマンドラインから動作しました!だから始まりがあります。yellowantphilは正しいと思います- ~/.xinitrc実行されていません。私は今i3wmを使用しており、DEは使用していませんが、同じことをPantheonで試しました。私が知る限り、i3はxinitrcをいじったり、独自にロードしたりしません(ただし、私は初心者なので、何を知っていますか?)。
ethanmad 2015

あなたにも含まれるように試みることOption "XkbOptions" "caps:escape"X例えば、キーボード設定ファイル/etc/X11/xorg.conf.d/10-keyboard.conf
don_crissti

回答:


5

編集:役立つユーザーが指摘したように、私の最初の解決策は更新後も存続しません。コメントの彼の解決策はうまくいくはずです。代わりにCaps Lockと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ウィンドウマネージャーでこれらのフラグをオンに保つ方法を理解できませんでした。上記のソリューションは問題なく機能するはずです。

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


i3構成:exec --no-startup-id setxkbmap -layout whatever -variant whatever -option caps:escape
quixotic

システム...xkb/symbols/pcファイルへの変更は、次回xkeyboard-configまたはxkb-dataパッケージが更新されたときに上書きされます。
quixotic

1

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

これについて詳しくは、https: //www.x.org/releases/X11R7.7/doc/xorg-docs/input/XKB-Config.htmlのX.Orgドキュメントをご覧ください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.