如何使用 Systemd 获得更少的 tty?

如何使用 Systemd 获得更少的 tty?

以前我只是修改过/etc/inittab。现在,使用systemd,它似乎自动启动tty[1-6],我应该如何禁用tty[4-6]?

看起来只有一个 systemd 服务文件,它使用 a%I来识别不同的 tty 会话。我希望我不需要删除该服务并[email protected]手动创建每个服务。

答案1

没有真正需要禁用“额外”TTY,因为systemdgetty 是按需生成的:请参阅man systemd-getty-generator参考资料 。请注意,默认情况下,此自动生成仅适用于 VT6 之前的 VT(以模仿传统 Linux 系统)。

作为伦纳特在博客文章中说1

为了使事情更加高效,登录提示现在仅按需启动。当您切换到 VT 时,getty 服务将被实例化为[电子邮件受保护],[电子邮件受保护]等等。由于我们不必再无条件启动 getty 进程,这使我们可以节省一些资源,并使启动速度更快一些。

logind.conf如果您确实希望配置特定数量的 getty,则只需使用适当的条目进行修改即可,在此示例中为 3:

NAutoVTs=3


1. 事实上,整个系列的帖子——目前数量为 18——管理员的 systemd,非常值得一读。

答案2

在基于 Debian 的系统上,如果您刚刚构建了一个服务器(没有 dbus 服务),则有一个文件会导致在启动时启动 5 个额外的 getty:

/lib/systemd/system/getty.target.wants/getty-static.service

其中写道:

[Service]
Type=oneshot
ExecStart=/bin/systemctl --no-block start [email protected] [email protected] [email protected] [email protected] [email protected]
RemainAfterExit=true

只需删除此文件即可阻止额外的 getty 生成。如果您只想生成一个额外的 getty(用于 2 个 virt 控制台),请随意缩短列表。请注意,您会自动在 tty1 上获得一个,因此您始终至少拥有一个虚拟控制台。

也可以看看:如果缺少 dbus,systemd-logind.service 将无法启动

答案3

要禁用特定 TTY 4-6 上的 getty,同时可能使 1-3 和 7-9 继续工作,请运行:

for i in {4..6}; do
  systemctl mask getty@tty${i}.service
done

mask创建/etc/systemd/system/{name} -> /dev/null有效禁用服务的符号链接。尝试通过运行它systemctl start会显示错误Failed to start NAME.service: Unit NAME.service is masked.

如果您有 A.service Wants=masked.service,那么start A将会成功,但也会在日志中生成依赖项启动错误。

如果你有 B.service Requires=masked.service,那么start B也会失败。

是的,死灵答案。干杯。

相关内容