我正在尝试强制开启大写锁定。xset
对我不起作用,所以我试图使用setleds
.
在图形控制台中,此命令返回:
> LANG=C setleds -L +caps
KDGKBLED: Inappropriate ioctl for device
Error reading current flags setting. Maybe you are not on the console?
Run Code Online (Sandbox Code Playgroud)
在虚拟终端中,它起作用,但是效果是该虚拟终端本地的。据我了解,运行
> setleds -L +caps < /dev/tty1
Run Code Online (Sandbox Code Playgroud)
从虚拟终端(我的 X 服务器位于 tty1 上)应该可以工作。但是,这需要 root 访问权限。
有没有办法将命令发送到 X 服务器下的控制台,无论是来自所述 xserver 还是来自另一个 VT,而无需 root?
编辑:根据 Mark Plotnik 的建议,并根据此处找到的代码,我编写并编译了以下内容:
#include <X11/Xlib.h>
#include <X11/XKBlib.h>
#define SCROLLLOCK 1
#define CAPSLOCK 2
#define NUMLOCK 16
void setLeds(int leds) {
Display *dpy = XOpenDisplay(0);
XKeyboardControl values;
values.led_mode = …
Run Code Online (Sandbox Code Playgroud)