动力
Linux缺乏一个好的按键重映射解决方案。为了达到满意的效果,需要使用多种工具(如xcape、xmodmap),最终结果往往局限于特定环境(X11)。keyd试图通过提供一个灵活的全系统守护进程来解决这个问题,该守护进程使用内核级输入原语(evdev、uinput)重新映射按键。
关于v2的说明
自首次发布以来,配置格式经历了几次迭代。对于从v1迁移配置的用户,最好重新阅读手册页。
另请参阅:更新日志。
目标
特性
keyd具有几个独特的功能,其中许多传统上只在自定义键盘固件如QMK中才能找到,还有一些是keyd独有的。
一些更有趣的功能包括:
- 层(支持混合修饰键)。
- 按键重载(点击/按住不同行为)。
- 特定键盘配置。
- 即时重映射(不再需要刷写:))。
- 便于脚本编写和显示服务器无关的应用程序重映射的客户端-服务器模型。(目前支持X、sway和gnome(wayland))。
- 全系统配置(在VT中也可工作)。
- 对修饰键重载的一流支持。
- Unicode支持。
keyd适合以下人群:
- 想要尝试自定义层(即自定义shift键)和单次修饰键的人。
- 想在同一台机器上使用多个具有不同布局的键盘的人。
- 想重新映射
C-1
而不破坏修饰键语义的人。 - 想要易于理解的键盘配置格式的人。
- 喜欢遵循Unix哲学的小型守护进程的人。
- 想把控制键和Esc键放在上帝本来就想放的地方的人。
- 希望能够切换到VT调试某些东西而不破坏键盘映射的人。
keyd不是:
- 一个用于编程单个按键按下/松开事件的工具。
依赖项
- 您喜欢的C编译器
- Linux内核头文件(大多数系统上已存在)
可选
- python(用于应用程序特定的重映射)
- python-xlib(仅用于X支持)
- dbus-python(仅用于KDE支持)
安装
*注意:*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]
# 将大写锁定键映射为按下时为Esc,按住时为Ctrl。
capslock = overload(control, esc)
# 将Esc键重新映射为大写锁定
esc = capslock
可以使用keyd monitor
命令获取按键名称。请注意,当keyd运行时,此命令的输出将对应于keyd的输出。可以通过先停止keyd然后运行该命令来查看原始输入事件。有关更多详细信息,请参阅手册页。
-
运行
sudo keyd reload
重新加载配置集。 -
查看手册页(
man keyd
)以获取更全面的说明。
配置错误将出现在日志输出中,可以使用系统的服务管理器以通常的方式访问(例如sudo journalctl -eu keyd
)。
注意:错误的配置文件可能会导致您的机器无法使用。如果您发现自己处于这种情况,特殊按键序列backspace+escape+enter
应该会导致keyd终止。
一些鼠标(如罗技MX Master)能够发出按键信号,因此会被通配符ID匹配。可能需要显式地将这些设备列入黑名单。
应用程序特定重映射(实验性)
-
将自己添加到keyd组:
usermod -aG keyd <用户名>
-
填写
~/.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
除非您正在运行Gnome,否则您可能想在显示服务器初始化逻辑中(例如~/.xinitrc)添加keyd-application-mapper -d
。
有关更多详细信息,请参阅手册页。
单板计算机支持
通过usb-gadget对单板计算机(SBC)的实验性支持已经添加,由Giorgi Chavchanidze提供。
详情请参见usb-gadget.md。
软件包
一些发行版也存在第三方软件包。如果您希望将您的软件包添加到列表中,请提交PR。这些软件包由社区成员维护,我们不对其承担个人责任。
Alpine Linux
Arch
Arch Linux软件包由Arch打包者维护。
Debian
实验性的keyd
和keyd-application-mapper
软件包可以在正在进行中的Debian软件包仓库的CI构建工件中找到:
- amd64(64位)
- i386(32位) 任何愿意审核Debian化工作并赞助其上传的Debian开发者欢迎联系@rhansen(另见Debian ITP bug)。
Fedora
COPR软件包由@alternateved维护。
openSUSE
opensuse软件包由@bubbleguuum维护。
使用sudo zypper in keyd
可轻松安装。
Ubuntu
实验性的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
这将重载大写锁定键,使其同时具有Escape(轻击时)和Control(按住时)的功能,并将所有修饰键重新映射为"一次性"键。因此,要输出字母A,您现在只需轻击Shift然后按a,而不必一直按住它。最后,它将插入键重新映射为S-insert(在X11上粘贴)。
常见问题
xmodmap/setxkbmap/*呢?
xmodmap及类似工具是显示服务器级别的工具,功能有限。keyd是一个系统级解决方案,实现了高级功能,如分层和一次性修饰键。虽然一些X工具提供类似功能,但我不知道有什么比keyd更灵活的工具。
kmonad呢?
keyd是几年前编写的,目的是让我能够在我不断增长的键盘收藏上轻松尝试不同的布局。当时kmonad还不存在,像QMK这样的自定义键盘固件(启发了keyd)是获得类似功能的唯一方式。我在发布keyd后才知道kmonad。虽然kmonad是一个不错的项目,有类似的目标,但它采用了不同的方法和设计理念。
值得注意的是,keyd完全用C语言编写,考虑到性能和简单性,可能永远不会像kmonad(可用Haskell扩展)那样可配置。话虽如此,它在不到2000行C代码中提供了(作者认为)最有价值的功能,同时提供了简单的语言无关的配置格式。
为什么keyd不实现功能X?
如果您觉得缺少什么或发现bug,欢迎在github上提出问题。keyd有一个极简主义(但合理的)设计理念,有意省略某些功能(例如以root身份执行任意可执行文件)。已存在于QMK等自定义键盘固件中的功能是很好的包含候选。
贡献
参见CONTRIBUTING。 IRC频道:oftc上的#keyd