如何在电影播放期间停止 xscreensaver?

Chr*_*284 5 video video-player screensaver xscreensaver

我正在运行 Ubuntu 12.04。我安装了 xscreensaver 来代替 gnome.screensaver。

我的问题是当我在 Movie Player 上看电影时,我无法让屏幕保护程序停止弹出。我已将 Movie Player 设置为禁用屏幕保护程序,但它在 xscreensaver 上不起作用。

如何在 Movie Player 运行时更改程序文件以禁用 xscreensaver?

use*_*.dz 7

您可以尝试与此脚本类似的脚本。通过 DBUS 观察玩家状态。

我将延迟降低到 55 秒,在 1 分钟的屏幕保护程序空闲时间下工作得更好。

  • 示例VLC

    顺便说一句,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
      
      Run Code Online (Sandbox Code Playgroud)
    2. 开放端子Ctrl+ Alt+t

    3. 添加运行权限:

      chmod +x ~/Desktop/heartbeat.sh
      
      Run Code Online (Sandbox Code Playgroud)
    4. 运行脚本:

      ~/Desktop/heartbeat.sh
      
      Run Code Online (Sandbox Code Playgroud)
    5. 试试 VLC 播放器。

  • 对于Gnome MPlayer(默认启用 D-Bus),使用:

    "$(pgrep gnome-mplayer)"--dest org.mpris.MediaPlayer2.gnome-mplayer

  • 对于(图腾)视频播放器(默认禁用 D-Bus 插件),

    编辑 → 插件 → 检查 D-Bus 服务。(重启图腾)

    用:

    "$(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
    
    Run Code Online (Sandbox Code Playgroud)

调试提示

  1. 手表 X 空闲时间

    watch -n1 xprintidle
    
    Run Code Online (Sandbox Code Playgroud)

    或者:

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

        #!/bin/bash
    
        while sleep 55
        do
            #xscreensaver-command -deactivate
            #xdg-screensaver reset
            xset s reset
        done
    
    Run Code Online (Sandbox Code Playgroud)
  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; }'
    
    Run Code Online (Sandbox Code Playgroud)

    输出:

        org.mpris.MediaPlayer2.vlc
        org.mpris.MediaPlayer2.vlc.instance3939
    
    Run Code Online (Sandbox Code Playgroud)

    或者使用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.
    
    Run Code Online (Sandbox Code Playgroud)

    输出:

        string "org.mpris.MediaPlayer2.vlc"
        string "org.mpris.MediaPlayer2.vlc.instance3939"
    
    Run Code Online (Sandbox Code Playgroud)

参考资料