我正在尝试使用 uinput(和 evdev)模拟输入,但我遇到了一个问题,即键码通常在 Linux 中由使用 XKB 的窗口系统解释,因此使用 XKB 键映射进行翻译。所以在德沃夏克键盘中,ecodes.KEY_S 变成了 o。有没有避免这种情况发生的好方法?我想要一个在 X11 和 Wayland 下都可以工作的解决方案,并且不受 XKB 键盘映射的后续更改或用户更改键盘组时的影响。
这是一个说明问题的简单程序:
#!/usr/bin/env python3
import evdev
fake = evdev.uinput.UInput()
def tap(key):
fake.write(evdev.ecodes.EV_KEY, key, 1)
fake.write(evdev.ecodes.EV_KEY, key, 0)
def xx():
tap(evdev.ecodes.KEY_A)
tap(evdev.ecodes.KEY_S)
fake.syn()
return True
xx()
fake.close()
使用 Dvorak 键盘映射输入“ao”而不是“as”。