内核启动参数:consoleblank

内核启动参数:consoleblank

我有一台 24/7 全天候开机的笔记本电脑,它运行没有窗口系统(只有 tty)的 Debian。我浏览了推荐 setterm 或 vbetool 的各种帖子,并尝试制作 systemd 启动脚本,但不起作用。这些方法在 ssh 上也不起作用。

如何在启动时关闭笔记本电脑的屏幕?或者 ssh?

(关闭盖子并修改 /etc/systemd/logind.conf 不起作用,因为如果我通过 ssh 重新启动它,它将不会重新启动,因为 BIOS 会将其置于睡眠模式,我无法在 BIOS 中更改这种行为)

编辑:如果这是一个关键的细节,我很抱歉,但我完全忘了说我已经在内核选项中添加了 nomodeset /etc/default/grub

答案1

编辑:如果这是一个关键的细节,我很抱歉,但我完全忘了说我已经在 /etc/default/grub 中的内核选项中添加了 nomodeset。

然后您无法关闭屏幕,因为使用 nomodeset 您已经禁用了大部分 GPU 驱动程序以及它通常提供的所有输出控制。


原始答案:

setterm应该可以工作;然而,它的工作方式是通过对其执行特殊操作输入端,因此,如果您需要从 SSH 或服务使用它,则必须专门将其输入和输出重定向到其中一个“控制台”终端。除此之外,有时它使用 Linux 特定的 ioctl 调用,但有时它使用终端级“ANSI 代码”,因此您需要用适合 Linux 控制台的 TERM 覆盖 TERM(而不是通过 SSH 获得的任何内容)。

# TERM=linux setterm --blank force </dev/tty1 >/dev/tty1
[Service]
Type=oneshot
Environment="TERM=linux"
ExecStart=setterm --blank force
StandardInput=tty
TTYPath=/dev/tty1
# (StandardInput=file:/dev/tty1 may actually work better.)

如果这不能关闭屏幕,请尝试添加--powersave powerdown

您还可以在内核级别完全禁用视频输出;使用内核选项启动video=LVDS-1:D以禁用名为“LVDS-1”的输出。(检查 /sys/class/drm 以查找输出名称。)

vbetool 可能不再起作用,因为它通过直接调用“视频 BIOS”来工作,而现代系统并非如此。(即便如此,它也绕过了操作系统,有时会造成混乱。)

答案2

内核启动参数:consoleblank

Linux 有一个启动参数consoleblank=XX,会在 XX 秒后关闭 tty。

要使用此参数:

  • 编辑/etc/default/grub
  • 找到以下行GRUB_CMDLINE_LINUX="foo=bar"
  • 添加参数:GRUB_CMDLINE_LINUX="consoleblank=60 foo=bar"
  • 跑步update-grub
  • 重启

这样,显示屏将在一分钟后关闭(如果对您来说时间太短,请调整数字)。这在登录提示和有人登录时都有效。

它不会影响 Wayland。不确定是否会影响经典 Xorg。


setterm可能也很有用,但我发现它有点脆弱。它有时会停止工作,而原因不明。它也更难正确设置(需要在启动时运行,但需要在实际的 tty 上运行)。

答案3

这绝对是一种 hack,但如果您只是想完成它,则可以通过 ssh/startup 脚本回显到 ACPI 接口文件是一种选择。只需回显 0 即可关闭屏幕,然后回显 的值即可/sys/class/backlight/acpi_video0/max_brightness将其重新打开。根据您的显卡,acpi_video0可能会有不同的名称。

# turn_screen_off.sh

echo 0 >> /sys/class/backlight/acpi_video0/brightness

请注意,除非您使用一些 udev 技巧,否则该脚本必须以 root 身份运行才能起作用。

相关内容