当前位置:首页>Linux>我的 Linux 键盘流开发工作流:从 keyd 到下拉终端

我的 Linux 键盘流开发工作流:从 keyd 到下拉终端

  • 2026-10-11 05:32:22
我的 Linux 键盘流开发工作流:从 keyd 到下拉终端
我一直更偏向键盘流。
这里的键盘流,不是那种“绝对不用鼠标”的洁癖。鼠标仍然有它的位置,比如精细点击、拖拽、临时处理图形界面。只是对开发来说,很多动作并不值得我把手从键盘上移开:切窗口、滚页面、移动光标、切标签页、唤起终端、隐藏社交软件。这些动作出现得太频繁,一旦每次都要找鼠标,开发节奏就会被打断。
所以我现在在 Kubuntu 26.04 上的桌面工作流,核心目标很简单:把高频操作尽量收回键盘,把鼠标留给真正适合鼠标的场景。

keyd 是整个工作流的入口

我没有试图把每个软件都改造成 Vim 模式,而是在更底层用 keyd 做统一的键盘重映射。这样做的好处是,不管我在浏览器、IDE、终端还是微信里,很多基础动作都可以保持一致。
我的配置里有几个核心层。
第一个是 J 层。j = overload(j, j) 让 j 既可以正常输入,也可以在按住时变成一个功能层。在这个层里,我把方向键、Home、End、Backspace、Esc、标签页切换、按词左右跳转都放到了主键盘区。这样在写代码和浏览网页时,很多移动动作不需要去够方向键。
第二个是 Caps 层。Caps Lock 在我这里基本不再承担大小写切换,而是变成了系统操作入口。比如:
capslock = layer(caps)
在 Caps 层里,我放了关闭窗口、后退、鼠标左右键、窗口缩放、鼠标移动、页面滚动等操作。比如 Caps + n/m 是鼠标左键和右键,Caps + i/k/j/l 可以移动鼠标,Caps + u/o/h/; 可以上下左右滚动。
这不是为了证明“键盘可以替代鼠标”,而是为了覆盖那些很烦但又很常见的小动作。比如页面稍微滚一点、鼠标挪到旁边点一下、窗口调整到一个舒服的尺寸,这些动作如果都能在主键盘区完成,手感会连贯很多。
第三个是符号层和数字层。semicolon 层放了常用符号,numslayer 用主键区模拟数字小键盘。它们解决的是另一个问题:程序员输入符号和数字的频率很高,但默认键位并不总是顺手。

keyd 背后还有一套工具链

单看 keyd 配置,容易误以为所有事情都是 keyd 自己完成的。实际上它更像是入口,后面接着一套桌面自动化工具。
kdotool 是其中很关键的一环。它是 KDE 下类似 xdotool 的窗口控制工具,可以查询窗口、激活窗口、最小化窗口、调整窗口大小。我在 keyd 里用它做窗口管理,比如把当前窗口居中缩放到 85% 或 60%,也可以针对微信、ChatGPT PWA 这样的窗口做显示和隐藏。
但 keyd 服务通常是以 root 身份运行的,而 KDE 桌面窗口属于普通用户会话。这里就需要 run-as-user。这个脚本会拿到 Plasma 会话里的 DBUS_SESSION_BUS_ADDRESS,再用普通用户身份执行命令。没有这一步,很多桌面命令在 keyd 里直接调用会找不到正确的图形会话。
我还写了一个 toggle_minimize 脚本,用来在“激活窗口”和“最小化窗口”之间切换。比如社交软件不需要一直挂在眼前,但又要随时能看一眼,这种窗口就很适合绑定一个快捷键:按一下出现,再按一下隐藏。
另外,配置重载时我会用 notify-send 弹一个通知。这个细节很小,但对长期维护配置很有帮助。键盘配置一多,最怕的是改了以后不知道是否生效,给自己一个明确反馈可以少很多猜测。

