如何在电影播放期间停止xscreensaver?
我正在运行Ubuntu 12.04。 我安装了xscreensaver来代替gnome.screensaver。
我的问题是,当我在电影播放器上观看电影时,我无法让屏幕保护程序停止弹出。 我有电影播放器设置为禁用屏幕保护程序,但它不适用于xscreensaver。
在Movie Player运行时如何更改程序文件以禁用xscreensaver?
您可以尝试使用类似的脚本。 通过DBUS观察玩家状态。
我将延迟降低到55秒,在1分钟的屏幕保护程序空闲时间下工作得更好。
-
示例VLC :
BTW,Ubuntu 14.04中的VLC默认启用DBUS接口。 在Ubuntu 12.04中的位置不是。 检查来自:
工具→首选项→高级(或全部)→接口→控制接口→D-Bus控制接口。 (然后应用重启VLC)
-
在
~/Desktop/
创建一个文件heartbeat.sh
:#!/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 + Alt + t
-
添加运行权限:
chmod +x ~/Desktop/heartbeat.sh
-
运行脚本:
~/Desktop/heartbeat.sh
-
试试VLC播放器。
-
-
对于Gnome MPlayer (默认启用D-Bus),请使用:
"$(pgrep gnome-mplayer)"
和--dest org.mpris.MediaPlayer2.gnome-mplayer
-
对于(Totem)video播放器 (默认情况下禁用D-Bus插件),
编辑→插件→检查D-Bus服务。 (重启图腾)
使用:
"$(pgrep totem)"
和--dest org.mpris.MediaPlayer2.totem
-
这可以修改为与任何提供MPRIS的玩家一起使用。 它动态获取列表(缺点,它不区分仅音频播放和video播放)。 我认为最好的方法是手动输入你喜欢的玩家名单:
#!/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
检查正确的目的地名称或使用您喜欢的其他播放器。
对于MPV和mplayer,内置了心跳function。
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目录中读取系统范围的配置文件。
这是Chris’代码中我自己的版本:
#!/bin/bash while sleep 55 do 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; }') 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") fullscreen=$(gdbus call --session \ --dest $player \ --object-path /org/mpris/MediaPlayer2 \ --method org.freedesktop.DBus.Properties.Get \ "org.mpris.MediaPlayer2" \ "Fullscreen") if [ "$state" = "(<'Playing'>,)" -a "$fullscreen" = "(,)" ] then echo $player $state $fullscreen send signal xscreensaver-command -deactivate break else echo $player $state $fullscreen fi done done
它会在每次迭代时检查玩家列表是否已更改。
它还会在播放器全屏时停用屏幕保护程序,这通常是video的情况。
我只是将这个脚本放在自动启动中,并且在观看video时不再烦扰xscreensaver。
我注意到这里的所有答案似乎都不必要地复杂; 您根本不需要基于特定的媒体播放器执行此操作 – 您需要做的就是检测是否正在播放任何音频。 我真的很惊讶这不是xscreensaver内置的function。 这是一个超级简单的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
这对我来说在Xubuntu 17.10上使用xscreensaver
#!/bin/bash while true; do sleep 10 cat /proc/asound/card*/pcm*/sub*/status | grep RUNNING && xscreensaver-command -deactivate done