观看YouTube时,如何防止屏幕变暗或屏幕锁定开始?


100

几秒钟后,我的屏幕亮度会变暗以节省电池电量。这是Ubuntu 12.04中的默认设置。但是,观看视频时不应暗淡。

当我使用VLC等本机应用程序观看视频时,此方法可以正常工作。但是,对于浏览器内视频,不会阻止屏幕变暗。这很烦人,因为您必须每10秒左右移动一次光标。

我曾经在Mac OSX上使用过相同的调光设置,并且正确考虑了Flash视频。

有人知道如何使YouTube防止屏幕变暗吗?


4
因此,由于这是大多数Ubuntu用户想要解决的问题,因此我们可以认为这是操作系统中的错误还是软件(Flash,Chrome,Firefox)中的错误并获得修复,从而使每个用户都不需要来这个AskUbuntu页面?
blong 2015年

1
我很感谢所有帮助,但是这很荒谬,它发生在2016年。来吧,这些是不受支持的基本内容。还有HTML5视频-为什么它这么慢且容易出错?要解决的问题这么大吗?它本来应该替换Flash ..现在看来太荒谬了。
多尔

我个人很欣赏我的浏览器无法阻止计算机锁定,因此我认为这是一个错误。您的要求可能会使计算机的安全性降低。
EarthmeLon

@earthmeLon或任何人,您能解释一下它的安全性如何吗?
谢尔盖·乔波夫

Answers:


54

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

如果愿意,可以通过执行以下操作将此脚本设置为在登录时运行:

  1. 运行程序“启动应用程序”
  2. 点击“添加”
  3. 在名称下输入“ FlashMonitor”或您会识别的名称
  4. 在命令类型下 ~/bin/flash_saver.sh
  5. 在注释下(如果需要)输入简短说明。例如,“正在运行Flash时停止屏幕关闭”

来源:HOWTO:在Flash运行时禁用屏幕保护程序-ubuntuforums


4
如果可以的话,我会投票赞成+5。ubuntu论坛中的脚本编写得非常好,您的答案也是如此。对于实际包括源代码也要大加赞赏。
con-f-use


4
这确实仅适用于Firefox。任何人都可以重写此代码以获得多浏览器支持?
史蒂文·罗斯

3
可以与html5视频播放器一起使用吗?
kdureidy 2014年

2
确实需要HTML5视频支持。
ulidtko 2014年

31

编辑

如果您使用的是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 &

然后,您可以选择应禁用屏幕保护程序的程序:
vlcVLC,mplayerMovie Player等。

咖啡因偏好

希望能帮助到你。


这在12.04上运行得很好,谢谢!
Geppettvs D'Constanzo

感谢您提供解决方案,但这是最好的解决方案?这不是错误吗?这一定是个错误。这是在gnome上发生的,但不是在统一上发生的。
Gerard Roche

我现在使用的是12.04,并且仍在使用该应用程序,不是停止屏幕保护程序,而是要快速禁用屏幕亮度降低。对于我所看到的是否是错误,它存在于浏览器中:全屏显示时禁止屏保是他的责任。
塞勒姆

不会安装在13.10
NoBugs 2013年

1
由于Caffeine甚至可以在Ubuntu 16.04 Xenial中使用,因此该答案需要更新。;)
Andrea Lazzarotto

14

GitHub上有一个不错的小脚本,名为lightsOn,可以完成您想要的技巧。

基本上,它会寻找全屏视频(在Firefox或Chrome浏览器中闪烁,mplayer或vlc),如果是,则禁用xscreensaver以及自动电源管理器的暗屏功能。

从脚本本身:

如何使用:以您想要检查的秒数启动脚本
全屏即可完成。例:
 “ ./lightsOn.sh 120&”将每120秒检查一次Mplayer,
 VLC,Firefox或Chromium是全屏屏幕,如果有,则延迟屏幕保护程序和电源管理。
 您希望秒数比所需时间少约10秒
 您的屏幕保护程序或电源管理即可激活。
 如果您不传递参数,则每50秒检查一次。

因此,请按照我在此处的回答,从自动启动文件夹中调用脚本。

调整脚本是否运行flash / vlc / mplayer

记住要赋予脚本执行权,即

chmod +x lightsOn.sh

3
lightson似乎无人维护,但也有活叉(github.com/partizand/lightsOngithub.com/unhammer/lightsOn
杰罗姆

10

这不完全是您想要的,但是这个小脚本每次运行都会记录鼠标的移动。您可以将其放到cron中,以每x数量运行一次。这将阻止屏幕关闭,并且如果您在不观看视频时运行鼠标,鼠标的1 1移动几乎不会引起注意。

#!/bin/bash
#move the mouse
xte 'mousermove 1 1' 

顺便说一句,我完全是从xkcd漫画中得到这个想法的。http://xkcd.com/196/


或从Bash脚本(带有while和sleep)运行它,就像这里的其他一些答案一样。
彼得·莫滕森

7

对于与@njallam提供的脚本等效的预滚动版本,并带有一个简洁的Gnome UI元素,请尝试使用Caffeine applet:

https://launchpad.net/caffeine
http://ubuntu-tweak.com/app/caffeine/


我安装了Caffeine,但没有看到您必须激活它才能使其正常工作。谢谢!
史蒂文·罗斯

Caffeine开发人员提供的信息:“ Flash视频支持已消失,因为它太复杂了,无法正常工作。”因此,您可以忘记其设置中的Flash video复选框。但是,如果您使用的是Firefox,则将其添加plugin-container到程序列表中,Caffeine将在Flash视频上正常激活(停用会稍有延迟,因为当您关闭带有视频的标签时,插件容器不会立即卸载),这需要几分钟的时间)。
Whtyger 2014年

