В качестве хранителя экрана часто используется 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
Вот и всё. Замечания просьба оставлять в комментариях.