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

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

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

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

5
задан 13 April 2014 в 13:10

6 ответов

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

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

  • Пример VLC:

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

    Инструменты → Предпочтения → Усовершенствованный (или Все) → Интерфейс → Интерфейсы Управления → интерфейс управления D-шины. (Примените затем Перезапуск 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-шина включила по умолчанию), используйте:

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

  • Для (Тотема) плеер Видео (Плагин 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
ответ дан 13 April 2014 в 13:10

Вот моя собственная версия от кода 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
ответ дан 13 April 2014 в 13:10

Для 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
ответ дан 13 April 2014 в 13:10
  • 1
    А-ч, посмотрите обновление, которое я записал выше в вопросе, прежде fdisk вывод – Giuliano 30 September 2015 в 12:28

Я заметил, что все ответы здесь казались излишне сложными; Вы не должны действительно делать этого на основе определенного медиаплеера - все, что необходимо сделать, обнаруживают, если какое-либо аудио играет. Я на самом деле удивлен, что это не функция, встроенная в 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
ответ дан 13 April 2014 в 13:10

Это работало на меня с Xubuntu 18.10 и с VLC, видео YouTube, и т.д.... без потребности отключить xscreensaver. Просто добавьте следующий сценарий, когда Вы система запустите:

#!/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
ответ дан 8 October 2019 в 01:49

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

#!/bin/bash

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

Другие вопросы по тегам:

Похожие вопросы: