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 }