Spotify 播放歌曲时添加 systemd-inhibt 锁

Spotify 播放歌曲时添加 systemd-inhibt 锁

我想防止我的电脑在 Spotify 播放歌曲时进入睡眠状态。如果 Spotify 已打开但未播放歌曲,则电脑应该定期进入睡眠状态。
那么,是否可以使用 systemd-inhibt 在 Spotify 开始播放歌曲时添加锁定(或者有更好的替代方案)并在歌曲停止时将其移除?

答案1

由于 spotify 仍然没有发出 Linux 上大多数媒体播放器共有的行为,因此我研究了其他媒体播放器如何处理此问题,以找到一些可能的解决方案。以下是我发现的:

进程使用 来声明禁止dbus。也就是说,dbus使用适当的接口、方法名称和参数调用 (我省略了细节)。据我所知,方法名称Inhibit对于所有不同的接口都是统一的。接口取决于系统上使用的特定软件。以下是我找到的:

  • org.freedesktop.login1.Managersystemd(由、系统总线使用)
  • org.gnome.SessionManager(受雇于gnome,会话总线)
  • org.freedesktop.PowerManagement(受雇于xfce4,会话总线)

不同桌面环境可能存在更多接口。常见参数包括应用程序标识符、禁止的原因和类型。

请注意systemd-inhibit --list仅列出通过 注册的抑制剂org.freedesktop.login1.Manager。要打印抑制剂,例如,org.gnome.SessionManager,您可以直接查询dbusdbus-send --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.GetInhibitors(cmp. dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.ListInhibitors)。

对于使用 GTK 实现的图形应用程序(如spotify-client),API 调用会为您gtk_applicating_inhibit执行调用dbus。请注意,此调用注册到系统总线和会话总线上的接口,由桌面环境会话进程代理。

最后回答这个问题:这个行为应该由应用程序本身实现。因此,我打开了一个功能请求,供 Spotify 使用gtk_applicating_inhibit,并gtk_applicating_uninhibit相应地(参见https://community.spotify.com/t5/Idea-Submissions/Desktop-Don-t-go-to-sleep-when-playing-audio/idi-p/5507190)。

相关内容