如何使用 xset 点亮大写锁定键的指示灯?

11

我写了一个小的fetchmail脚本,可以检查远程服务器并在有新邮件时播放音频文件。我还想在邮件可用时点亮其中一个键盘灯,但我遇到了问题。使用以下代码可以点亮滚动锁定灯:

/usr/bin/xset led named "Scroll Lock"

但是我不能以同样的方式点亮大写锁定键:

/usr/bin/xset led named "Caps Lock"

我曾尝试使用数字(1-6)来指定键,但尽管更改了神秘的“LED掩码”(可通过“xset q”查看),灯光却没有任何变化。

这是因为我已将我的Caps Lock键映射为另一个Ctrl键而导致的吗?

在~/.Xmodmap文件中,我写了:

keycode 66 = Control_L
clear Lock
add Control = Control_L

我不想切换大写锁定键,只想控制其指示灯。有没有方法可以做到这一点?

进一步解释

我在一个x86的Kubuntu Lucid机器上进行操作,但稍后将迁移到Debian。我以Python守护程序的非特权用户身份运行脚本。使用root身份运行相同的脚本无法正常工作,因为fetchmail是针对作为用户的自己进行配置的。最后,所有这些都在tmux会话中运行。

当我开始这个过程时,我了解到setleds,但它似乎仅限于非X会话中的终端。

以root身份登录并运行 'setleds -D +caps < /dev/tty7' 可行,但运行 'sudo setleds -D +caps < /dev/tty7' 则会给出权限被拒绝的错误。

对于我的应用程序,xset命令似乎非常完美,只是它拒绝更改大写锁定键的指示灯。


请描述您的配置:操作系统,计算机等。 - Foo Bah
好的,我的大写锁定键仍然是大写锁定键,并且运行xset led onxset -led on并没有打开它,即使文档说它应该打开所有LED。因此,我们可能可以排除按键重新映射的可能性。 - user719958
3
你的sudo命令执行失败是因为你没有将shell重定向与sudo一起使用。这样做就可以了...$ sudo sh -c 'setleds -D +caps < /dev/tty7' - John Eikenberry
4个回答

13

以root权限执行:

setleds -D +caps < /dev/console

有点技巧性,但对我来说有效 :)


1

5
已经完成了一半。你不能从 X 进行 setleds 操作。 - Xyon
@Xyon 据称它可以通过重定向输入来在 X 中工作,例如 _setleds -D +caps </dev/console_,请参见:https://superuser.com/a/380598/86828 - David Balažic

1

Caps Lock指示灯(不是功能)已关闭

for a in `ls -d /sys/class/leds/*caps*`;do echo 0 >$a/brightness;done

Caps Lock指示灯(不是功能键)点亮

for a in `ls -d /sys/class/leds/*caps*`;do echo 1 >$a/brightness;done

0

xset无需root权限

使用sed编辑一次/usr/share/X11/xkb/compat/ledcaps即可。此更改将永久保留,不受任何重新启动的影响。

$ sudo sed -i 's|\!allowExplicit|allowExplicit|g' /usr/share/X11/xkb/compat/ledcaps

注销并重新登录后,可以使用以下命令控制 Caps Lock LED,无需任何 root 权限:

$ xset led named 'Caps Lock'
$ xset -led named 'Caps Lock'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接