我正在尝试研究 shell 脚本来解决一个两年多来没有得到解决的 Wayland/Mutter 小错误。我对 shell 脚本完全不熟悉,但我认为这应该是可能的。
问题在于,在 Wayland 上,用 LED 指示键盘布局的 xkb 选项无法正常工作。它在第一个布局开关上工作,打开 LED,但随后停止工作,使 LED 始终打开。
所以我的想法是有一个脚本,可以在按下特定键(在我的例子中为 CapsLock)时检查系统 LED 文件的内容,并将其更改为相反的值。逻辑如下:
listen to CapsLock and upon keypress
do cat /sys/class/leds/input7::capslock/brightness
if cat returns 0
then echo 1 > /sys/class/leds/input7::capslock/brightness
if cat returns 1
then echo 0 > /sys/class/leds/input7::capslock/brightness
wait for next CapsLock keypress
我擅长从示例中学习东西,但我在网上找不到相关信息。我想我只是不知道如何正确表达以获得相关结果。因此,非常感谢任何正确方向的提示和指示!
更新:
我创建了一个 shell 脚本,根据 LED 的当前状态打开和关闭 LED。如何让它在每次按下 CapsLock 时执行?
#!/bin/bash
led=`cat /sys/class/leds/input7::capslock/brightness`
if [[ $led = "1" ]]
then
echo 0 > /sys/class/leds/input7::capslock/brightness
else
echo 1 > /sys/class/leds/input7::capslock/brightness
fi
更新2:
显然,我使 shell 脚本可执行,将其移动到/usr/local/bin/
,并将其添加到文件中,/etc/sudoers.d/
以允许它无需密码即可运行。
UPD3
我注意到ìnput
目录结构中的数字在重新启动之间可能会发生变化,因此我修改了脚本以解决这一问题。
#!/bin/bash
led=`cat /sys/class/leds/input?::capslock/brightness`
file=`ls /sys/class/leds/input?::capslock/brightness`
if [[ $led = "1" ]]
then
echo 0 > $file
else
echo 1 > $file
fi
现在我需要在每次按下 Caps Lock 时执行此操作。
UPD4:
也许我应该尝试捕获实际的键盘布局更改事件而不是 CapsLock 按下?这种方式将更加通用,并且允许 LED 指示器显示替代布局,而不管用于切换布局的快捷方式如何。有没有办法监控此类事件?