我有一台 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 身份运行才能起作用。