getty

出自 ArchWiki

getty 是管理终端线路及其连接终端的程序的通用名称。 它的目的是保护系统免受未经授权的访问。 通常,每个 getty 进程都由 systemd 启动并管理单个终端线路。

安装

agetty 是 Arch Linux 中的默认 getty,它是 util-linux 软件包的一部分。

另一种选择是

  • mingetty — 一个允许自动登录的最小 getty。
mingettyAUR || mingettyAUR

技巧与诀窍

阶梯效应

agetty 在等待登录时修改 TTY 设置,以便换行符不转换为 CR-LF。 这往往会导致打印到控制台的消息出现“阶梯效应”。

这完全无害,但如果登录后仍然存在,您可以使用以下方法修复此行为

$ stty onlcr

请参阅关于此主题的论坛讨论

添加额外的虚拟控制台

Agetty 管理虚拟控制台,并且 Arch Linux 默认提供六个虚拟控制台。 它们通常可以通过按 Ctrl+Alt+F1Ctrl+Alt+F6 访问。

打开文件 /etc/systemd/logind.conf 并将选项 NAutoVTs=6 设置为您在启动时想要的虚拟终端的数量。

如果需要,可以临时启动 getty@ttyN.service 服务。

自动登录到虚拟控制台

配置依赖于 systemd 单元 drop-in 文件来覆盖传递给 agetty 的默认参数。

虚拟控制台与串行控制台的配置有所不同。 在大多数情况下,您希望在虚拟控制台上设置自动登录(其设备名称为 ttyN,其中 N 是一个数字)。 串行控制台的自动登录配置将略有不同。 串行控制台的设备名称看起来像 ttySN,其中 N 是一个数字。

提示: 考虑使用 greetd 的自动登录功能。 如果初始会话退出,它不会再次自动登录,而是会显示登录屏幕。

虚拟控制台

getty@tty1.service 创建一个 drop-in 文件,内容如下

/etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin username %I $TERM
提示
  • 默认 getty@.service 中的 Type=idle 选项将延迟服务启动,直到所有作业(对单元的状态更改请求)完成,以避免启动消息污染登录提示符。 当自动启动 X 时,通过在 drop-in 文件中添加 Type=simple 立即启动 getty@tty1.service 可能很有用。 初始化系统和 startx 都可以静默启动,以避免在启动期间交错显示它们的消息。
  • 请参阅 Silent boot#agetty,其中提供了一个虚拟控制台 drop-in 文件的示例,该文件完全隐藏了登录提示符。
  • 上面的代码段将导致 loginctl 会话类型设置为 tty。 如果需要(例如,如果自动启动 X),则可以通过在此文件中添加 Environment=XDG_SESSION_TYPE=x11Environment=XDG_SESSION_TYPE=wayland 将会话类型手动设置为 waylandx11

如果您不想要完全自动登录,但也不想键入用户名,请参阅#在虚拟控制台登录时仅提示默认用户的密码

如果您想使用 tty 而不是 tty1,请参阅 systemd/FAQ#如何更改 getty 的默认数量?

串行控制台

创建一个 drop-in 文件

/etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --keep-baud --autologin username 115200,57600,38400,9600 - $TERM

Nspawn 控制台

要为 systemd-nspawn 容器配置自动登录,请通过创建一个 drop-in 文件来覆盖 console-getty.service

/etc/systemd/system/console-getty.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --keep-baud --autologin username - 115200,38400,9600 $TERM

如果使用 machinectl login my-container 方法访问容器,还要调整管理 pts/[0-9] 伪 tty 的 container-getty@.service 模板

/etc/systemd/system/container-getty@.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --keep-baud --autologin username - 115200,38400,9600 $TERM

在虚拟控制台登录时仅提示默认用户的密码

Getty 可用于从虚拟控制台以默认用户身份登录,输入密码但无需插入用户名。 例如,要在 tty1 上提示 username 的密码

/etc/systemd/system/getty@tty1.service.d/skip-username.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -- username' --noclear --skip-login - $TERM

让启动消息保留在 tty1 上

默认情况下,Arch 启用了 getty@tty1 服务。 服务文件已经传递了 --noclear,这会阻止 agetty 清除屏幕。 但是 systemd 会在启动它之前清除屏幕。 要禁用此行为,请创建一个 drop-in 文件

/etc/systemd/system/getty@tty1.service.d/noclear.conf
[Service]
TTYVTDisallocate=no
注意

超时后关闭显示器

本文或本节是与显示电源管理信号#Linux 控制台合并的候选对象。

注意: 此技巧本质上是关于控制台消隐的,我们有专门的章节介绍它。 (在 Talk:Getty 中讨论)

当系统用作服务器但连接了显示器时,显示器将永远保持开启状态。 要在 5 分钟后关闭显示器,请创建一个 drop-in 文件。 按任意键,显示器将重新打开。

/etc/systemd/system/getty@tty1.service.d/blankscreen.conf
[Service]
ExecStartPost=-/usr/bin/setterm --blank 5

参见