Answers:
setterm
来自@whitequark的答案是一个合理的用户空间工具,但这不是全部。
默认的控制台消隐行为在编译时被烘焙到内核中。可以在启动时使用参数consoleblank =进行配置,或者在用户空间中使用进行配置setterm
。从内核文档(kernel-parameters.txt):
consoleblank= [KNL] The console blank (screen saver) timeout in
seconds. Defaults to 10*60 = 10mins. A value of 0
disables the blank timer.
以下是选项,它们在我的Ubuntu系统上的默认设置以及影响范围:
setterm -blank [0-60]
; 查询时总是报告0;在真实VT上运行时有效;影响所有真实的TTY;在VT上的屏幕会话中运行时无效。setterm -powerdown [0-60]
; 始终报告“ 3]”(??);似乎没有任何作用。Ubuntu内核不启用APM_DISPLAY_BLANK,这可能是相关的。consoleblank=N
; 默认为600(10分钟);影响所有真实的VT;影响VT中的屏幕会话;跑步时无法设置。因此,我用于更改默认值的选项是以下选项之一:
setterm -blank X
(以分钟为单位X,禁用为0)添加到外壳初始化文件(如.bashrc)。setterm -blank X
到/etc/rc.local。consoleblank=Y
(Y(秒)0〜禁用)到内核的命令通过在将其添加到参数列表的/ etc /默认/蛴螬,无论是GRUB_CMDLINE_LINUX或GRUB_CMDLINE_LINUX_DEFAULT。(不要忘记update-grub
。)setterm -blank X
在tmux中对我不起作用,但是当我在运行命令之前退出tmux时,效果很好。
GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0"
,然后使用来更新grub配置grub[2]-mkconfig -o /boot/grub/grub.cfg
。
3]
因为setterm -powerdown
只有一半是正确的:setterm -powerdown 3 | hexdump -c
return 033 [ 1 4 ; 3 ]
。不确定是什么解释这个逃逸顺序...
尝试setterm -blank $minutes
(或传递0以禁用);-powersave
选项也可能相关。setterm
还有很多其他有用的选项。
如果要在系统启动时设置这些属性,请考虑编写初始化脚本。这只是放置在/etc/init.d
目录中的脚本。称之为setterm
:
#!/bin/sh
[ "$1" == "start" ] || exit 0 # only initialize everything when called as /etc/init.d/setterm start
for term in /dev/tty[0-9]*; do # select all ttyNN, but skip ttyS*
setterm -blank 0 >$term <$term
setterm -powersave off >$term <$term
done
然后使其可执行:
# chmod +x /etc/init.d/setterm
最后,创建/etc/rcX.d符号链接(Debian方式):
# update-rc.d setterm defaults
(如果您会厌倦这种行为,请执行# update-rc.d -f setterm remove
。请注意,它-f
必须是第一个参数)。
-powerdown
设置。设置启动时系统范围的默认值怎么办?是在/etc/rc.local(或〜/ .bashrc)中运行setterm -blank X
还是合理?setterm -powerdown Y
rc.local
确实可行。(最近的upstart
迁移搞砸了一些东西,显然它已经存在并且可以在我的系统上运行。)否则,您应该创建一个初始化脚本。这很简单:在我们的例子中,当start
作为第一个参数传递时,它必须初始化所有内容,否则不执行任何操作。我将在回答中对此进行描述。
setterm -blank X >/dev/ttyN
似乎不起作用,所以我认为初始化脚本概念不起作用。遇到引导时间参数tho并进行了更多研究。我似乎是错的-powerdown
和-powersave
; 尚未经过全面测试,但这些都无法在我的系统上运行。 setterm -blank X
只能从真正的VT运行,并且会影响所有VT,因此通过/etc/rc.local运行一次是合理的。(Upstart不会
setterm
发出转义序列stdout
,但使用以下命令检查TTY类型stdin
:我刚刚检查了代码,并按setterm ... >/dev/ttyN </dev/ttyN
预期工作。
如果有人在寻找Debian的另一种可能的解决方案(可能不是Ubuntu):
在中/etc/kbd/config
,查找名为“ BLANK_TIME”的设置:
# screen blanking timeout. monitor remains on, but the screen is cleared to
# range: 0-60 min (0==never) kernels I've looked at default to 10 minutes.
# (see linux/drivers/char/console.c)
BLANK_TIME=30
将其更改为0,将禁用它:
BLANK_TIME=0
在Debian 6和7上测试。
如果您正在运行使用upstart的较新Ubuntu,则可以使用:
for file in /etc/init/tty*.conf; do tty="/dev/`basename $file .conf`"; echo "post-start exec setterm -blank 0 -powersave off >$tty <$tty" | sudo tee -a "$file"; done
关于这里发生的情况的一些解释:
较新的Ubuntu版本使用upstart进行系统启动。有了新贵,Linux控制台就使用存储在/ etc / init中的配置文件进行了设置。上面的命令首先遍历每个配置文件:
for file in /etc/init/tty*.conf;
$ file中tty的新贵配置文件名称用于构建tty设备的名称:
tty="/dev/`basename $file .conf`";
建立了一个新贵的“ post-start”命令,该命令运行“ setterm”以在启动tty之后禁用屏幕消隐和节能:
echo "post-start exec setterm -blank 0 -powersave off >$tty <$tty"
最后,该命令将附加到新贵的配置文件中:
| sudo tee -a "$file";
在我的系统(各种版本的RedHat Enterprise Linux)上,我发现需要不同的方法。
对于RHEL 5和6系统,我可以添加该行
/bin/setterm -blank 0 -powerdown 0 -powersave off
到/etc/rc.local
。这将在系统启动时禁用控制台屏幕空白。
我发现这在RHEL 7系统上不起作用。在RHEL7上,从rc.local运行setterm会导致生成错误:
setterm: $TERM is not defined.
该命令在交互式外壳程序中工作,其中定义了$ TERM(如linux
)。如果我强迫setterm使用它:
/bin/setterm -term linux -blank 0 -powerdown 0 -powersave off
然后我得到另一个错误:
setterm: cannot (un)set powersave mode: Inappropriate ioctl for device
即使从交互式会话使用相同的命令也可以正常工作。设置consoleblank
内核参数有效。
在RHEL7,编辑/etc/default/grub
和附加consoleblank=0
的GRUB_CMDLINE_LINUX
参数。然后运行grub2-mkconfig -o /boot/grub2/grub.cfg
并重新启动。
我没有尝试consoleblank
在RHEL5或6上进行设置。
</dev/tty1 >/dev/tty1
或使其
要设置sleep mode/screensaver
输入时间(其中X是以分钟为单位的时间; 0 =从不):
(从串行控制台)
echo -e '\033[9;X]' > /dev/tty1
或(从framebuffer控制台)
echo -e '\033[9;X]'
或在每次启动时进行设置,请使用/etc/inittab
:
tty1::sysinit:echo -e '\033[9;X]'
参考:
添加gnome-screensaver-command --exit
到我的.profile
文件后,在Debian Linux(Wheezy)上为我解决了此问题。
以为我会添加此内容,以帮助其他正在努力消除屏幕空白的人。
标题为“调暗屏幕以节省电量”的复选框出现故障。即使未选中,它仍会根据所选的不活动时间使屏幕空白。
更新:我实际上需要sleep 30 && /usr/bin/gnome-screensaver-command --exit &
使其正常工作。GNOME屏幕保护程序似乎在处理.profile之后很长时间才启动。