kanshi 可以在热插拔时自动启用和禁用显示输出的配置文件。例如,当有扩展屏幕时,kanshi 可以自动关闭笔记本内置屏幕。
这是 autorandr 等工具在 Wayland 上的等效替代品。kanshi 可在支持 wlr-output-management 协议的 Wayland 混成器上使用
安装
安装正式版本 kanshi包 或开发版本 kanshi-gitAUR。
配置
基础配置
创建 kanshi 配置文件:
~/.config/kanshi/config
profile { output LVDS-1 disable output "Some Company ASDF 4242" mode 1600x900 position 0,0 } profile { output LVDS-1 enable scale 2 }
每个配置(profile)都由括号分隔,其包含几个输出指令(语法类似 sway-output(5))。当一个配置所列的所有输出(output)都已连接时,该配置就会启用。
swaymsg -t get_outputs
命令获取输出名称列表和其它信息。
进阶配置
为了易于管理多种配置 (如“仅笔记本内置屏幕”、“在家连接一个扩展屏”、“工作时连接两个扩展屏”等配置),您可定义配置里使用的输出的默认行为并为其分配别名。默认行为会应用到所有提到该输出的配置中。更多信息参见 kanshi(5)。
~/.config/kanshi/config
output "Dell Inc. DELL S2721DGF G52TR83" { mode 2560x1440@165.08 position 1280,0 scale 2 alias $HOME_1 } output "LG Display 0x058B Unknown" { mode 2560x1440@59.99800 position 0,0 scale 2 alias $INTERNAL } profile home_1 { output $INTERNAL disable output $HOME_1 enable }
注意 $INTERNAL 输出的名称的第三段是 UNKNOWN。这是因为 kanshi 需要三个字段(制造商,型号,序列号)都被填充,如果缺少一个则需要使用 UNKNOWN 代替。
您可使用 hyprctl monitors 等命令查询这些字段,其会输出这三个字段:
hyprctl monitors
make: LG Display model: 0x058B serial:
您还可以让您的工作流与 kanshi 进一步集成,使用 exec 以在配置启用时执行命令:
~/.config/kanshi/config
profile home_1 { output $INTERNAL disable output $HOME_1 enable exec uwsm app -- $HOME/.config/hypr/scripts/move-workspaces.sh "LG Display 0x058B" }
使用
执行命令:
$ kanshi
自动用法参见#使用 systemd 管理 kanshi。
提示和技巧
使用 systemd 管理 kanshi
按照 Sway#使用 systemd 管理仅用于 Sway 的守护程序 创建并启动 ~/.config/systemd/user/sway-session.target
(如果尚未创建)。
创建 kanshi.service
文件:
~/.config/systemd/user/kanshi.service
[Unit] Description=Dynamic output configuration for Wayland compositors Documentation=https://gitlab.freedesktop.org/emersion/kanshi BindsTo=sway-session.target [Service] Type=simple ExecStart=/usr/bin/kanshi [Install] WantedBy=sway-session.target
启用该用户单元。其仅会在 Sway 运行时激活并在 Sway 停止时停用。
疑难解答
唤醒后外置屏幕工作区编号从 2 开始
若您参照上文配置,当第二块屏幕连接到计算机时,第一块屏幕被禁用,第二块屏幕从 1 开始编号工作区,您首次接入屏幕或开机后应当是这种状况。但从睡眠唤醒后,这个数字可能会变成 2。欲解决,只需将第一个工作区移动到第二块屏幕,向 kanshi 配置文件中添加配置命令:
~/.config/kanshi/config
profile { output LVDS-1 disable output "Some Company ASDF 4242" mode 1600x900 position 0,0 # 以下这条就是添加的命令(别忘了更新输出名称): exec swaymsg workspace 1, move workspace to HDMI-A-1 } profile { output LVDS-1 enable scale 2 }