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

기적적으로 작동합니다.

관련 정보