更改Linux控制台屏幕的消隐行为


38

如何更改Linux虚拟终端上的屏幕消隐行为?

例如,如果我从X切换到VT,登录,然后将系统放置5分钟左右,屏幕将像屏幕保护程序一样变黑。它可以通过任何按键来返回,例如屏幕保护程序。

通常,我只想更改超时时间,但是我对其他设置也很感兴趣。

如果有帮助,我的系统之一正在运行带库存图形驱动程序的Ubuntu 10.04。 fbset显示使用radeondrmfb帧缓冲设备的控制台。


2
希望这可以帮助你,我发现这个时候我遇到了同样的问题askubuntu.com/questions/138918/...

Answers:


42

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中的屏幕会话;跑步时无法设置。

因此,我用于更改默认值的选项是以下选项之一:

  1. setterm -blank X(以分钟为单位X,禁用为0)添加到外壳初始化文件(如.bashrc)
  2. 添加setterm -blank X/etc/rc.local
  3. 添加consoleblank=Y(Y(秒)0〜禁用)到内核的命令通过在将其添加到参数列表的/ etc /默认/蛴螬,无论是GRUB_CMDLINE_LINUXGRUB_CMDLINE_LINUX_DEFAULT。(不要忘记update-grub。)

4
我想指出的是,这setterm -blank Xtmux中对我不起作用,但是当我在运行命令之前退出tmux时,效果很好。
科迪·赫斯

1
如果将grub2用作引导加载程序,则可以在/ etc / default / grub中添加此内核参数GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0",然后使用来更新grub配置grub[2]-mkconfig -o /boot/grub/grub.cfg
user3132194 2014年

3]因为setterm -powerdown只有一半是正确的:setterm -powerdown 3 | hexdump -creturn 033 [ 1 4 ; 3 ]。不确定是什么解释这个逃逸顺序...
Daniel Alder

1
根据您的分布以及您希望更改在何处生效,这些选项中的某些选项可能不起作用。我发现,在伟大的RHEL 5和6 rc.local的作品是setterm这个,而不是7
大卫C.

9

尝试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必须是第一个参数)。


人力资源部 似乎对于即时运行很有用,在我的测试Ubuntu系统上似乎实际上是有效的-powerdown设置。设置启动时系统范围的默认值怎么办?是在/etc/rc.local(或〜/ .bashrc)中运行setterm -blank X还是合理?setterm -powerdown Y
quack quixote

1
是的,但前提是rc.local确实可行。(最近的upstart迁移搞砸了一些东西,显然它已经存在并且可以在我的系统上运行。)否则,您应该创建一个初始化脚本。这很简单:在我们的例子中,当start作为第一个参数传递时,它必须初始化所有内容,否则不执行任何操作。我将在回答中对此进行描述。
whitequark 2010年

该命令setterm -blank X >/dev/ttyN似乎不起作用,所以我认为初始化脚本概念不起作用。遇到引导时间参数tho并进行了更多研究。我似乎是错的-powerdown-powersave; 尚未经过全面测试,但这些都无法在我的系统上运行。 setterm -blank X只能从真正的VT运行,并且会影响所有VT,因此通过/etc/rc.local运行一次是合理的。(Upstart不会
删除

1
啊 似乎在上setterm发出转义序列stdout,但使用以下命令检查TTY类型stdin:我刚刚检查了代码,并按setterm ... >/dev/ttyN </dev/ttyN预期工作。
whitequark 2010年

这很有意义,并且可以工作(从真正的TTY),但是完全使用该语法有什么意义呢?(1)仍然无法在屏幕(或其他潜在的PTY)中工作,这在指定/ dev / ttyN会很有用;(2)设置一个VT会影响所有操作,因此不需要initscript循环。
quack quixote 2010年

3

如果有人在寻找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上测试。


2

如果您正在运行使用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";

2

在我的系统(各种版本的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=0GRUB_CMDLINE_LINUX参数。然后运行grub2-mkconfig -o /boot/grub2/grub.cfg并重新启动。

我没有尝试consoleblank在RHEL5或6上进行设置。


2
RHEL7使用systemd;rc.local默认情况下未连接到终端。我认为您可以添加其他内容</dev/tty1 >/dev/tty1或使其
生效

1

Linux控制台专用CSI序列

要设置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]'

参考:


0

添加gnome-screensaver-command --exit到我的.profile文件后,在Debian Linux(Wheezy)上为我解决了此问题。

以为我会添加此内容,以帮助其他正在努力消除屏幕空白的人。

标题为“调暗屏幕以节省电量”的复选框出现故障。即使未选中,它仍会根据所选的不活动时间使屏幕空白。

更新:我实际上需要sleep 30 && /usr/bin/gnome-screensaver-command --exit &使其正常工作。GNOME屏幕保护程序似乎在处理.profile之后很长时间才启动。


2
这是关于控制台屏幕空白,而不是Gnome屏幕保护程序。
basic6'7年
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.