跳转至内容

kanshi

来自 ArchWiki

kanshi 允许您定义自动启用和禁用的输出配置文件,以应对热插拔。例如,这可以用于在对接时关闭笔记本电脑的内置屏幕。

这是 Wayland 上类似于 autorandr 等工具的等效工具。kanshi 可用于支持 wlr-output-management 协议的 Wayland 合成器。

安装

安装 kanshikanshi-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
}

每个输出配置文件都用方括号分隔。它包含几个输出指令(其语法类似于 sway-output(5))。当列出的所有输出都连接时,将启用一个配置文件。

提示 您可以使用命令 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:

还可以通过使用 exec 指令在配置文件成功应用后执行命令,来进一步集成 kanshi 到您的工作流程中。

~/.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

如果尚未创建,请创建并启动 ~/.config/systemd/user/sway-session.target(如果您尚未创建)。请遵循 Sway#使用 systemd 管理 Sway 特定的守护进程

创建 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
	# We've added this directive here (do not forget to update the output name):
	exec swaymsg workspace 1, move workspace to HDMI-A-1
}

profile {
	output LVDS-1 enable scale 2
}

参见