Como faço para parar o xscreensaver durante a reprodução de filmes?

5

Estou executando o Ubuntu 12.04. Eu instalei o xscreensaver no lugar do gnome.screensaver.

Meu problema é que não consigo fazer com que o protetor de tela pare de aparecer quando estou assistindo a um filme no Movie Player. Eu tenho o Movie Player definido para desativar screensavers, mas não está funcionando no xscreensaver.

Como eu altero os arquivos do programa para desabilitar o xscreensaver enquanto o Movie Player está rodando?

    
por Chris26284 09.04.2014 / 20:57

5 respostas

5

Você pode tentar um script semelhante a este. Preste atenção para o estado do jogador através do DBUS.

Reduzo o atraso para 55 seg. Funciona melhor com o tempo ocioso de proteção de tela de 1 minuto.

  • Exemplo VLC :

    O BTW, VLC no Ubuntu 14.04 possui interface DBUS ativada por padrão. Onde no Ubuntu 12.04 não é. Verifique de:

    Ferramentas → Preferências → Avançadas (ou Todas) → Interface → Interfaces de controle → Interface de controle D-Bus. (Aplique então Reinicie o VLC)

    1. Crie um arquivo heartbeat.sh em ~/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. Abra o terminal Ctrl + Alt + t

    3. Adicione permissões de execução:

      chmod +x ~/Desktop/heartbeat.sh
      
    4. Executar script:

      ~/Desktop/heartbeat.sh
      
    5. Experimente o player VLC.

  • Para o Gnome MPlayer (D-Bus habilitado por padrão), use:

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

  • Para o (Totem) Player de vídeos (o plugin do D-Bus é desativado por padrão),

    Editar → Plugins → Verifique o serviço D-Bus. (Reinicie o totem)

    Uso:

    "$(pgrep totem)" e --dest org.mpris.MediaPlayer2.totem

  • Isto é modificado para trabalhar com qualquer jogador que forneça MPRIS. Obtém a lista dinamicamente (desvantagem, não distingue entre reprodução apenas de áudio e reprodução de vídeo). A melhor maneira que eu acho é colocar manualmente a lista de jogadores que você gosta:

    #!/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 ; }')
    
    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
    

Dicas de depuração :

  1. Assista ao tempo ocioso

    watch -n1 xprintidle
    

    ou:

    while sleep 1; do xprintidle; done;
    
  2. Verifique se a desativação da proteção de tela funciona (enquanto executa este script, o xscreensave não deve aparecer)

        #!/bin/bash
    
        while sleep 55
        do
            #xscreensaver-command -deactivate
            #xdg-screensaver reset
            xset s reset
        done
    
  3. Verifique a lista de DBUSs para a interface do MPRIS player, por exemplo, com o VLC em execução:

        gdbus call --session --dest org.freedesktop.DBus \
        --object-path / --method org.freedesktop.DBus.ListNames | \
        awk 'BEGIN { RS=","; } /org.mpris.MediaPlayer2./ { gsub(/[\[\]()\x27]/, ""); print ; }'
    

    Saída:

        org.mpris.MediaPlayer2.vlc
        org.mpris.MediaPlayer2.vlc.instance3939
    

    Ou usando o comando 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.
    

    Saída:

        string "org.mpris.MediaPlayer2.vlc"
        string "org.mpris.MediaPlayer2.vlc.instance3939"
    

Referências :

por user.dz 10.04.2014 / 22:35
0

Para MPV e mplayer, a funcionalidade de pulsação está incorporada.

1) Localize o seu arquivo de configuração mpv. locate mpv.conf

2) Abra. sudo nano /path/to/mpv.conf

3) Adicione esta linha na parte inferior. heartbeat-cmd="/usr/bin/xscreensaver-command -deactivate > /dev/null"

4) Feche e salve. Ctrl + X se estiver usando nano.

Descubra onde encontrar o arquivo mpv.conf aqui (a configuração é idêntica no Arch Linux), link

  

Se a variável de ambiente XDG_CONFIG_HOME não estiver definida, os arquivos de configuração do usuário serão lidos no diretório ~ / .config / mpv. Os arquivos de configuração de todo o sistema são lidos no diretório / etc / mpv.

    
por Mauro Colella 11.10.2015 / 19:12
0

Aqui está minha própria versão do código 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 ; }')

    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

Ele verifica em cada iteração se a lista de jogadores foi alterada.

Ele também desativa o protetor de tela somente se o player estiver em tela cheia, o que normalmente é o caso do vídeo.

Acabei de colocar este script no início automático e não me incomodo mais com o xscreensaver enquanto assisto a um vídeo.

    
por sk3 26.12.2014 / 12:49
0

Eu notei que todas as respostas aqui pareciam desnecessariamente complexas; você realmente não precisa fazer isso com base em um media player específico - tudo que você precisa fazer é detectar se algum áudio está sendo reproduzido. Estou realmente surpreso que isso não seja um recurso embutido no xscreensaver. Aqui está um script super simples:

#!/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
    
por Ben 09.09.2017 / 21:26
0

Isso funcionou para mim em Xubuntu 17.10 com xscreensaver

#!/bin/bash

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