xmodmap を使用して Caps Lock を再マップすると機能しません。

xmodmap を使用して Caps Lock を再マップすると機能しません。

私はプログラムするときに次のキーを変更するのが好きです。

EscTab CtrlCapsLock

私は~/.xmodmap次のような再マッピングを指定しました。

keycode 66 = Control_L
keycode 37 = Caps_Lock
keycode 23 = Escape
keycode 9 = Tab

そして鍵交換は問題になりません。しかし、そうではなく交換すると、両方のキーがEscapeTabCaps_LockControl_LCaps_Lock

何をしようとしても、ControlキーはCaps_Lock(キーコード66)に割り当てられません。から出るとキーは割り当てられませんが、keycode 66 =または で割り当てると機能しません。しかし、例えば別のキーを割り当てると、そのキーも割り当てられるので問題はありません。Control_LControl_Rkeycode 66 = Tab

xmodmap は、Caps Lock と Control キーを変更したくないようなものです。とても苦しいです。どんな助けや指示でも役に立ちます。

PS:私はArchlinuxを使っています。

答え1

これxmodmap(1) のマニュアルページ具体的な例があります

   !
   ! Swap Caps_Lock and Control_L
   !
   remove Lock = Caps_Lock
   remove Control = Control_L
   keysym Control_L = Caps_Lock
   keysym Caps_Lock = Control_L
   add Lock = Caps_Lock
   add Control = Control_L

しかし、あなたが始めたように終わりたいのであれば、少なくとも行removeadd追加する必要があるようです。

   remove Lock = Caps_Lock
   remove Control = Control_L
   keycode 37 = Caps_Lock
   keycode 66 = Control_L
   add Lock = Caps_Lock
   add Control = Control_L

この段落に基づいてそのようなことが起こっているようです。

   add MODIFIERNAME = KEYSYMNAME ...
           This adds all keys containing the given keysyms  to  the  indi‐
           cated  modifier  map.  The keysym names are evaluated after all
           input expressions are read to make it easy to write expressions
           to swap keys (see the EXAMPLES section).

修飾子の変更(Shift、Controlなど)は、実行後にのみ適用されるように聞こえます。

(論理的にはと同じremove

このkeycodeバージョンの利点は、冪等性であることです。つまり、xmodmapを複数回実行しても効果は変わりません。

答え2

緩く関連する答え:Caps Lockキーを左側のコントロールに再マップし、実際の左側のコントロールを変更しないでください。 xmodmapのマニュアルページでも解決策を提供します。

    keycode 66 = Control_L
    clear Lock
    add Control = Control_L

関連情報