В качестве хранителя экрана часто используется xscreensaver. И есть одна проблема с проигрывателем VLC. В настройках установлена опция «Не запускать хранитель экрана», но скринсейвер при этом все равно запускается во время проигрывания фильма. Приходится периодически шевелить мышкой, что, согласитесь, не очень способствует комфортному просмотру. В KDE и Gnome всё хорошо, их хранители экрана отключаются, а xscreensaver, например, нет. Проблема эта очень распространенная, но хороших простых решений, к сожалению, мало. Тем не менее, они есть.
Первый вариант решения проблемы vlc+xscreensaver:
Скрипт lightsOn, который решает эту проблему. Его можно скачать и запускать перед запуском VLC.
Второй вариант:
Для второго варианта придется выйти немного за рамки. Написать свой скрипт для отслеживания, запущен ли vlc, включающий или выключающий в зависимости от этого управление энергосбережением монитора. Для начала надо удалить xscreensaver, поскольку он нам не понадобится, мы будет работать напрямую с X-сервером:
apt-get remove xscreensaver
И теперь можно написать скрипт, который будет следить за vlc и, если он запущен, отключать управление питанием монитора. Для управления питанием воспользуемся программой xset
xset +dpms dpms 600 900 0
600 — таймаут, по истечении которого монитор переходит в ждущий режим, 900 — по истечении которого монитор переходит в спящий режим, 0 — по истечении которого монитор отключается.
Получится примерно такой скрипт:
#!/bin/bash
TIMEOUT_STANDBY=60
TIMEOUT_SUSPEND=900
TIMEOUT_OFF=0
xset -dpms -display ":0.0"
while :
do
DPMS_STATUS=$(xset q | grep 'DPMS is' | awk '{print $3}')
VLC_PID=$(pgrep vlc)
if [ "$VLC_PID" == "" ]
then
if [ "$DPMS_STATUS" == "Disabled" ]
then
xset +dpms -display ":0.0" dpms $TIMEOUT_STANDBY $TIMEOUT_SUSPEND $TIMEOUT_OFF
fi
else
if [ "$DPMS_STATUS" == "Enabled" ]
then
xset -dpms -display ":0.0"
fi
fi
sleep 1
done
Скрипт будет проверять каждую секунду, запущен ли vlc, и, если это так, отключать управление питанием монитора. Запускать его можно либо из автозагрузки графической оболочки, которой вы пользуетесь, либо просто в фоновом режиме
screenspy.sh &
Скрипт раз в секунду проверяет, есть ли процесс с названием vlc и, если да, выключает управление электросбережением монитора, а если нет. то включает управление энергосбережением с таймаутами, указанными в скрипте.
Установка скрипта как сервиса
Рассмотрим два варианта установки этого скрипта как сервиса. Первый вариант — для sysvinit, второй — для systemd
Для sysvinit скрипт придется немного дополнить, чтобы в результате он выглядел так:
#!/bin/bash
TIMEOUT_STANDBY=60
TIMEOUT_SUSPEND=900
TIMEOUT_OFF=0
start(){
$0 &
}
main(){
xset -dpms -display ":0.0"
while :
do
DPMS_STATUS=$(xset q | grep 'DPMS is' | awk '{print $3}')
VLC_PID=$(pgrep vlc)
if [ "$VLC_PID" == "" ]
then
if [ "$DPMS_STATUS" == "Disabled" ]
then
xset +dpms -display ":0.0" dpms $TIMEOUT_STANDBY $TIMEOUT_SUSPEND $TIMEOUT_OFF
fi
else
if [ "$DPMS_STATUS" == "Enabled" ]
then
xset -dpms -display ":0.0"
fi
fi
sleep 1
done
}
if [ "$1" == "" ]
then
main
fi
case "$1" in
start)
start
;;
stop)
killall -9 screenspy.sh
;;
esac
После этого его можно скопировать в директорию /etc/init.d. При необходимости можно добавить LSB-заголовки.
Для systemd скрипт будет выглядеть так:
[Unit] Description=VLC screensaver spy [Service] Type=forking ExecStart=/usr/bin/screenspy.sh RemainAfterExit=yes TimeoutSec=0 [Install] WantedBy=multi-user.target
Для запуска сервиса на определенных уровнях после этого для sysvinit используйте команду update-rc.d или chkconfig, в зависимости от дистрибутива, а для systemd скрипт необходимо положить в директорию /lib/systemd/system и назвать его screenspy.service. После этого сервис включается командой.
systemctl enable screenspy.service
И теперь его можно запустить командой
systemctl start screenspy.service
Вот и всё. Замечания просьба оставлять в комментариях.