我正在运行 Ubuntu 12.04。我安装了 xscreensaver 来代替 gnome.screensaver。
我的问题是,当我在 Movie Player 上观看电影时,无法让屏幕保护程序停止弹出。我已将 Movie Player 设置为禁用屏幕保护程序,但它在 xscreensaver 上不起作用。
如何更改程序文件以在 Movie Player 运行时禁用 xscreensaver?
答案1
您可以尝试与此类似的脚本。通过 DBUS 观察玩家状态。
我将延迟降低到 55 秒,在 1 分钟屏幕保护程序空闲时间内效果更好。
例子甚高频液晶:
顺便说一句,Ubuntu 14.04 中的 VLC 默认启用了 DBUS 接口。Ubuntu 12.04 中没有启用。请查看:
工具 → 首选项 → 高级(或全部)→ 接口 → 控制接口 → D-Bus 控制接口。(应用然后重新启动 VLC)
heartbeat.sh
在以下位置创建文件~/Desktop/
:#!/bin/bash while sleep 55 do if [ "$(pgrep vlc)" != "" ] then state=$(bash -c 'gdbus call --session \ --dest org.mpris.MediaPlayer2.vlc \ --object-path /org/mpris/MediaPlayer2 \ --method org.freedesktop.DBus.Properties.Get \ "org.mpris.MediaPlayer2.Player" \ "PlaybackStatus"') if [ "$state" = "(<'Playing'>,)" ] then #xscreensaver-command -deactivate xset s reset fi fi done
打开终端Ctrl++Altt
添加运行权限:
chmod +x ~/Desktop/heartbeat.sh
运行脚本:
~/Desktop/heartbeat.sh
尝试 VLC 播放器。
为了Gnome MPlayer(默认启用 D-Bus),使用:
"$(pgrep gnome-mplayer)"
和--dest org.mpris.MediaPlayer2.gnome-mplayer
为了(图腾)视频播放器(默认情况下禁用 D-Bus 插件),
编辑 → 插件 → 检查 D-Bus 服务。(重启 totem)
使用:
"$(pgrep totem)"
和--dest org.mpris.MediaPlayer2.totem
这经过修改,可以与任何提供 MPRIS 的播放器配合使用。它动态获取列表(缺点是,它不区分仅音频播放和视频播放)。我认为最好的方法是手动输入您喜欢的播放器列表:
#!/bin/bash players_list=$(gdbus call --session --dest org.freedesktop.DBus \ --object-path / --method org.freedesktop.DBus.ListNames | \ awk 'BEGIN { RS=","; } /org.mpris.MediaPlayer2./ { gsub(/[\[\]()\x27]/, ""); print $1; }') while sleep 55 do for player in $players_list do state=$(gdbus call --session \ --dest $player \ --object-path /org/mpris/MediaPlayer2 \ --method org.freedesktop.DBus.Properties.Get \ "org.mpris.MediaPlayer2.Player" \ "PlaybackStatus") if [ "$state" = "(<'Playing'>,)" ] then echo $player $state send signal #xscreensaver-command -deactivate #use xset to work with all screensaver tools and avoid dimming display ... xset s reset break else echo $player $state fi done done
调试提示:
观看 X 空闲时间
watch -n1 xprintidle
或者:
while sleep 1; do xprintidle; done;
检查禁用屏幕保护程序是否有效(运行此脚本时,xscreensave 不应弹出)
#!/bin/bash while sleep 55 do #xscreensaver-command -deactivate #xdg-screensaver reset xset s reset done
检查 MPRIS 播放器接口的 DBUS 列表,以运行 VLC 为例:
gdbus call --session --dest org.freedesktop.DBus \ --object-path / --method org.freedesktop.DBus.ListNames | \ awk 'BEGIN { RS=","; } /org.mpris.MediaPlayer2./ { gsub(/[\[\]()\x27]/, ""); print $1; }'
输出:
org.mpris.MediaPlayer2.vlc org.mpris.MediaPlayer2.vlc.instance3939
或者使用
dbus-send
命令dbus-send --session \ --dest=org.freedesktop.DBus \ --type=method_call \ --print-reply \ /org/freedesktop/DBus \ org.freedesktop.DBus.ListNames \ | grep org.mpris.MediaPlayer2.
输出:
string "org.mpris.MediaPlayer2.vlc" string "org.mpris.MediaPlayer2.vlc.instance3939"
参考:
- 如何设置 DBus 查询以获取 VLC 的播放状态?原剧本JB0x2D1
- MPRIS D-Bus 接口规范
- 用于
qdbusviewer
检查正确的目的地名称或使用您喜欢的其他播放器。
答案2
对于 MPV 和 mplayer,心跳功能是内置的。
1)找到您的 mpv 配置文件。locate mpv.conf
2)打开它。sudo nano /path/to/mpv.conf
3)在底部添加此行。heartbeat-cmd="/usr/bin/xscreensaver-command -deactivate > /dev/null"
4) 关闭并保存。如果使用 nano,请按 Ctrl+X。
在此处找到 mpv.conf 文件的位置(Arch Linux 上的配置相同),https://wiki.archlinux.org/index.php/Mpv#Configuration
如果未设置环境变量 XDG_CONFIG_HOME,则将从 ~/.config/mpv 目录读取用户配置文件。系统范围的配置文件将从 /etc/mpv 目录读取。
答案3
我注意到这里的所有答案似乎都过于复杂;您实际上不需要基于特定的媒体播放器来执行此操作 - 您需要做的就是检测是否有音频正在播放。我真的很惊讶这不是 xscreensaver 内置的功能。这是一个非常简单的 bash 脚本:
#!/bin/bash
while true
do
state=$(pacmd list-sinks | grep -A 4 "*" | grep "state: " | cut -c 9-)
if [[ $state == SUSPENDED || $state == IDLE ]]
then
echo "State: $state. Not pausing screensaver."
sleep 2m
else
echo "State: $state. Pausing screensaver."
xscreensaver-command -deactivate > /dev/null
sleep 4m
fi
done
答案4
这为我工作Xubuntu 17.10和屏幕保护程序
#!/bin/bash
while true; do
sleep 10
cat /proc/asound/card*/pcm*/sub*/status | grep RUNNING && xscreensaver-command -deactivate
done