2 个版本

使用旧的 Rust 2015

0.0.2 2017年11月7日
0.0.1 2017年9月22日

#1694 in 硬件支持

AGPL-3.0

49KB
1K SLoC

rusty-keys

linux 的 uinput 级键盘映射器,具有高级大小写锁定和换档键切换功能

这是我唯一知道能够实现此布局的键映射器
Unix Programmer's Dvorak

问题

如果您在 Linux 上映射过按键,您知道有控制台键映射(loadkeys)和 X 键映射(setxkbmap),还有像 SDL 和 Virtualbox 这样的东西直接抓取输入并忽略映射。最后,我想在按住 Ctrl 时恢复 QWERTY,这样 Ctrl+C 就可以像正常一样工作,而无需将所有程序重映射到 Ctrl+j。Linux 键映射也无法做到这一点。

解决方案

  1. 直接抓取键盘设备,这样我们才能从中读取事件。
  2. 使用 uinput 创建一个新的键盘输入设备,这对于运行在计算机上的任何东西来说都是相同的。
  3. 从真实设备读取 input_events,映射它们,发送到创建的设备。

这正是 rusty-keys 实现的解决方案,它在 ttys、X、virtualbox、运行 Windows 或任何其他东西的 X 上都有效,在 SDL 游戏中也会工作,因为它实际上在任何地方都创建了一个常规键盘。

如何运行

运行时,它将读取当前工作目录中的 keymap.toml 文件,参考示例并进行调整。

Usage: rusty-keys [options]

Options:
    -h, --help          prints this help message
    -v, --version       prints the version
    -d, --device DEVICE specify the keyboard input device file
    -c, --config FILE   specify the keymap config file to use

仅连接一个键盘
rusty-keys

多个键盘,目前必须指定一个
rusty-keys-d/dev/input/event0

查找所有合格的键盘设备,例如
grep-E'处理程序'|EV' /proc/bus/input/devices|grep-B1 120013 |grep-Eo 事件[0-9]+

对于使用 systemd 单元 with by-id 或 by-path

$ systemd-escape --template=[email protected] by-id/usb-04c8_USB_Keyboard-event-kbd
rusty-keys@by\x2did-usb\x2d04c8_USB_Keyboard\x2devent\x2dkbd.service

如何安装

许可证

目前为 AGPLv3,如果您对此有问题,请给我留言

注意

技术上这是对之前我使用过 3 年的 Python 程序 的重新实现。

依赖项

~3.5MB
~67K SLoC