13个版本 (4个重大更新)
新 0.5.2 | 2024年8月19日 |
---|---|
0.5.1 | 2024年3月30日 |
0.4.5 | 2024年2月13日 |
0.4.3 | 2024年1月18日 |
0.1.0 | 2023年12月31日 |
#20 在 多媒体
每月162次下载
90KB
1.5K SLoC
Wayland PipeWire Idle Inhibit
描述
在通过PipeWire播放媒体时暂停自动空闲。
对于检测正在播放的媒体,它依赖于PipeWire。
对于抑制空闲,它依赖于以下任一:
- 实现实验性协议idle-inhibit-unstable-v1的Wayland合成器
- 实现D-Busorg.freedesktop.ScreenSaver服务的守护进程
主要功能
- 任何应用程序通过PipeWire播放音频时抑制空闲
- 可自定义抑制空闲的媒体最小持续时间(对于防止通知抑制空闲很有用)
- 可自定义客户端过滤器列表(对于忽略某些程序,如背景音乐很有用)
- 支持通过Wayland合成器和dbus服务抑制空闲
欢迎反馈和贡献!
测试环境
- Sway:与默认wayland空闲抑制器配合良好
- Plasma:虽然在理论上实现了idle-inhibit-unstable-v1协议,但似乎存在故障。使用dbus空闲抑制器运行良好。
应与任何实现idle-inhibit-unstable-v1的合成器或提供org.freedesktop.ScreenSaver服务的合成器/桌面环境配合良好。
可用性
用法
Usage: wayland-pipewire-idle-inhibit [OPTIONS]
Options:
-d, --media-minimum-duration <SECONDS>
Minimum media duration to inhibit idle [default: 5]
-v, --verbosity <VERBOSITY>
Log verbosity [default: WARN] [possible values: OFF, ERROR, WARN, INFO, DEBUG, TRACE]
-q, --quiet
Disables logging completely
-i, --idle-inhibitor <IDLE INHIBITOR BACKEND>
Sets what idle inhibitor backend to use [default: wayland] [possible values: d-bus, dry-run, wayland]
-b, --d-bus
Enable DBus (org.freedesktop.ScreenSaver) idle inhibitor
-w, --wayland
Enable Wayland idle inhibitor
-n, --dry-run
Only logs (at INFO level) about idle inhibitor state changes
-c, --config <PATH>
Path to config file
-h, --help
Print help
-V, --version
Print version
构建
Cargo
git clone https://github.com/rafaelrc7/wayland-pipewire-idle-inhibit
cd wayland-pipewire-idle-inhibit
cargo build
Nix
git clone https://github.com/rafaelrc7/wayland-pipewire-idle-inhibit
cd wayland-pipewire-idle-inhibit
nix build
nix build github:rafaelrc7/wayland-pipewire-idle-inhibit
安装
Cargo
cargo install wayland-pipewire-idle-inhibit
有关如何运行程序的说明,请参阅运行。
AUR
此软件包可在Arch用户仓库中找到: wayland-pipewire-idle-inhibit
使用您选择的AUR辅助程序进行安装。
该软件包包括二进制文件和默认systemd服务单元文件,可以使用以下命令启用和运行:
systemctl --user enable wayland-pipewire-idle-inhibit.service --now
有关如何运行程序的进一步说明,请参阅运行。
Nixpkgs
此软件包在nixpkgs仓库中以wayland-pipewire-idle-inhibit
的形式提供。
Nix Flake(推荐)
将以下代码片段添加到您的flake输入中
wayland-pipewire-idle-inhibit = {
url = "github:rafaelrc7/wayland-pipewire-idle-inhibit";
inputs.nixpkgs.follows = "nixpkgs";
};
[!WARNING]此flake依赖于nixos-unstable,如果您正在使用稳定的nixpkgs版本(23.11),则必须删除
inputs.nixpkgs.follows
行,或者将其设置为跟踪nixpkgs-unstable输入,否则软件包将无法构建。如果删除该行后构建仍然失败,您可能需要运行$ nix flake update wayland-pipewire-idle-inhibit
。有关详细信息,请参阅#7。
从现在起,您有多种选择
使用Home Manager模块(推荐)
将以下内容添加到您的home-manager导入中
inputs.wayland-pipewire-idle-inhibit.homeModules.default
然后您可以设置它,例如
services.wayland-pipewire-idle-inhibit = {
enable = true;
systemdTarget = "sway-session.target";
settings = {
verbosity = "INFO";
media_minimum_duration = 10;
idle_inhibitor = "wayland";
sink_whitelist = [
{ name = "Starship/Matisse HD Audio Controller Analog Stereo"; }
];
node_blacklist = [
{ name = "spotify"; }
{ app_name = "Music Player Daemon"; }
];
};
};
此方法将安装程序并设置一个用户systemd服务。
使用覆盖
inputs.wayland-pipewire-idle-inhibit.overlays.default
通过添加覆盖,您可以安装wayland-pipewire-idle-inhibit
软件包。
有关如何运行程序的说明,请参阅运行。
使用软件包
inputs.wayland-pipewire-idle-inhibit.packages.default
有关如何运行程序的说明,请参阅运行。
运行
合成器
然后您可以在Sway配置中运行它或运行您Wayland合成器的等效操作
exec wayland-pipewire-idle-inhibit
systemd
另一种选择是设置systemd用户服务。有关示例,请参阅wayland-pipewire-idle-inhibit.service。您可以通过添加CLI参数到ExecStart
或更改WantedBy
目标为,例如sway-session.target
来自定义它。
- 将示例服务文件复制到
~/.config/systemd/user/
并按照您的喜好进行编辑 - 运行
systemctl --user daemon-reload
- 运行
systemctl --user enable wayland-pipewire-idle-inhibit.service --now
配置
大多数设置可以通过CLI参数(运行带有--help
的程序以获取更多信息)或配置文件定义。CLI参数的优先级高于配置文件。默认配置文件路径为~/.config/wayland-pipewire-idle-inhibit/config.toml
,但也可以使用--config <PATH>
设置其他路径。
~/.config/wayland-pipewire-idle-inhibit/config.toml
具有默认选项
verbosity = "WARN"
media_minimum_duration = 5
idle_inhibitor = "wayland"
sink_whitelist = [ ]
node_blacklist = [ ]
接收器白名单
您可以为程序设置一系列接收器过滤器。如果接收器与任何过滤器匹配,则将使用它。
支持的字段
name
:正则表达式
示例
[[sink_whitelist]]
name = "Sink 1 name"
[[sink_whitelist]]
name = "Another Sink"
节点(客户端)黑名单
您可以为要忽略的节点过滤器设置列表,即使正在播放媒体也不会阻止空闲。如果节点与任何过滤器匹配,则将其忽略。
支持的字段
name
:正则表达式。此名称与Helvum用于节点的名称相同。app_name
:正则表达式media_class
:正则表达式media_role
:正则表达式media_software
:正则表达式
示例
[[node_blacklist]]
name = "[Ff]irefox"
感谢
- Misterio77 帮助创建home-manager模块。
本项目的灵感来自
许可证和致谢
本项目遵循GPL3许可证的条款。有关更多信息,请参阅许可证。
PipeWire连接的代码部分受到了Helvum的极大启发,Helvum同样遵循GPL3许可证的条款。
依赖项
~18–32MB
~508K SLoC