#wayland-compositor #pipe-wire #wayland #idle #utility #inhibit

app wayland-pipewire-idle-inhibit

在计算机播放声音时抑制wayland空闲

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多媒体

Download history 24/week @ 2024-07-26 1/week @ 2024-08-02 137/week @ 2024-08-16

每月162次下载

GPL-3.0-only

90KB
1.5K SLoC

Wayland PipeWire Idle Inhibit

描述

在通过PipeWire播放媒体时暂停自动空闲。

对于检测正在播放的媒体,它依赖于PipeWire

对于抑制空闲,它依赖于以下任一:

主要功能

  • 任何应用程序通过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的形式提供。

将以下代码片段添加到您的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导入中

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"

感谢

本项目的灵感来自

许可证和致谢

本项目遵循GPL3许可证的条款。有关更多信息,请参阅许可证

PipeWire连接的代码部分受到了Helvum的极大启发,Helvum同样遵循GPL3许可证的条款。

依赖项

~18–32MB
~508K SLoC