运行环境: archlinux wayland(swaywm).
经过测试通过执行:
brightnessctl --device='input3::scrolllock' set 1
但是 由于sway 的某些问题导致亮了之后直接关闭. 经过查找issues 得到最终回答 sway/issues/5342
但是经过粗读 wlroot 只能解决灯不灭
故而通过另一个issues sway/issues/6987 获得了基于sway 1.7分支的 PR. 经过测试不符合预期效果
于是接着修改wlroot. 当修改wlroot 后,可以正常使用键盘灯. 解决方案如下:
1. 通过使用脚本 凑合
安装python-libinput 项目的examples/led-toggle.py ,实现了led 切换. 通过以下patch:
diff --git a/examples/led-toggle.py b/examples/led-toggle.py
index da81f0f..db51a3a 100755
--- a/examples/led-toggle.py
+++ b/examples/led-toggle.py
@@ -2,7 +2,7 @@
import libevdev
import sys
-
+import time
def toggle(path, ledstr):
ledmap = {
@@ -31,18 +31,10 @@ def toggle(path, ledstr):
print('{} {}'.format(ledstr, 'on' if state else 'off'))
while True:
- for e in d.events():
- if not e.matches(key):
- continue
-
- if not e.value:
- continue
-
- state = not state
- d.set_leds([(led, state)])
- print('{} {}'.format(ledstr, 'on' if state else 'off'))
-
-
+ state = 1
+ d.set_leds([(led, state)])
+ time.sleep(1)
+
if __name__ == "__main__":
if len(sys.argv) < 3:
print("Usage: {} /dev/input/eventX {{numlock|capslock|scrolllock}}".format(sys.argv[0]))
获得一个: 每输入一次按键便会闪烁一次的程序. 如果要求不是很高 可以日常使用了
2. 修改wlroot 极品
经过编译
git clone https://gitlab.freedesktop.org/wlroots/wlroots.git
git checkout 0.15.1
arch-meson -D examples=false build
ninja -C build/
通过在keyboardledupdate()中加入代码: leds |= 4; 可以获得一个永远常亮,无法正常关闭的键盘 并不是很好用, 弃用.
经过了粗读代码,发现可以通过:加一个变量(ledsstate)进行判定leds, 是否改变再执行刷新led. 通过以下patch:
diff --git a/types/wlr_keyboard.c b/types/wlr_keyboard.c
index c54e33c..b941399 100644
--- a/types/wlr_keyboard.c
+++ b/types/wlr_keyboard.c
@@ -11,7 +11,7 @@
#include "util/array.h"
#include "util/shm.h"
#include "util/signal.h"
-
+uint32_t leds_state=0;
void keyboard_led_update(struct wlr_keyboard *keyboard) {
if (keyboard->xkb_state == NULL) {
return;
@@ -24,6 +24,11 @@ void keyboard_led_update(struct wlr_keyboard *keyboard) {
leds |= (1 << i);
}
}
+
+ if (leds_state == leds) {
+ return;
+ }
+ leds_state = leds;
wlr_keyboard_led_update(keyboard, leds);
}
通过git apply led.patch 应用补丁. 将编译好的so 放入系统内:
#将so 脱光
strip build/libwlroots.so.10
#放入/usr/lib/ (如果你不知道是做什么,请不要随意操作)
sudo cp -i build/libwlroots.so.10 /usr/lib/libwlroots.so.10
然后重新执行:sway 命令 进入sway.
接下来就可以通过:
#开启 input 可以手动指定'*::scrollloc'代表所有键盘的"scrolllock led" 都会设置
brightnessctl --device='*::scrolllock' set 1
#关闭
brightnessctl --device='*::scrolllock' set 0
在.config/sway/config 配置文件中加入键绑定:
bindsym $mod+F9 exec brightnessctl --device='*::scrolllock' set 1
bindsym $mod+F10 exec brightnessctl --device='*::scrolllock' set 0
3. 修改sway (无效方法) 糟糕
获取 sway-scroll-lock 源码 为了与官方包一致,查看并应用仓库内的patch
sed -i "s/branch \\\'@1@\\\'/Arch Linux/g" meson.build
patch -p1 < ../1c368fbb5fcd8fb67040bcc12bd71c7fbf119e97.diff
arch-meson build -D sd-bus-provider=libsystemd -D werror=false -D b_ndebug=true
ninja -C build
sudo mv -i /usr/bin/sway sway222 #如果不知道在做什么.那么就不要操作
sudo cp build/sway/sway /usr/bin/sway
替换系统内的sway
测试无效
离线