Я использую Ubuntu 12.04. Я установил xscreensaver вместо gnome.screensaver.
Моя проблема в том, что я не могу заставить заставку перестать появляться, когда я смотрю фильм в Movie Player. У меня установлен Movie Player для отключения заставок, но он не работает на xscreensaver.
Как изменить файлы программы для отключения xscreensaver во время работы Movie Player?
Можно попробовать подобный сценарий этому. Наблюдайте за состоянием плеера через DBUS.
Я более низкая задержка с 55 секундами, работайте лучше с 1 минимальным разом экранной заставки.
Пример VLC:
BTW, VLC в Ubuntu 14.04 включили интерфейс DBUS по умолчанию. Где в Ubuntu 12.04 не. Проверьте его от:
Инструменты → Предпочтения → Усовершенствованный (или Все) → Интерфейс → Интерфейсы Управления → интерфейс управления D-шины. (Примените затем Перезапуск VLC),
Создайте файл 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
Откройте терминальный Ctrl+Alt+t
Добавьте выполненные полномочия:
chmod +x ~/Desktop/heartbeat.sh
Запущенный скрипт:
~/Desktop/heartbeat.sh
Судите плеер 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
Подсказки отладки:
Смотрите в X раз
watch -n1 xprintidle
или:
while sleep 1; do xprintidle; done;
Проверьте при отключении работ экранной заставки (при запущении этого скрипта xscreensave не должен открываться),
#!/bin/bash
while sleep 55
do
#xscreensaver-command -deactivate
#xdg-screensaver reset
xset s reset
done
Проверьте на список 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"
Ссылки:
qdbusviewer
чтобы проверить корректное целевое имя или использовать другой плеер, Вам нравится.Вот моя собственная версия от кода 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 при просмотре ролика.
Для 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 справочника.
Я заметил, что все ответы здесь казались излишне сложными; Вы не должны действительно делать этого на основе определенного медиаплеера - все, что необходимо сделать, обнаруживают, если какое-либо аудио играет. Я на самом деле удивлен, что это не функция, встроенная в 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
Это работало на меня с 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
Это работало на меня на Xubuntu 17.10 с xscreensaver
#!/bin/bash
while true; do
sleep 10
cat /proc/asound/card*/pcm*/sub*/status | grep RUNNING && xscreensaver-command -deactivate
done