web-dev-qa-db-fra.com

Comment puis-je arrêter xscreensaver pendant la lecture de films?

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?

5
Chris26284

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)

    1. 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
      
    2. Terminal ouvert Ctrl+Alt+t

    3. Ajouter des autorisations d'exécution:

      chmod +x ~/Desktop/heartbeat.sh
      
    4. Script de lancement:

      ~/Desktop/heartbeat.sh
      
    5. 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 :

  1. Regarder X temps d'inactivité

    watch -n1 xprintidle
    

    ou:

    while sleep 1; do xprintidle; done;
    
  2. 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
    
  3. 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 :

5
user.dz

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.

0
sk3

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
0
nmz787

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.

0
Mauro Colella

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
0
Ben

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
0
Alter Lagos