Когда я смотрю видео онлайн, экран выключается через несколько минут
На некоторых сайтах, когда я смотрю фильм в браузере и не касаюсь компьютера, экран выключается. На других сайтах, таких как Youtube, у меня нет такой проблемы. Я пытался использовать кофеин, но мне не нравится идея вручную включать и отключать его каждый раз, когда я смотрю видео. Я также пробовал другие методы, которые я нашел в интернете, но ничего не получалось. какие-либо предложения? Я использую Chrome и работаю Ubuntu 16.04.
2 ответа
ОБНОВЛЕНИЕ 2017/08/23: изменен сценарий, который не отправляет нажатия клавиш, но отключает dpms
и экранная заставка временно во время воспроизведения видео в полноэкранном режиме.
Это работает только с приложениями, работающими в полноэкранном режиме, но не в развернутом виде.
Первая установка xdotool
:
sudo apt install xdotool
Затем я создал scripts
папка в моей домашней папке, в которую я могу поместить любые скрипты, которые я хочу сохранить:
mkdir -p ~/scripts
Затем я создал файл с именем check_full.bsh
в моем ~/scripts
папку и добавил следующее содержание:
Поскольку моя заставка настроена на 20 минут, я установил таймер сна в сценарии на 10 минут (600 секунд). Вы можете изменить это в зависимости от настроек заставки.
#!/bin/bash
#Get DPMS settings
dpms_set=$(xset -q | grep -i "dpms is" | awk '{print $NF}')
#Get screensaver type and command
scrnsvr=$(ps -ef | grep screensav | grep -v grep | awk '{print $8}')
scrnsvrcmd=$(ps -ef | grep screensav | grep -v grep | awk '{print substr($0,index($0,$8))}')
#Sleep Timer in seconds.
SL=600
while true;
do
result=()
#Get all window geometries
all=($(xdotool search --name - | while read win; do xdotool getwindowgeometry $win | grep Geometry | awk '{print $2}'; done))
#Get all screen resolutions detected and build array.
SCREENS=($(xrandr | grep \* | awk '{print $1}'))
SCRN=" ${SCREENS[*]} "
#Get result of all windows and match
for item in ${all[@]}; do if [[ $SCRN =~ " $item " ]] ; then result+=($item); fi; done
#If a result exists disable power management and screensaver
if [[ ${result[@]} ]]; then
ps -ef | grep $scrnsvr | grep -v grep >/dev/null
if [[ $? == 0 ]]; then
kill $(ps -ef | grep $scrnsvr | grep -v grep | awk '{print $2}')
fi
if [[ $dpms_set == "Enabled" ]];then
xset -dpms
fi
else
ps -ef | grep $scrnsvr | grep -v grep >/dev/null
if [[ $? == 1 ]]; then
${scrnsvrcmd} &
fi
if [[ $dpms_set != "Disabled" ]];then
xset dpms
fi
fi
result=()
sleep $SL
done
сделать скрипт исполняемым:
chmod +x ~/scripts/check_full.bsh
По какой-то причине задание cron не будет работать правильно. Поэтому я добавил запись в свой запуск, чтобы вызвать этот скрипт. в ~/.config/autostart/
папку, я создал файл с именем Check_Full.desktop
со следующим содержанием:
Мне нравится добавлять задержки при запуске, поскольку они обычно загружаются лучше.
[Desktop Entry]
Type=Application
Name=Check_Full
Comment=Prevent screensaver from activating when full screen video is playing
Exec=bash -c 'sleep 5 && /home/<username>/scripts/check_full.bsh'
измените строку выше Exec, чтобы она соответствовала вашей домашней папке.
Установите правильные разрешения для файла:
chmod 664 ~/.config/autostart/Check_full.desktop
После выхода из системы и обратно, check_full.bsh
теперь запущен и проверяет каждые 10 минут, является ли активное приложение полноэкранным. Если нет, заставка / экран блокировки запускается в обычное время.
Надеюсь это поможет!
У YouTube такой проблемы нет, потому что он использует проигрыватель HTML5. Сайты, с которыми у вас проблемы, используют вместо этого Flash Player. Это ошибка в Adobe Flashplayer, которая заключается в том, что она никогда не уведомляет WM о запуске в полноэкранном режиме. Вы, возможно, слышали, что Adobe Flash - это приложение с ошибками в целом, поэтому одним из обходных путей является его отключение и использование только сайтов с видео HTML5.
Как вы упомянули кофеин, вы, вероятно, уже искали решение. Другое, что вы можете сделать, это полностью отключить "энергосбережение", то есть заставить экран никогда не выключаться.