如何在播放电影时停止 xscreensaver?

如何在播放电影时停止 xscreensaver?

我正在运行 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)

    1. 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
      
    2. 打开终端Ctrl++Altt

    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

  • 为了(图腾)视频播放器(默认情况下禁用 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
    

调试提示

  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"
    

参考

答案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

相关内容