跳至內容
出自 Arch Linux 中文维基

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
}

另請參閱