getty
A getty 是一个程序的通用名称,它管理终端线路及其连接的终端。它的目的是保护系统免受未经授权的访问。通常,每个 getty 进程都由 systemd 启动并管理一条终端线路。
安装
agetty 是 Arch Linux 中的默认 getty,它是 util-linux 软件包的一部分。
另一种选择是
- mingetty — 一个最小化的 getty,允许自动登录。
技巧与提示
阶梯效应
agetty 在等待登录时修改 TTY 设置,以便换行符不会转换为 CR-LF。这往往会导致打印到控制台的消息出现“阶梯效应”。
这完全无害,但如果登录后仍然存在,您可以使用以下方法修复此行为
$ stty onlcr
请参阅关于此主题的论坛讨论。
添加额外的虚拟控制台
Agetty 管理虚拟控制台,并且在 Arch Linux 中默认提供六个虚拟控制台。它们通常可以通过按 Ctrl+Alt+F1
到 Ctrl+Alt+F6
访问。
打开文件 /etc/systemd/logind.conf
并将选项 NAutoVTs=6
设置为您在启动时想要的虚拟终端的数量。
如果需要,可以临时启动 getty@ttyN.service
服务。
自动登录到虚拟控制台
配置依赖于 systemd 单元 drop-in 文件 来覆盖传递给 agetty 的默认参数。
虚拟控制台与串行控制台的配置有所不同。在大多数情况下,您希望在虚拟控制台上设置自动登录,(其设备名称为 ttyN
,其中 N
是一个数字)。串行控制台的自动登录配置会略有不同。串行控制台的设备名称类似于 ttySN
,其中 N
是一个数字。
虚拟控制台
为 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=x11
或Environment=XDG_SESSION_TYPE=wayland
来手动将会话类型设置为wayland
或x11
。
如果您不想要完全自动登录,但也不想输入用户名,请参阅 #在虚拟控制台登录时,仅提示默认用户的密码。
如果您想使用 tty 而不是 tty1,请参阅 systemd/FAQ#如何更改 getty 的默认数量?。
串行控制台
创建一个 /etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf
要为 systemd-nspawn 容器配置自动登录,请创建一个 /etc/systemd/system/console-getty.service.d/autologin.conf
如果使用 Getty 可用于从虚拟控制台使用默认用户登录,只需输入密码而无需插入用户名。例如,要在 默认情况下,Arch 启用了 当系统用作服务器但连接了显示器时,显示器将永远保持开启。要 5 分钟后关闭显示器,请创建一个 drop-in 文件。按下任何键,显示器将重新打开。[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --keep-baud --autologin username 115200,57600,38400,9600 - $TERM
Nspawn 控制台
[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]
伪 ttys 的 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
在虚拟控制台登录时,仅提示默认用户的密码
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
getty@tty1
服务。服务文件已经传递了 --noclear
,这会阻止 agetty 清除屏幕。但是 systemd 在启动它之前会清除屏幕。要禁用此行为,请创建一个 /etc/systemd/system/getty@tty1.service.d/noclear.conf
[Service]
TTYVTDisallocate=no
quiet
。超时后关闭显示器
/etc/systemd/system/getty@tty1.service.d/blankscreen.conf
[Service]
ExecStartPost=-/usr/bin/setterm --blank 5
参见