6个版本 (2个稳定版)
1.0.1 | 2024年5月28日 |
---|---|
1.0.0 | 2024年5月27日 |
0.2.0 | 2023年4月29日 |
0.1.2 | 2023年4月29日 |
0.1.0 | 2023年2月10日 |
#1310 in 命令行工具
190KB
5K SLoC
shikane
shikane (/ʃiˈkaːnə/) 是一个专注于准确性和确定性的动态输出配置工具。
它根据一组配置文件自动检测和配置连接的显示器。每个配置文件指定一组输出以及附加参数(例如,模式、位置、缩放)。如果所有指定的输出和模式都可以与当前连接的显示器及其功能完美匹配,则配置文件将自动应用。
这是类似 autorandr 工具的 Wayland 等效工具。它旨在完全替代 kanshi,克服其不准确之处并添加新功能。shikane 与支持 wlr-output-management 协议 >=3 版本的 Wayland 组合器(例如使用 wlroots v0.16 的组合器)一起工作。
功能
- 生成所有兼容的(显示、输出、模式)组合,按精确度排序
- 每个输出可指定多个匹配规则
- 限制匹配到某些显示属性
- 基于属性匹配选择正则表达式、子串或全文
- 完整基数匹配算法
- 临时配置文件切换
- 将当前显示配置导出为 shikane config.toml
- 定义执行的状态机
- 通过环境变量提供命令、配置文件和显示器名称
- 一次性模式
匹配过程是如何工作的
shikane 在启动时以及当前连接的显示器集发生变化时自动选择可能的配置文件。如果每个当前连接的显示器都可以匹配至少一个输出且没有未匹配的输出,则将考虑配置文件。
如果以下条件满足,则显示器匹配输出:
- 搜索参数与显示的属性匹配
- AND 显示支持在输出表中指定的模式。
在生成可能配置文件列表后,shikane 生成每个配置文件的每个变体。一旦所有变体都经过验证并按精确度排序,shikane 将依次尝试应用它们,直到成功或没有剩余变体。
变体是同一配置文件的略微不同的版本。
例如,一个给定的显示器有一组支持的模式:1920x1080@60Hz 和 1920x1080@50Hz。如果 config.toml 中的 mode 被指定为 "1920x1080",则两种模式都符合规格。shikane 不只是选择其中一种模式并使用它,而是基于相同的 profile 生成两个变体。一个变体使用 1920x1080@60Hz 模式,另一个变体使用 1920x1080@50Hz 模式。
搜索参数也是如此。如果存在多个 (display,output,mode) 组合,shikane 会生成包含所有这些组合的变体。
用法
- 创建您的配置文件。有关简短概述,请参阅 配置 或查看更详细的 man 页面
man 5 shikane
。 - 启动 shikane。
shikane
使用 shikanectl
生成配置
- 启动 shikane。
- 使用 (GUI) 工具手动配置您的输出。
- 导出当前配置。
shikanectl export "room04"
- 将打印的 TOML 添加到 shikane 的 config.toml 中。
- 重新加载配置文件。
shikanectl reload
文档
文档以 man 页面形式提供
man 1 shikane
man 5 shikane
man 1 shikanectl
它们也可以在线 查看。
安装
通过您的 $AURhelper
从 AUR
$AURhelper -S shikane
从 crates.io 通过 cargo(不带 man 页面)
cargo install shikane
构建
依赖项
- a rust 工具链 >=1.70
- pandoc(用于构建 man 页面)
构建 shikane
cargo build --release
构建 man 页面
./scripts/build-docs.sh man
man -l build/man/shikane.1.gz
man -l build/man/shikane.5.gz
man -l build/man/shikanectl.1.gz
配置
shikane 使用 TOML 文件格式作为其配置文件,并包含一个包含 profile 的数组。每个 profile 都是一个包含 output 表的表格。配置文件应放置在 $XDG_CONFIG_HOME/shikane/config.toml
。
[[profile]]
name = "dual_foo"
exec = ["notify-send shikane \"Profile $SHIKANE_PROFILE_NAME has been applied\""]
[[profile.output]]
# search for a matching serial number and model by full text comparison
search = ["s=SERIAL123", "m=1Q2X5T"]
enable = true
mode = "1920x1080@50"
position = "0,0"
scale = 1.3
[[profile.output]]
search = "n/HDMI-[ABC]-[1-9]" # search for a matching name by regex
enable = true
exec = ["echo This is output $SHIKANE_OUTPUT_NAME"]
mode = "2560x1440@75Hz"
position = "1920,0"
transform = "270"
致谢
- kanshi 是灵感和动力
- wayland-rs 提供了 wayland 绑定
许可
MIT
依赖项
~11–21MB
~311K SLoC