web-dev-qa-db-ja.com

映画の再生中にxscreensaverを停止するにはどうすればよいですか?

Ubuntu 12.04を実行しています。 gnome.screensaverの代わりにxscreensaverをインストールしました。

私の問題は、Movie Playerで映画を見ているときに、スクリーンセーバーのポップアップを停止できないことです。 Movie Playerをスクリーンセーバーを無効にするように設定していますが、xscreensaverで機能しません。

Movie Playerの実行中にプログラムファイルを変更してxscreensaverを無効にするにはどうすればよいですか?

5
Chris26284

これと同様のスクリプトを試すことができます。 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
      
    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)ビデオプレーヤー(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
    

デバッグのヒント

  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"
    

参照

5
user.dz

これが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" = "(<true>,)" ]
        then
            echo $player $state $fullscreen send signal
            xscreensaver-command -deactivate
            break
        else
            echo $player $state $fullscreen
        fi
    done
done

プレーヤーのリストが変更されたかどうかを各反復でチェックします。

また、プレーヤーがフルスクリーンである場合にのみスクリーンセーバーを無効にします。これは通常ビデオの場合です。

このスクリプトを自動起動に追加しただけで、ビデオを見ている間はxscreensaverに煩わされなくなりました。

0
sk3

これ 私のために働いたXubuntu 17.10withxscreensaver

#!/bin/bash

while true; do
    sleep 10
    cat /proc/asound/card*/pcm*/sub*/status | grep RUNNING && xscreensaver-command -deactivate
done
0
nmz787

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ディレクトリから読み取られます。

0
Mauro Colella

ここでのすべての答えは、不必要に複雑に思えました。特定のメディアプレーヤーに基づいて実際にこれを行う必要はありません。オーディオが再生されているかどうかを検出するだけです。実際、これは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
0
Ben

これは機能しました Xubuntu 18.10およびVLC、youtubeビデオなどの場合、xscreensaverを無効にする必要はありません。システムの起動時に次のスクリプトを追加します。

#!/bin/bash
# enumerate all the attached screens
displays=""
while read id
do
    displays="$displays $id"
done< <(xvinfo | sed -n 's/^screen #\([0-9]\+\)$/\1/p')

checkFullscreen()
{

    # loop through every display looking for a fullscreen window
    for display in $displays
    do
        #get id of active window and clean output
        activ_win_id=`DISPLAY=:0.${display} xprop -root _NET_ACTIVE_WINDOW`
        activ_win_id=${activ_win_id:40:9}

        # Check if Active Window (the foremost window) is in fullscreen state
        isActivWinFullscreen=`DISPLAY=:0.${display} xprop -id $activ_win_id | grep _NET_WM_STATE_FULLSCREEN`
        if [[ "$isActivWinFullscreen" == *NET_WM_STATE_FULLSCREEN* ]];then
            xscreensaver-command -deactivate
        fi
    done
}

while sleep $((30)); do
    checkFullscreen
done

exit 0
0
Alter Lagos