跳转至内容

getty

来自 ArchWiki
(重定向自 Agetty)

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

安装

agetty 是 Arch Linux 中的默认 getty,作为 util-linux 包的一部分。

另一种选择是 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 --noreset --noclear --autologin username - ${TERM}
提示
  • 默认的 getty@.service 中的 Type=idle 选项会延迟服务启动,直到所有作业(单元的状态更改请求)完成,以避免启动消息干扰登录提示。当 自动启动 X 时,通过在 drop-in 文件中添加 Type=simple 来立即启动 getty@tty1.service 可能会很有用。init 系统和 startx 都可以被 静默,以避免在启动过程中它们的输出信息交错出现。
  • 有关隐藏登录提示的示例虚拟控制台 drop-in 文件,请参阅 Silent boot#agetty
  • 上述代码片段将导致 loginctl 会话类型被设置为 tty。如果需要(例如,如果 自动启动 X),可以通过在此文件中添加 Environment=XDG_SESSION_TYPE=x11Environment=XDG_SESSION_TYPE=wayland 来手动将会话类型设置为 waylandx11

如果你不想完全自动登录,但也不想输入用户名,请参阅 #在虚拟控制台登录时仅提示输入密码(针对默认用户)

如果你想使用 tty1 以外的 tty,请参阅 systemd/FAQ#How do I change the default number of gettys?

串行控制台

创建一个 drop-in 文件

/etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --noreset --noclear --autologin username --keep-baud 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 --noreset --noclear --autologin username --keep-baud 115200,57600,38400,9600 - ${TERM}

如果使用 machinectl login my-container 方法访问容器,请同时调整管理 pts/[0-9] 伪终端的 container-getty@.service 模板。

/etc/systemd/system/container-getty@.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --noreset --noclear --autologin username - ${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

超时后关闭显示器

此文章或章节有候选内容合并到 Display Power Management Signaling#Linux console

注意:此提示实际上是关于控制台空白的,我们对此有一个专门的部分。 (请在 Talk:Getty 中讨论)

当系统用作服务器但连接了显示器时,显示器将永远亮着。要设置 5 分钟后关闭显示器,请创建一个 drop-in 文件。按下任意键,显示器将重新亮起。

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

参见