按下 Caps Lock 时运行 shell 脚本(在 Wayland 上)

按下 Caps Lock 时运行 shell 脚本(在 Wayland 上)

我正在尝试研究 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 指示器显示替代布局,而不管用于切换布局的快捷方式如何。有没有办法监控此类事件?

相关内容