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

qua*_*ote 41 linux screensaver console virtual-terminal framebuffer

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

例如,如果我从 X 切换到 VT,登录,然后离开系统 5 分钟左右,屏幕将像屏幕保护程序一样空白。它会随任何按键返回,例如屏幕保护程序。

大多数情况下,我只想更改超时,但我也对其他设置感兴趣。

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

qua*_*ote 46

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.
Run Code Online (Sandbox Code Playgroud)

以下是选项、它们在我的 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 in minutes, 0 to disable) 添加到 shell init 文件,如.bashrc
  2. 添加setterm -blank X/etc/rc.local
  3. consoleblank=Y(Y 以秒为单位,0 以禁用)添加到内核命令行,方法是将其添加到/etc/default/grub 中的参数列表,即GRUB_CMDLINE_LINUXGRUB_CMDLINE_LINUX_DEFAULT。(不要忘记update-grub。)

  • 我想指出,`setterm -blank X` 在 _tmux_ 内对我不起作用,但是当我在运行命令之前退出 _tmux_ 时效果很好。 (4认同)
  • 如果你使用 grub2 作为引导加载程序,你可以在 /etc/default/grub `GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0"` 中添加这个内核参数,然后使用 `grub[2]-mkconfig -o /boot/ 更新你的 grub 配置grub/grub.cfg`。 (2认同)
  • 从linux 4.12开始,consoleblank默认为0,即禁用:[tty:禁用默认控制台空白间隔](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/ ?id=a4199f5eb8096d63828f7333fa45650a7b0a99ed) (2认同)

whi*_*ark 10

尝试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
Run Code Online (Sandbox Code Playgroud)

然后使其可执行:

# chmod +x /etc/init.d/setterm
Run Code Online (Sandbox Code Playgroud)

最后,创建 /etc/rcX.d 符号链接(Debian 方式):

# update-rc.d setterm defaults
Run Code Online (Sandbox Code Playgroud)

(如果您厌倦了这种行为,请执行# update-rc.d -f setterm remove。请注意,这-f必须是第一个参数)。