Ubuntu 12.04を実行しています。 gnome.screensaverの代わりにxscreensaverをインストールしました。
私の問題は、Movie Playerで映画を見ているときに、スクリーンセーバーのポップアップを停止できないことです。 Movie Playerをスクリーンセーバーを無効にするように設定していますが、xscreensaverで機能しません。
Movie Playerの実行中にプログラムファイルを変更してxscreensaverを無効にするにはどうすればよいですか?
これと同様のスクリプトを試すことができます。 DBUSを通じてプレイヤーの状態を監視します。
遅延を55秒に短縮し、スクリーンセーバーのアイドル時間を1分にすると動作が向上します。
例VLC:
ところで、Ubuntu 14.04のVLCでは、デフォルトでDBUSインターフェイスが有効になっています。 Ubuntu 12.04ではそうではありません。以下から確認してください:
ツール→設定→詳細設定(またはすべて)→インターフェース→制御インターフェース→D-Bus制御インターフェース。 (VLCを適用してから再起動)
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
ターミナルを開く 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)ビデオプレーヤー(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
デバッグのヒント:
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"
参照:
qdbusviewer
を使用して、正しい宛先名を確認するか、好きな他のプレーヤーを使用します。これが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に煩わされなくなりました。
これ 私のために働いたXubuntu 17.10withxscreensaver
#!/bin/bash
while true; do
sleep 10
cat /proc/asound/card*/pcm*/sub*/status | grep RUNNING && xscreensaver-command -deactivate
done
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ディレクトリから読み取られます。
ここでのすべての答えは、不必要に複雑に思えました。特定のメディアプレーヤーに基づいて実際にこれを行う必要はありません。オーディオが再生されているかどうかを検出するだけです。実際、これは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
これは機能しました 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