几秒钟后,我的屏幕亮度会变暗以节省电池电量。这是Ubuntu 12.04中的默认设置。但是,观看视频时不应暗淡。
当我使用VLC等本机应用程序观看视频时,此方法可以正常工作。但是,对于浏览器内视频,不会阻止屏幕变暗。这很烦人,因为您必须每10秒左右移动一次光标。
我曾经在Mac OSX上使用过相同的调光设置,并且正确考虑了Flash视频。
有人知道如何使YouTube防止屏幕变暗吗?
几秒钟后,我的屏幕亮度会变暗以节省电池电量。这是Ubuntu 12.04中的默认设置。但是,观看视频时不应暗淡。
当我使用VLC等本机应用程序观看视频时,此方法可以正常工作。但是,对于浏览器内视频,不会阻止屏幕变暗。这很烦人,因为您必须每10秒左右移动一次光标。
我曾经在Mac OSX上使用过相同的调光设置,并且正确考虑了Flash视频。
有人知道如何使YouTube防止屏幕变暗吗?
Answers:
HOWTO:在Flash运行时禁用屏幕保护程序
在终端中运行以下命令:
mkdir -p ~/bin
打开gedit或您喜欢的文本编辑器,然后输入以下内容:
#!/bin/bash
# Cleanup any bad state we left behind if the user exited while flash was
# running
gconftool-2 -s /apps/gnome-screensaver/idle_activation_enabled --type bool true
we_turned_it_off=0
while true; do
sleep 60
flash_on=0
for pid in `pgrep firefox` ; do
if grep libflashplayer /proc/$pid/maps > /dev/null ; then
flash_on=1
fi
ss_on=`gconftool-2 -g /apps/gnome-screensaver/idle_activation_enabled`
if [ "$flash_on" = "1" ] && [ "$ss_on" = "true" ]; then
gconftool-2 -s /apps/gnome-screensaver/idle_activation_enabled \
--type bool false
we_turned_it_off=1
elif [ "$flash_on" = "0" ] && [ "$ss_on" = "false" ] \
&& [ "$we_turned_it_off" = "1" ]; then
gconftool-2 -s /apps/gnome-screensaver/idle_activation_enabled \
--type bool true
we_turned_it_off=0
fi
done
done
将此文件另存为~/bin/flash_saver.sh
。
返回终端并运行:
chmod +x ~/bin/flash_saver.sh
要运行此命令,请进入终端并输入:
~/bin/flash_saver.sh
如果愿意,可以通过执行以下操作将此脚本设置为在登录时运行:
~/bin/flash_saver.sh
如果您使用的是Ubuntu 12.04以上版本(在13.04和13.10中已经尝试过,则根本不起作用),这可能不起作用。似乎主要开发人员已不再在该项目中工作,因此修复该项目的机会并不大。
在我的系统(Ubuntu 11.10)中,我使用咖啡因。您也可以尝试在Xubuntu中使用它。它添加了一个通知区域图标,您可以在其中启用/禁用某些程序的屏幕保护程序。要安装咖啡因,请执行以下操作:
sudo add-apt-repository ppa:caffeine-developers/ppa
sudo apt-get update
sudo apt-get install caffeine
然后在终端中执行:
caffeine -p &
然后,您可以选择应禁用屏幕保护程序的程序:
vlc
VLC,mplayer
Movie Player等。
希望能帮助到你。
GitHub上有一个不错的小脚本,名为lightsOn,可以完成您想要的技巧。
基本上,它会寻找全屏视频(在Firefox或Chrome浏览器中闪烁,mplayer或vlc),如果是,则禁用xscreensaver以及自动电源管理器的暗屏功能。
从脚本本身:
如何使用:以您想要检查的秒数启动脚本 全屏即可完成。例: “ ./lightsOn.sh 120&”将每120秒检查一次Mplayer, VLC,Firefox或Chromium是全屏屏幕,如果有,则延迟屏幕保护程序和电源管理。 您希望秒数比所需时间少约10秒 您的屏幕保护程序或电源管理即可激活。 如果您不传递参数,则每50秒检查一次。
因此,请按照我在此处的回答,从自动启动文件夹中调用脚本。
调整脚本是否运行flash / vlc / mplayer
记住要赋予脚本执行权,即
chmod +x lightsOn.sh
这不完全是您想要的,但是这个小脚本每次运行都会记录鼠标的移动。您可以将其放到cron中,以每x数量运行一次。这将阻止屏幕关闭,并且如果您在不观看视频时运行鼠标,鼠标的1 1移动几乎不会引起注意。
#!/bin/bash
#move the mouse
xte 'mousermove 1 1'
顺便说一句,我完全是从xkcd漫画中得到这个想法的。http://xkcd.com/196/
对于与@njallam提供的脚本等效的预滚动版本,并带有一个简洁的Gnome UI元素,请尝试使用Caffeine applet:
https://launchpad.net/caffeine
http://ubuntu-tweak.com/app/caffeine/
plugin-container
到程序列表中,Caffeine将在Flash视频上正常激活(停用会稍有延迟,因为当您关闭带有视频的标签时,插件容器不会立即卸载),这需要几分钟的时间)。
Webupd8上有一篇有关Caffeine和Lightson.sh 的文章,用于在播放Flash或HTML5视频时禁用屏幕保护程序。Lightson脚本适用于Firefox和Chrome,并且可以设置为包含VLC。我希望这将有所帮助。
如果Webupd8提供的用于安装脚本的代码如下:
mkdir -p ~/scripts && cd ~/scripts
wget https://raw.github.com/hotice/lightsOn/master/lightsOn.sh
chmod +x lightsOn.sh
lightsOn.sh
)中用于检测浏览器是否利用HTML5播放器的方法并不是很好。实际上,该方法确定Firefox或Chromium是否处于全屏状态...其余文章很好,并且您的回答最接近我的要求。
使用咖啡因:ppa页。
如何安装:
sudo apt-add-repository ppa:caffeine-developers/ppa
sudo apt-get update
sudo apt-get install caffeine
如何运行:
按Alt+ F2,然后输入caffeine
。
单击“咖啡因”图标,然后单击“禁用屏幕保护程序”。
有点旧了,但是这里有多种浏览器支持:
#!/bin/bash -eu
# List your browsers here
browsers_list=( "firefox" "chrome" "chromium" "opera" )
# Cleanup any bad state we left behind if the user exited while flash was running
gconftool-2 -s /apps/gnome-screensaver/idle_activation_enabled --type bool true
idle_off=0
while true; do
sleep 60
for browser in "${browsers_list[@]}" ; do
for pid in `pgrep $browser` ; do
flash_on=0
if [ -O /proc/$pid/maps ] && grep libflashplayer /proc/$pid/maps > /dev/null ; then
flash_on=1
fi
ss_on=`gconftool-2 -g /apps/gnome-screensaver/idle_activation_enabled`
if [ "$flash_on" = "1" ] && [ "$ss_on" = "true" ]; then
gconftool-2 -s /apps/gnome-screensaver/idle_activation_enabled --type bool false
idle_off=1
elif [ "$flash_on" = "0" ] && [ "$ss_on" = "false" ] && [ "$idle_off" = "1" ]; then
gconftool-2 -s /apps/gnome-screensaver/idle_activation_enabled --type bool true
idle_off=0
fi
done
done
done
只需将脚本保存在某个位置,chmod +x
然后将其添加到StartupApplications。可能有一种使用以下方式列出所有可用浏览器的方法:
update-alternatives --list x-www-browser
但是我不知道该如何处理某些可执行文件没有名称而不是其进程的事实(例如,/usr/bin/google-chrome
运行为chrome
)。
对于使用gnome-screensaver以外的屏幕保护程序(这是Ubuntu的默认屏幕保护程序,从11.10版本开始)的用户,此答案可能会有所帮助。
就我个人而言,我没有换过其他的gnome屏幕保护程序,而且我也不知道出于什么原因,咖啡因对我没有任何作用(也许已经过时了)。
话虽这么说,但从其他人的bash脚本(this,this和this)开始,我设法制作了一个新脚本,gnome_screensaver_off.sh
该脚本非常适合YouTube使用Flash Player渲染视频时的预期效果。
打开终端并运行接下来的命令,然后执行以下说明:
mkdir -p bin
- 如果您没有该bin
目录,它将在您的home
文件夹中创建一个目录。gedit ~/bin/gnome_screensaver_off.sh
-这将gnome_screensaver_off.sh
在gedit中创建新文件。#!/bin/bash
# Getting the previous configuration
back=$(gsettings get org.gnome.settings-daemon.plugins.power sleep-display-ac)
screensaver_is_off=0
delay=$[$back - 10]
# Defining the restore function
function restore {
gsettings set org.gnome.settings-daemon.plugins.power sleep-display-ac $back
gsettings set org.gnome.settings-daemon.plugins.power sleep-display-battery $back
gsettings set org.gnome.desktop.session idle-delay $back
bmin=$[$back / 60]
#notify-send "Screen sleep time restored to $bmin minutes."
notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "Screen sleep time restored to $bmin minutes."
}
# Defining the disable_screensaver function
function disable_screensaver {
# Making sure the user don't mess up...
trap 'restore && exit 0' INT HUP
# Disabling sleep time
gsettings set org.gnome.settings-daemon.plugins.power sleep-display-ac 0
gsettings set org.gnome.settings-daemon.plugins.power sleep-display-battery 0
gsettings set org.gnome.desktop.session idle-delay 0
notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "Screen sleep time turned off."
}
while true; do
if [ "$delay" -le "50" ]; then
sleep 50
else
sleep $delay
fi
flash_on=0
#Check if Chrome, Chromium or Firefox is open with a flash video running on it
if pgrep -lfc ".*((c|C)hrome|chromium|firefox|).*flashp.*" > /dev/null ; then
flash_on=1
else
flash_on=0
fi
if [ "$flash_on" -eq "1" ] && [ "$back" -ne "0" ] && [ "$screensaver_is_off" -eq "0" ]; then
disable_screensaver
screensaver_is_off=1
elif [ "$flash_on" -eq "0" ] && [ "$screensaver_is_off" -eq "1" ]; then
restore
screensaver_is_off=0
fi
done
exit 0
chmod +x gnome_screensaver_off.sh
-授予脚本执行权限。~/bin/gnome_screensaver_off.sh
。如果愿意,可以通过执行以下操作将此脚本设置为在登录时运行:
从这个意义上说,问题仍然存在。
感谢以下人员提供的建议:fossfreedom,Meer Borg,njallam,desgua等。
Chrome中HTML5播放的解决方案
总览
如果以下脚本找到了有效的全屏Chrome会话,则会禁用屏幕保护程序。默认情况下,它将每5分钟运行一次检查。如果满足以下三个条件之一,脚本将自动恢复屏幕保护程序:
脚本
#!/bin/bash
## Variables ##
ChromeWmClass="Google-chrome"
FullScreenProperty="_NET_WM_STATE_FULLSCREEN"
CheckInterval="300" # check every 5 minutes
## Main ##
while true; do
sleep "$CheckInterval"
ActiveWinID=$(xdotool getactivewindow)
if [[ -z "$ActiveWinID" ]]; then
continue
fi
ActiveWinProp=$(xprop -id "$ActiveWinID")
if echo "$ActiveWinProp" | grep "$FullScreenProperty" > /dev/null 2>&1 \
&& echo "$ActiveWinProp" | grep "WM_CLASS" | grep "$ChromeWmClass" > /dev/null 2>&1
then
if [[ -z "$SuspendingID" ]]; then
echo "Suspending screensaver for $ActiveWinID"
xdg-screensaver suspend "$ActiveWinID"
SuspendingID="$ActiveWinID"
elif [[ "$ActiveWinID" = "$SuspendingID" ]]; then
echo "$ActiveWinID is already suspending screensaver."
elif [[ -n "$SuspendingID" ]]; then
echo "Resuming screensaver for $SuspendingID"
xdg-screensaver resume "$SuspendingID"
echo "Suspending screensaver for $ActiveWinID"
xdg-screensaver suspend "$ActiveWinID"
SuspendingID="$ActiveWinID"
fi
else
if [[ -n "$SuspendingID" ]] \
&& xprop -id "$SuspendingID" > /dev/null 2>&1
then
echo "Resuming screensaver for $SuspendingID"
xdg-screensaver resume "$SuspendingID"
SuspendingID=""
else
echo "No change."
fi
fi
done
不可知于桌面且依赖xdotool的最简单的非智力方法是每N秒模拟一次击键。
我使用一个脚本heartbeat.sh
:
#!/bin/bash
while :
do
nice -n 1 xdotool key shift
date +%T ## show some sign of life
sleep 100
done
我在播放视频时启动脚本,然后在不再需要时停止脚本。
xdotool
可以用安装sudo apt-get install xdotool
。
如果您还想进行某种自动音频检测,并且可以使用PulseAudio特定的配方,那么下面是上述解决方案的一种变体,用于检查音频是否正在播放:
#!/bin/bash
while :
do
if [[ ! -z $(pacmd list-sink-inputs | grep RUNNING) ]] ; then
echo 'Audio is playing. Inhibiting screensaver'
nice -n 1 xdotool key shift ;
else
echo 'No audio detected'
fi
date +%T ## show some sign of life
sleep 100
done
如果使用Alsa,则测试可能类似于(未经测试):
if [[ ! -z $(grep RUNNING /proc/asound/card*/pcm*/sub*/status) ]] ; then...
该解决方案的潜在缺点是,即使您只是听音乐或收听广播,屏幕也不会休眠,但是我认为在大多数情况下这不是问题。
对于那些喜欢完全或手动控制的人
此命令行可以设置屏幕保护程序延迟时间:
gsettings set org.gnome.settings-daemon.plugins.power sleep-display-ac 0
使用“ 0”(零)使其保持打开状态,或使用其他值定义延迟(以秒为单位)。
下面的脚本将一直保持屏幕打开状态,直到按下某些键。
#!/bin/bash
#
# To turn screen sleep time off for a while then back on
#
# by desgua 2013/01/27
#
# Getting the previous configuration
back=$(gsettings get org.gnome.settings-daemon.plugins.power sleep-display-ac)
# Defining the restore function
function RESTORE {
gsettings set org.gnome.settings-daemon.plugins.power sleep-display-ac $back
gsettings set org.gnome.settings-daemon.plugins.power sleep-display-battery $back
gsettings set org.gnome.desktop.session idle-delay $back
bmin=$(echo "$back / 60" | bc)
#notify-send "Screen sleep time restored to $bmin minutes."
echo
echo "Screen sleep time restored to $bmin minutes."
echo
exit 0
}
# Making sure the user don't mess up...
trap 'RESTORE && exit 0' INT HUP
# Disabling sleep time
gsettings set org.gnome.settings-daemon.plugins.power sleep-display-ac 0
gsettings set org.gnome.settings-daemon.plugins.power sleep-display-battery 0
gsettings set org.gnome.desktop.session idle-delay 0
echo
echo "Screen sleep time turned off."
echo
#notify-send "Screen sleep time turned off."
# Waiting for user to press some key and then restore the previous configuration
read -n 1 -p 'Press any key to turn it on again. ' b
RESTORE
exit 0
如何运行脚本:
您可以在启动时简单地执行/设置此命令:
gconftool --type string --set /apps/compiz-1/plugins/fade/screen0/dim_unresponsive false
您还可以尝试取消选中firefox上的硬件加速选项吗?
对于使用Ubuntu-Gnome 14.04的用户,有一个名为Caffeine的简单但有用的扩展程序,它提供了一个切换图标,使您可以通过单击禁用顶部栏的调光和屏幕保护程序行为。
可以通过以下指向Gnome-Shell扩展网站的链接安装扩展:
https://extensions.gnome.org/extension/517/caffeine/
来源:本文的评论部分:
http://www.maketecheasier.com/prevent-ubuntu-sleep-while-watching-video/
这是我的解决方案:
https://github.com/yanyingwang/shanghai-tools/blob/master/kit/the-bund-light.md
https://github.com/yanyingwang/shanghai-tools/blob/master/kit/the-bund-light.sh
只需下载the-bund-light.sh
并将其添加到启动应用程序即可:
sudo apt-get install xdotool
cd ~ && wget https://raw.githubusercontent.com/yanyingwang/shanghai-tools/master/kit/the-bund-light.sh
cat >> ~/.config/autostart/the-bund-light.sh.desktop <<EOF
[Desktop Entry]
Type=Application
Exec=$HOME/shanghai-tools/kit/the-bund-light.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[zh_CN]=TheBundLight
Name=TheBundLight
Comment[zh_CN]=
Comment=
EOF
注意:Exec
代码中的值应为the-bund-light.sh
您计算机中的路径。
这在某种程度上取决于您使用的Ubuntu版本。在11.10中,您可以通过单击屏幕右上角的齿轮图标来找到“系统设置”。选择它,然后在弹出的对话框中选择“屏幕”。您可以使用下拉菜单设置在屏幕变为空白之前计算机空闲的时间,或通过单击标有“锁定”的按钮来禁用该功能。
如果您使用的是较旧的系统,则可能需要在其他位置查找此设置,但该位置在某处。
在Ubuntu 14.04 LTS Unity上,上面顶部的脚本不适用于我。在这里,它的更新版本有效:
#!/bin/bash
id_saved=0
sac_saved=0
sbat_saved=0
dim_saved=false
ss_save()
{
id_saved=`gsettings get org.gnome.desktop.session idle-delay`
sac_saved=`gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout`
sbat_saved=`gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout`
dim_saved=`gsettings get org.gnome.settings-daemon.plugins.power idle-dim`
}
ss_set()
{
gsettings set org.gnome.desktop.session idle-delay "$1"
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout "$2"
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout "$3"
gsettings set org.gnome.settings-daemon.plugins.power idle-dim "$4"
}
ss_on()
{
ss_set "$id_saved" "$sac_saved" "$sbat_saved" "$dim_saved"
}
ss_off()
{
ss_set 0 0 0 false
}
trap ss_on EXIT
already_off=0
flash_on=0
ss_save
while true; do
if top -bcw 200 | sed -e '1,/PID/d' | head -1 | grep flash > /dev/null
then
flash_on=1
off_count=0
else
off_count=`expr $off_count + 1`
echo "flash_off_count=$off_count"
if [ $off_count -gt 5 ]; then
flash_on=0
fi
fi
if [ "$flash_on" = "1" -a "$already_off" = "0" ]; then
echo "screensaver: off"
ss_off
already_off=1
elif [ "$flash_on" = "0" -a "$already_off" = "1" ]; then
echo "screensaver: on"
ss_on
already_off=0
elif [ "$already_off" = "0" ]; then
echo "screensaver: save possibly new params"
ss_save # user may update the values
fi
sleep 30
done
顺便说一句,此脚本仅在播放视频时(即Flash Player位于CPU使用者的顶部)禁用屏幕保护程序。