在某些网站上,当我在浏览器中观看电影并且不触摸电脑时,屏幕会关闭。在 Youtube 等其他网站上,我没有遇到这个问题。我尝试使用咖啡因,但我不喜欢每次观看视频时都必须手动启用和禁用它的想法。我也尝试了在互联网上找到的其他方法,但都没有用。有什么建议吗?我使用的是 chrome 并运行 ubuntu 16.04。
答案1
更新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 | awk '/DPMS is/ {print $NF}')
#Get screensaver type and command
scrnsvr=$(ps -ef | awk '/screensav/ {print $8}' | grep -v awk)
scrnsvrcmd=$(ps -ef | awk '/screensav/ {print substr($0,index($0,$8))}' | grep -v awk)
#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 | awk '/Geometry/ {print $2}'; done))
#Get all screen resolutions detected and build array.
SCREENS=($(xrandr | 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 分钟运行一次并检查活动应用程序是否全屏。如果不是,屏幕保护程序/锁定屏幕将按正常时间启动。
希望这可以帮助!
答案2
Youtube 没有这个问题,因为它使用 HTML5 播放器。你遇到问题的网站使用的是 Flash Player。Adobe Flashplayer 中的一个错误,简而言之,它从不通知 WM 它已进入全屏模式。不过您可能已经听说过,Adobe Flash 总体上是一个有缺陷的应用程序,因此一种解决方法是禁用它,并仅使用带有 HTML5 视频的网站。
正如你提到的咖啡因,你可能已经寻找过解决方案了。你可以做的另一件事是完全禁用“省电”,即强制屏幕永不关闭。