在X11下没有按键绑定的情况下如何以简单的方式禁用Caps Lock?

在X11下没有按键绑定的情况下如何以简单的方式禁用Caps Lock?

我通常使用脚本禁用 Caps Lock 和相应的修饰符,使用xmodmap.一切都很好。

但有时,由于某种未知原因,大写锁定键处于活动状态。由于没有绑定任何键Caps_Lock,也没有绑定切换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'它在禁用大写锁定效果方面效果很好。另一个答案中发布的 xkb_unlock.c 代码执行类似的操作。但遗憾的是,在我的现代 Linux 发行版上,这不再起作用。您需要使用setxkbmap, 而不是xmodmap

setxkbmap -option caps:none

奇迹般有效。

相关内容