TIP
Koma 内置了完整的 Hyprland 风格默认快捷键表(默认 inherit_default_binds = true)。即使尚未创建 ~/.config/koma/init.lua,启动后也能立即打开终端、平铺/浮动窗口、切换工作区与热重载配置。
启动模式(koma [OPTIONS])
Koma 会在打开任何显示设备、座席或 DRM 节点之前完成纯参数解析:
| 启动参数 | 后端与行为 | 典型场景 |
|---|---|---|
koma --winit |
通过 Smithay Winit 后端在现有 Wayland/X11 会话中开窗嵌套运行 | 在 Hyprland / Sway / GNOME 中安全调试配置 |
koma --tty |
通过 libseat(seatd/logind)、udev、DRM/KMS 与 libinput 直接接管 Linux VT |
裸机 tty 启动或隔离 QEMU/KVM virtio-vga 冒烟测试 |
koma --session |
登录会话模式(koma-session、greetd、systemd --user) |
自动导入 WAYLAND_DISPLAY、DISPLAY、XDG_CURRENT_DESKTOP=koma、XDG_SESSION_TYPE=wayland、KOMA_INSTANCE_SIGNATURE 至 systemd --user 与 D-Bus,并向 $NOTIFY_SOCKET/$NOTIFY_FD 发送 READY=1 |
koma --headless-check |
离线结构与版本/状态机自检 | CI、打包校验与安装后冒烟检查 |
--spawn <CMD> |
就绪后启动指定进程 | 如 koma --winit --spawn foot 或 koma --tty --spawn ghostty |
-c, --config <PATH> |
覆盖默认 $XDG_CONFIG_HOME/koma/init.lua 路径 |
测试临时或备用 Lua 配置 |
NOTE
不显式指定后端时,若检测到 WAYLAND_DISPLAY 或 DISPLAY(非 --session 模式)则自动选择 --winit,否则选择 --tty。收到 SIGTERM、SIGINT 或 SIGHUP 时会执行干净退出(返回码 0)并清理运行时套接字。
内置默认快捷键(Mod:TTY 下为 Super,嵌套 Winit 下为 Alt)
| 组合键 | 绑定动作 | 说明 |
|---|---|---|
Mod + Return |
spawn({ "ghostty" }) |
启动默认终端 |
Mod + Q |
window.close() |
关闭当前聚焦窗口 |
Mod + V |
window.float_toggle() |
切换窗口浮动状态 |
Mod + F |
window.fullscreen_toggle() |
切换全屏 |
Mod + P |
window.pseudotile_toggle() |
切换 Dwindle 伪平铺 |
Mod + E |
dwindle.toggle_split() |
切换 Dwindle 水平/垂直分割方向 |
Mod + H / J / K / L |
focus.left/down/up/right() |
按方向移动焦点 |
Mod + Shift + H / J / K / L |
window.move_direction(...) |
按方向移动或交换窗口 |
Mod + 1..9 |
workspace.focus("1".."9") |
切换至工作区 1–9 |
Mod + Shift + 1..9 |
window.move_to_workspace("1".."9") |
将当前窗口移动至工作区 1–9 |
Mod + R / Mod + Ctrl + R |
scrolling.switch_preset_column_width() |
正向/反向循环切换滚动列预设宽度 |
Mod + Ctrl + Shift + R |
scrolling.switch_preset_window_height() |
循环切换滚动列窗口高度预设 |
Mod + C / Mod + M |
scrolling.center_column() / maximize_column() |
居中或最大化当前滚动列 |
Mod + W |
scrolling.toggle_column_tabbed_display() |
切换当前列多窗口标签页模式 |
Mod + Comma / Mod + Period |
scrolling.consume_window_into_column() / expel_window_from_column() |
并入当前列或从当前列拆出 |
Mod + BracketLeft / BracketRight |
scrolling.consume_or_expel_window_left/right() |
向左或向右并入/拆出列 |
Mod + S / Mod + Shift + S |
scratchpad.toggle() / move_window() |
呼出/隐藏暂存区或将窗口移入暂存区 |
Mod + Tab |
overview.toggle() |
打开/关闭 koma-overview 全局工作区概览 |
Mod + MouseLeft / MouseRight |
window.drag_move() / drag_resize() |
鼠标拖拽移动或缩放窗口 |
Mod + WheelScrollDown / Up |
workspace.focus_next() / focus_prev() |
滚轮切换工作区(150 ms 防抖) |
Mod + WheelScrollLeft / Right |
deck.cycle_prev() / cycle_next() |
滚轮在 Deck/Stash 间轮换窗口(150 ms 防抖) |
Mod + Shift + R |
compositor.reload_config() |
热重载 init.lua |
Mod + Shift + E |
compositor.quit() |
安全退出合成器 |
Mod + G(人类抢占屏障) |
立即人类抢占 | < 1 ms 吊销智能体写租约并触发 4091 ERR_HUMAN_PREEMPTED |
全局概览与一键熔断(Mod + Tab / Mod + G)
- 全局空间概览(
koma-overview):默认绑定为Mod + Tab(若习惯Mod + O,可在init.lua中添加koma.bind("Mod + O", koma.act.overview.toggle()))。通过koma-admin.sock读取scene.inventory渲染各工作区缩略网格。 - 人类优先急停(
Mod + G):按下Mod + G或产生真实物理键鼠输入会立即暂停智能体在受管工作区上的执行租约,防止人与智能体抢夺焦点或指针。
借助 xwayland-satellite 运行传统 X11 应用
Koma 不在 Ring 0 合成器内直接内嵌 Xwayland,而是通过外部无根 xwayland-satellite 按需隔离兼容:
koma.xwayland({
enabled = true,
-- path = "/usr/bin/xwayland-satellite", -- 可选:显式指定二进制路径
isolate_agent_workspaces = true, -- 禁止 X11 客户端接入智能体无头工作区
})