X11でキーバインドなしでCaps Lockを簡単に無効にする方法は?

X11でキーバインドなしでCaps Lockを簡単に無効にする方法は?

私は通常スクリプトを使ってCaps Lockとその修飾子を無効にしますxmodmap。 。

ただし、不明な理由でCaps Lockキーがアクティブになることがあります。バインドされたキーや修飾子を切り替えるキーがCaps_Lockないため、Lockキーマップをリセットしてキーを押してから目的の設定に再マップしないと、Caps Lockをオフにすることはできません。

だから:キーを再マップせずに操作を実行するためにキーをバインドせずにCaps Lock(現在有効)を無効にするにはどうすればよいですか?

状態を設定するコマンドラインツールですか?

興味のある人のために、私のスクリプトがキーを押して誤ってCaps Lockを有効にすることを無効にする方法は次のとおりです(私は意図的に有効にしません)。

#!/bin/sh
# I never want to use Caps_Lock.  Make Caps_Lock another Control_L...
xmodmap -e "remove Lock = Caps_Lock" 2> /dev/null
xmodmap -e "keysym Caps_Lock = Control_L" 2> /dev/null
xmodmap -e "add Control = Control_L" 2> /dev/null

答え1

私はこれを行うことができるユーティリティについては分かりませんが(おそらくxdotool key Caps_Lock?を除く)、これまでこの小さなプログラムをコンパイルするために使用できますcc xkb_unlock.c -s -lX11 -o ./xkb_unlock(libcおよびxorg開発パッケージとともにコンパイラがインストールされている場合)。簡単です./xkb_unlock

xkb_unlock.c

#include <X11/Xlib.h>
#include <X11/XKBlib.h>
#include <err.h>
#include <stdlib.h>

int main(void){
        Display *dpy;
        if(!(dpy = XOpenDisplay(0)))
                errx(1, "cannot open display '%s'", XDisplayName(0));
        XkbLockModifiers(dpy, XkbUseCoreKbd, 0xff, 0);
        XSync(dpy, False);
}

答え2

xmodmap -e 'clear Lock'Caps Lock エフェクトを無効にするために長年にわたってうまくいきました。他の答えに投稿されたxkb_unlock.cコードも同様のことをします。しかし、残念ながら、最新のLinuxディストリビューションではこれはもう機能しません。setxkbmap代わりに、以下を使用する必要がありますxmodmap

setxkbmap -option caps:none

奇跡的に動作します。

関連情報