J'utilise Ubuntu 12.04. J'ai installé xscreensaver à la place de gnome.screensaver.
Mon problème est que je ne parviens pas à ce que l'écran de veille cesse de s'afficher lorsque je regarde un film dans Movie Player. Movie Player est configuré pour désactiver les écrans de veille, mais il ne fonctionne pas sur xscreensaver.
Comment modifier les fichiers du programme pour désactiver xscreensaver pendant que Movie Player est en cours d'exécution?
Vous pouvez essayer un script similaire à celui-ci. Surveillez l'état du lecteur via DBUS.
J'abaisse le délai à 55 secondes, fonctionne mieux avec un temps d'inactivité d'économiseur d'écran de 1 minute.
Exemple VLC:
BTW, VLC dans Ubuntu 14.04 a l'interface DBUS activée par défaut. Où dans Ubuntu 12.04 n'est pas. Vérifiez-le de:
Outils → Préférences → Avancé (ou Tous) → Interface → Interfaces de contrôle → Interface de contrôle D-Bus. (Appliquer puis Redémarrer VLC)
Créez un fichier heartbeat.sh
dans ~/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
Terminal ouvert Ctrl+Alt+t
Ajouter des autorisations d'exécution:
chmod +x ~/Desktop/heartbeat.sh
Script de lancement:
~/Desktop/heartbeat.sh
Essayez le lecteur VLC.
Pour Gnome MPlayer (D-Bus activé par défaut), utilisez:
"$(pgrep gnome-mplayer)"
and --dest org.mpris.MediaPlayer2.gnome-mplayer
Pour (Totem) Lecteur de vidéos (plug-in D-Bus désactivé par défaut),
Édition → Plug-ins → Vérifier le service D-Bus. (Redémarrer totem)
Utilisation:
"$(pgrep totem)"
and --dest org.mpris.MediaPlayer2.totem
Ceci est modifié pour fonctionner avec tout lecteur fournissant MPRIS. Il obtient la liste de manière dynamique (inconvénient, il ne fait pas la distinction entre la lecture audio uniquement et la lecture vidéo). Le meilleur moyen que je pense est de mettre manuellement la liste des joueurs que vous aimez:
#!/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
Conseils de débogage :
Regarder X temps d'inactivité
watch -n1 xprintidle
ou:
while sleep 1; do xprintidle; done;
Vérifiez si la désactivation de l'économiseur d'écran fonctionne (lors de l'exécution de ce script, xscreensave ne devrait pas apparaître)
#!/bin/bash
while sleep 55
do
#xscreensaver-command -deactivate
#xdg-screensaver reset
xset s reset
done
Recherchez la liste DBUS pour l'interface du lecteur MPRIS, par exemple avec VLC en cours d'exécution:
gdbus call --session --dest org.freedesktop.DBus \
--object-path / --method org.freedesktop.DBus.ListNames | \
awk 'BEGIN { RS=","; } /org.mpris.MediaPlayer2./ { gsub(/[\[\]()\x27]/, ""); print $1; }'
Sortie:
org.mpris.MediaPlayer2.vlc
org.mpris.MediaPlayer2.vlc.instance3939
Ou en utilisant la commande 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.
Sortie:
string "org.mpris.MediaPlayer2.vlc"
string "org.mpris.MediaPlayer2.vlc.instance3939"
Références :
qdbusviewer
pour vérifier le nom de la destination ou pour utiliser un autre lecteur de votre choix.Voici ma propre version du code de 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
Il vérifie à chaque itération si la liste des joueurs a été modifiée.
Il ne désactive également l'économiseur d'écran que si le lecteur est en plein écran, ce qui est normalement le cas pour la vidéo.
Je viens de mettre ce script dans le démarrage automatique et ne me dérange plus avec xscreensaver lorsque je regarde une vidéo.
Ceci a fonctionné pour moi sur Xubuntu 17.10 avec xscreensaver
#!/bin/bash
while true; do
sleep 10
cat /proc/asound/card*/pcm*/sub*/status | grep RUNNING && xscreensaver-command -deactivate
done
Pour MPV et mplayer, la fonctionnalité de pulsation est intégrée.
1) Localisez votre fichier de configuration MPV. locate mpv.conf
2) Ouvrez-le. Sudo nano /path/to/mpv.conf
3) Ajoutez cette ligne en bas. heartbeat-cmd="/usr/bin/xscreensaver-command -deactivate > /dev/null"
4) Fermez et enregistrez. Ctrl + X si vous utilisez nano.
Découvrez où trouver votre fichier mpv.conf ici (la configuration est identique sous Arch Linux), https://wiki.archlinux.org/index.php/Mpv#Configuration
Si la variable d'environnement XDG_CONFIG_HOME n'est pas définie, les fichiers de configuration de l'utilisateur seront lus à partir du répertoire ~/.config/mpv. Les fichiers de configuration à l'échelle du système sont lus à partir du répertoire/etc/mpv.
J'ai remarqué que toutes les réponses ici semblaient inutilement complexes; vous n'avez pas vraiment besoin de le faire avec un lecteur multimédia spécifique - il vous suffit de détecter si un fichier audio est en cours de lecture. En fait, je suis surpris que ce ne soit pas une fonctionnalité intégrée à xscreensaver. Voici un script bash super simple:
#!/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
Cela a fonctionné pour moi avec Xubuntu 18.10 et avec VLC, vidéos youtube, etc ... sans qu'il soit nécessaire de désactiver xscreensaver. Ajoutez simplement le script suivant au démarrage du système:
#!/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