如何更改 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 中的屏幕会话;运行时无法设置。
因此,我更改默认设置的选项如下:
- 将(X 表示分钟,0 表示禁用)添加
setterm -blank X
到 shell 初始化文件中,例如.bashrc。 - 添加
setterm -blank X
/etc/rc.local。 - 将
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 上进行设置。