我用 Codex 扩展了 keyd 的鼠标能力

这套工作流里最有意思的一点,是我后来用 Codex 辅助扩展了 keyd。
原本我考虑过用 ydotool 来模拟鼠标移动,配置里也还能看到旧方案的注释。但那种方式本质上是从 keyd 里再调用外部命令,链路更长,手感也不够自然。后来我改了 keyd,让它支持 mousemoveup、mousemovedown、mousemoveleft、mousemoveright 这些 token。这样鼠标移动就变成了 keyd 原生宏的一部分。
现在我的配置里可以直接写:
i = macro2(180, 15, mousemoveup)k = macro2(180, 15, mousemovedown)j = macro2(180, 15, mousemoveleft)l = macro2(180, 15, mousemoveright)
同时我还保留了一个 caps_slow 层,用 Shift 配合 Caps 进入更慢的鼠标移动速度。普通移动解决大范围挪动,慢速移动处理小范围微调。这比“完全不用鼠标”更实际,因为很多 GUI 软件终究还是有一些点击场景。
Codex 在这里的价值不是替我写一个神奇工具,而是帮我把一个已有工具补上自己真正需要的能力。它让我可以围绕自己的习惯改造系统,而不是只能接受软件默认给我的交互方式。

Yakuake 是我的桌面中枢

键盘流离不开一个随时可用的终端。我在 KDE 下用的是 Yakuake,下拉式终端。
它最大的好处是:终端不再是一个需要寻找、切换、管理的普通窗口,而是变成了桌面的一层。任何时候需要执行命令、查文件、跑脚本、问 Codex、看日志,我都可以直接把它拉下来。处理完再收回去,当前桌面布局不会被打乱。
这也缓解了 Linux 上 Codex 使用体验的一个遗憾。对我来说,Linux 上没有一个完全融入桌面的 Codex App 体验,确实不如有原生 App 那么顺手。但如果本来就习惯终端,影响没有想象中大。Yakuake 把终端变成了随叫随到的入口,Codex 也就自然融进了我的日常工作流。

Flatpak 负责日常应用

开发工具之外,我的一些常用社交和日常应用主要用 Flatpak 安装,比如微信、QQ、Telegram、飞书、腾讯会议,以及浏览器和 Obsidian 等。
我对 Flatpak 的期待不是“所有软件都完美”,而是它能提供相对统一的安装、更新和隔离方式。对于 Linux 桌面来说,社交软件往往是体验短板。能通过 Flatpak 稳定装起来,并且配合 keyd 做窗口唤起和隐藏,已经能满足我的主要需求。
我的 app.conf 里也针对不同应用做了适配。浏览器里 Caps + x 更像关闭当前标签页,JetBrains 系列里则要适配它自己的窗口和标签逻辑,微信窗口需要单独处理最小化,Yakuake 也有专门的快捷键映射。系统级键盘流要想好用,不能只靠一套全局规则硬套所有软件,必要时还是要按应用修补。

键盘流的重点不是炫技

这套配置看起来有点复杂,但它的目标其实很朴素:减少打断。
我并不追求“从此不碰鼠标”。鼠标仍然在桌面环境里很重要,尤其是处理图形界面、选择区域、拖拽文件的时候。真正值得优化的是那些高频、短促、重复的小动作。它们每次只浪费一点点注意力,但一天累积下来会很明显。
keyd 负责把按键变成统一入口,kdotool 和 run-as-user 负责打通 KDE 桌面,Yakuake 提供随时出现的终端,Flatpak 负责日常应用,Codex 则帮我把工具改造成更贴近自己的使用方式。
这就是我现在的 Linux 开发工作流。它不是一套标准答案,也不一定适合所有人。但是是我从windows迁移到Linux一年之后,一个相对比较舒服的工作流了,卡卡的win11真的让人难以忍受,以及各种广告推送。

最新文章

随机文章