Linux 缺乏一个好的按键重映射解决方案。为了获得满意的结果,需要使用多种工具(例如 xcape、xmodmap),最终结果通常与指定的环境(X11)相关。 keyd 试图通过提供一个灵活的系统范围守护进程来解决这个问题,该守护进程使用内核级输入原语(evdev、uinput)重新映射键。
自第一个版本以来,配置格式已经经历了多次迭代。对于那些从 v1 迁移配置的人,最好重新阅读手册页。
另请参阅:变更日志。
keyd 具有几个独特的功能,其中许多功能传统上仅在 QMK 等自定义键盘固件中才能找到,还有一些是 keyd 独有的。
一些更有趣的包括:
C-1
。注意: master 作为开发分支,版本之间偶尔可能会出现问题。版本已标记,并且应被视为稳定。
git clone https://github.com/rvaiya/keyd
cd keyd
make && sudo make install
sudo systemctl enable keyd && sudo systemctl start keyd
安装并启动 keyd (例如sudo systemctl enable keyd
)
将以下内容放入/etc/keyd/default.conf
中:
[ids]
*
[main]
# Maps capslock to escape when pressed and control when held.
capslock = overload(control, esc)
# Remaps the escape key to capslock
esc = capslock
可以使用keyd monitor
命令获取键名称。请注意,当 keyd 运行时,此命令的输出将与 keyd 的输出相对应。首先停止 keyd 然后运行命令可以看到原始的输入事件。有关更多详细信息,请参阅手册页。
运行sudo keyd reload
以重新加载配置集。
请参阅手册页 ( man keyd
) 以获取更全面的描述。
配置错误将出现在日志输出中,并且可以使用系统的服务管理器(例如sudo journalctl -eu keyd
)以常规方式进行访问。
注意:错误的配置文件可能会导致您的计算机无法使用。如果您发现自己处于这种位置,特殊的按键序列backspace+escape+enter
应该会导致 keyd 终止。
某些鼠标(例如 Logitech MX Master)能够发出按键,因此可以通过通配符 ID 进行匹配。可能有必要明确将这些列入黑名单。
将您自己添加到 keyd 组中:
usermod -aG keyd <user>
填充~/.config/keyd/app.conf
:
例如
[alacritty]
alt.] = macro(C-g n)
alt.[ = macro(C-g p)
[chromium]
alt.[ = C-S-tab
alt.] = macro(C-tab)
跑步:
keyd-application-mapper
您可能希望将keyd-application-mapper -d
放在显示服务器初始化逻辑中的某个位置(例如 ~/.xinitrc),除非您正在运行 Gnome。
有关更多详细信息,请参阅手册页。
Giorgi Chavchanidze 通过 usb-gadget 添加了对单板计算机 (SBC) 的实验性支持。
有关详细信息,请参阅 usb-gadget.md。
某些发行版的第三方软件包也存在。如果您希望将您的添加到列表中,请提交 PR。这些由社区成员善意维护,个人不承担任何责任。
keyd 包由@jirutka 维护。
Arch Linux 软件包由 Arch 打包者维护。
实验性的keyd
和keyd-application-mapper
包可以在正在进行的 Debian 包存储库的 CI 构建工件中找到:
我们鼓励任何愿意审查 debian 化工作并赞助其上传的 Debian 开发人员联系@rhansen(另请参阅 Debian ITP bug)。
COPR 包由@alternateved 维护。
opensuse 包由@bubbleguuum 维护。
使用sudo zypper in keyd
轻松安装。
实验性的keyd
和keyd-application-mapper
包可以在ppa:keyd-team/ppa
存档中找到。
如果您希望帮助维护此 PPA,请联系@rhansen。
[ids]
*
[main]
leftshift = oneshot(shift)
capslock = overload(symbols, esc)
[symbols]
d = ~
f = /
...
许多用户可能对充分利用 keyd 不感兴趣。对于那些寻求简单的生活质量改善的人,我可以推荐以下配置:
[ids]
*
[main]
shift = oneshot(shift)
meta = oneshot(meta)
control = oneshot(control)
leftalt = oneshot(alt)
rightalt = oneshot(altgr)
capslock = overload(control, esc)
insert = S-insert
这会重载大写锁定键,使其同时充当转义键(轻按时)和控制键(按住时),并将所有修饰符重新映射到“一次性”键。因此,要生成字母 A,您现在只需点击 Shift,然后点击 a,而不必按住它。最后它将 insert 重新映射到 S-insert(粘贴到 X11 上)。
xmodmap 和朋友是功能有限的显示服务器级工具。 keyd 是一个系统级解决方案,它实现了分层和一次性修改器等高级功能。虽然一些 X 工具提供了类似的功能,但我不知道有什么东西像 keyd 一样灵活。
keyd 是几年前编写的,让我可以在我不断增长的键盘收藏上轻松尝试不同的布局。当时 kmonad 还不存在,像 QMK(它启发了 keyd)这样的定制键盘固件是获得类似功能的唯一方法。我在发布 keyd 后才知道 kmonad。虽然 kmonad 是一个具有相似目标的优秀项目,但它采用了不同的方法并具有不同的设计理念。
值得注意的是 keyd 完全用 C 编写,考虑到性能和简单性,并且可能永远不会像 kmonad (在 Haskell 中可扩展)那样可配置。话虽如此,它在不到 2000 行 C 代码中提供了(在作者看来)最有价值的功能,同时提供了简单的与语言无关的配置格式。
如果您觉得缺少某些内容或发现错误,欢迎在 github 上提出问题。 keyd 具有极简主义(但理智)的设计理念,故意省略某些功能(例如,以 root 身份执行任意可执行文件)。自定义键盘固件(例如 QMK)中已经存在的内容是包含在内的良好候选者。
请参阅贡献。 IRC 频道:oftc 上的 #keyd