如何在电影播放期间停止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)

    1. ~/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 
    2. 打开终端Ctrl + Alt + t

    3. 添加运行权限:

       chmod +x ~/Desktop/heartbeat.sh 
    4. 运行脚本:

       ~/Desktop/heartbeat.sh 
    5. 试试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 

调试提示

  1. 观看X空闲时间

     watch -n1 xprintidle 

    要么:

     while sleep 1; do xprintidle; done; 
  2. 检查禁用屏幕保护程序是否有效(运行此脚本时,不应弹出xscreensave)

      #!/bin/bash while sleep 55 do #xscreensaver-command -deactivate #xdg-screensaver reset xset s reset done 
  3. 检查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