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

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

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

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

5
задан 19.05.2020, 23:54

4 ответа

Я заметил, что все ответы здесь казались излишне сложными; Вы не должны действительно делать этого на основе определенного медиаплеера - все, что необходимо сделать, обнаруживают, если какое-либо аудио играет. Я на самом деле удивлен, что это не функция, встроенная в xscreensaver. Вот супер простой сценарий удара:

#!/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
ответ дан 19.05.2020, 23:54

Вот моя собственная версия от кода 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 при просмотре ролика.

0
ответ дан 19.05.2020, 23:55

Для 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) Близко, и экономят. Ctrl+X, используя нано.

Узнают, где найти Ваш mpv.conf файл здесь (конфигурация идентична на Арке Linux), https://wiki.archlinux.org/index.php/Mpv#Configuration

, Если переменная окружения XDG_CONFIG_HOME не будет установлен, то пользовательские конфигурационные файлы будут прочитаны из ~/.config/mpv справочник. Общесистемные конфигурационные файлы прочитаны из/etc/mpv справочника.

0
ответ дан 19.05.2020, 23:56

Можно попробовать подобный сценарий этому. Наблюдайте за состоянием плеера через DBUS.

я более низкая задержка с 55 секундами, работайте лучше с 1 минимальным разом экранной заставки.

  • Пример VLC:

    BTW, VLC в Ubuntu 14.04 включили интерфейс DBUS по умолчанию. Где в Ubuntu 12.04 не. Проверьте его от:

    Инструменты → Предпочтения → Усовершенствованный (или Все) → Интерфейс → Интерфейсы Управления → интерфейс управления D-шины. (Примените тогда Перезапуск VLC)

    1. Создают файл heartbeat.sh в [1 112]:

      #!/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 + Высокий звук + t

    3. Добавляют выполненные полномочия:

      chmod +x ~/Desktop/heartbeat.sh
      
    4. сценарий Выполнения:

      ~/Desktop/heartbeat.sh
      
    5. Попытка плеер VLC.

  • Для [1 166] Gnome MPlayer (D-шина включила по умолчанию), используйте:

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

  • Для [1 167] (Тотем) плеер Видео (Плагин D-шины, отключенный по умолчанию),

    Редактирование → Плагины → Проверьте D-автобусное-сообщение. (Тотем перезапуска)

    Использование:

    "$(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. Часы в 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"
    

Ссылки :

5
ответ дан 19.05.2020, 23:56
  • 1
    @Chris26284, я чувствую себя трудным отладить или ожидать причину. Только если у Вас есть пациент, чтобы сделать так. Я попытаюсь добавить некоторые подсказки отладки – Joe 19.05.2020, 23:57
  • 2
    @Chris26284, я обновил ответ. Я подтвердил, это работает в 12,04, когда я протестировал его в VirtualBox. Вы получали какую-либо ошибку на терминале при выполнении сценария? – Joe 19.05.2020, 23:57
  • 3
    @Chris26284, я обновил его для использования xset – Jonathan Allen 19.05.2020, 23:58
  • 4
    Я недавно обновил свою систему к Ubuntu 14.04? Вышеупомянутое должно зафиксировать работу немного лучше теперь? – woodbase 19.05.2020, 23:58
  • 5
    Это все еще doesn' t работают вообще. I' ve, который попробовали оба пути. I' ve удалил предыдущие попытки и попробовал еще раз с нуля. Это ничего не делает. – Sedat Kapanoglu 19.05.2020, 23:58