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

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

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

例如,如果我从 X 切换到 VT,登录,然后将系统放置 5 分钟左右,屏幕将像屏幕保护程序一样变黑。按下任何键后屏幕就会恢复,就像屏幕保护程序一样。

我主要只是想改变超时,但我也对其他设置感兴趣。

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

答案1

setterm@whitequark 的回答是一个合理的用户空间工具,但它不是全部。

默认控制台消隐行为在编译时嵌入到内核中。可在启动时配置使用参数控制台空白=或者在用户空间中使用setterm。来自内核文档(内核的命令行参数):

consoleblank=  [KNL] The console blank (screen saver) timeout in
               seconds. A value of 0 disables the blank timer.
               Defaults to 0.

以下是这些选项、它们在我的 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. 将(X 表示分钟,0 表示禁用)添加setterm -blank X到 shell 初始化文件中,例如.bashrc
  2. 添加setterm -blank X/etc/rc.local
  3. consoleblank=Y(Y 以秒为单位,0 表示禁用)添加到内核命令行,方法是将其添加到/etc/默认/grub, 任何一个GRUB_CMDLINE_LINUX或者GRUB_CMDLINE_LINUX_DEFAULT. (别忘了update-grub.)

答案2

尝试setterm -blank $minutes(或传递 0 来禁用);-powersave选项也可能相关。setterm还有很多其他有用的选项。

如果要在系统启动时设置这些属性,请考虑编写一个 initscript。这只是一个放在/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必须是第一个参数)。

答案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 上测试过。

答案4

在我的系统(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.

该命令在交互式 shell 中运行,其中 $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 上进行设置。

相关内容