6

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

1
该脚本(lightsOn.sh)中用于检测浏览器是否利用HTML5播放器的方法并不是很好。实际上,该方法确定Firefox或Chromium是否处于全屏状态...其余文章很好,并且您的回答最接近我的要求。
RaduRădeanu13年

1
我一直在做更多研究,发现基于CPU或网络活动的脚本。它位于薄荷论坛上,可能会给您更好的控制。欣赏YouTube。
Garry 2013年

5

您不仅应该检查屏幕保护程序选项,还应该检查电源管理选项,尤其是“为...处于非活动状态时将显示器置于睡眠状态”选项。

请注意,在笔记本电脑上,有两个名称相同的设置:笔记本电脑使用交流电源运行时和电池供电时。


2

使用咖啡因:ppa页

如何安装:

sudo apt-add-repository ppa:caffeine-developers/ppa 
sudo apt-get update
sudo apt-get install caffeine

如何运行:

  1. Alt+ F2,然后输入caffeine

  2. 单击“咖啡因”图标,然后单击“禁用屏幕保护程序”。


1
我无意禁用屏幕保护程序。无论如何,我尝试了咖啡因,但没有任何效果。我不认为它已更新为最新版本的Gnome。
RaduRădeanu2013年

@RaduRădeanu咖啡因会禁用计算机的屏幕保护程序,而该屏幕保护程序与Web浏览器无关。
2013年

@Alvar如果您愿意的话...反正对我没用。
RaduRădeanu13年

2

有点旧了,但是这里有多种浏览器支持:

#!/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)。


它对铬有用吗?
彼得·莫滕森

2

对于使用gnome-screensaver以外的屏幕保护程序(这是Ubuntu的默认屏幕保护程序,从11.10版本开始)的用户,此答案可能会有所帮助。

就我个人而言,我没有换过其他的gnome屏幕保护程序,而且我也不知道出于什么原因,咖啡因对我没有任何作用(也许已经过时了)。

话虽这么说,但从其他人的bash脚本(thisthisthis)开始,我设法制作了一个新脚本,gnome_screensaver_off.sh该脚本非常适合YouTube使用Flash Player渲染视频时的预期效果。

YouTube使用Flash Player时禁用gnome屏幕保护程序

打开终端并运行接下来的命令,然后执行以下说明:

  • 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

如果愿意,可以通过执行以下操作将此脚本设置为在登录时运行:

  1. Dash中搜索“ 启动应用程序”,将其打开,然后单击“ 添加”
  2. 在名称下输入“ YouTube Monitor”或您会识别的名称。
  3. 在命令下键入“ /home/$USER/bin/gnome_screensaver_off.sh”(用您的用户名更改$ USER)。
  4. 在注释下(如果需要),输入简短说明(例如,“当Flash Player在浏览器中运行时,停止屏幕关闭”)。

YouTube使用HTML5播放器时禁用gnome屏幕保护程序

从这个意义上说,问题仍然存在。

感谢以下人员提供的建议:fossfreedomMeer Borgnjallamdesgua等。


2

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

2

不可知于桌面且依赖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...

该解决方案的潜在缺点是,即使您只是听音乐或收听广播,屏幕也不会休眠,但是我认为在大多数情况下这不是问题。


1

对于那些喜欢完全或手动控制的人

此命令行可以设置屏幕保护程序延迟时间:

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

如何运行脚本:

  1. 将文本复制到一个空文件中,
  2. 保存文件,
  3. 使文件可执行,
  4. 从终端运行它。

1

PPA中的VLC 除了是VLC的最新版本外,还正确实现了屏幕保护程序禁止功能。

您可以使用以下命令添加此PPA

sudo add-apt-repository ppa:n-muench/vlc

这与浏览器内视频的变暗有什么关系?
Peter Mortensen

许多不同的问题似乎已合并到这一问题中。查看编辑历史记录,您可能会发现某些问题包括屏幕保护程序的问题。
罗布

0

您可以在启动时简单地执行/设置此命令:

gconftool --type string --set /apps/compiz-1/plugins/fade/screen0/dim_unresponsive false   

您还可以尝试取消选中firefox上的硬件加速选项吗?


2
我之前说过:我不打算禁用屏幕保护程序。我只想防止观看YouTube时屏幕变暗。
RaduRădeanu13年


0

这是我的解决方案:

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您计算机中的路径。


0

这在某种程度上取决于您使用的Ubuntu版本。在11.10中,您可以通过单击屏幕右上角的齿轮图标来找到“系统设置”。选择它,然后在弹出的对话框中选择“屏幕”。您可以使用下拉菜单设置在屏幕变为空白之前计算机空闲的时间,或通过单击标有“锁定”的按钮来禁用该功能。

如果您使用的是较旧的系统,则可能需要在其他位置查找此设置,但该位置在某处。


4
是的,但我不想永久禁用它。
ste_kwr 2012年

0

我使用以下脚本作为解决方法:

#!/bin/bash
while true
do
   xdotool key Shift_L
   sleep 1m
done

它模拟每分钟一次左移键,防止屏幕变暗。当然,这样做的缺点是每次观看youtube时都必须运行脚本。另一方面,它很简单,并且可以使用大多数(如果不是全部)配置。

您可能需要安装此

sudo apt-get install xdotool

0

在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使用者的顶部)禁用屏幕保护程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.