Как остановить xscreensaver во время просмотра фильмов?

5

Я запускаю Ubuntu 12.04. Я установил xscreensaver вместо gnome.screensaver.

Моя проблема в том, что я не могу заставить скринсейвер перестать появляться, когда я смотрю фильм в Movie Player. У меня есть Movie Player, чтобы отключить заставки, но он не работает на xscreensaver.

Как изменить файлы программы, чтобы отключить xscreensaver во время работы Movie Player?

    
задан Chris26284 09.04.2014 в 20:57
источник

5 ответов

5

Вы можете попробовать аналогичный сценарий для этого. Следите за состоянием игрока через DBUS.

Я снижаю задержку до 55 секунд, лучше работаю с временем простоя заставки 1мин.

  • Пример VLC :

    BTW, VLC в Ubuntu 14.04 имеет интерфейс 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. Время простоя Watch 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. Проверьте список DBUS для интерфейса проигрывателя MPRIS, например, с запуском 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"
    

Ссылки

ответ дан user.dz 10.04.2014 в 22:35
0

Для MPV и mplayer встроена функциональность heartbeat.

1) Найдите файл конфигурации mpv. locate mpv.conf

2) Откройте его. sudo nano /path/to/mpv.conf

3) Добавьте эту строку внизу. heartbeat-cmd="/usr/bin/xscreensaver-command -deactivate > /dev/null"

4) Закрыть и сохранить. Ctrl + X при использовании nano.

Узнайте, где найти файл mpv.conf здесь (конфигурация идентична в Arch Linux), Ссылка

If the environment variable XDG_CONFIG_HOME is not set, user configuration files will be read from the ~/.config/mpv directory. System-wide configuration files are read from the /etc/mpv directory.

    
ответ дан Mauro Colella 11.10.2015 в 19:12
0

Вот моя собственная версия из кода Криса:

#!/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 во время просмотра видео.

    
ответ дан sk3 26.12.2014 в 12:49
0

Я заметил, что все ответы здесь казались излишне сложными; вам действительно не нужно делать это на основе определенного медиаплеера - все, что вам нужно сделать, это определить, воспроизводится ли какой-либо звук. Я действительно удивлен, что это не функция, встроенная в 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
    
ответ дан Ben 09.09.2017 в 21:26
0

Это работало для меня на Xubuntu 17.10 с xscreensaver

#!/bin/bash

while true; do
    sleep 10
    cat /proc/asound/card*/pcm*/sub*/status | grep RUNNING && xscreensaver-command -deactivate
done
    
ответ дан nmz787 23.12.2017 в 09:16