以前我只是修改过/etc/inittab
。现在,使用systemd,它似乎自动启动tty[1-6],我应该如何禁用tty[4-6]?
看起来只有一个 systemd 服务文件,它使用 a%I
来识别不同的 tty 会话。我希望我不需要删除该服务并[email protected]
手动创建每个服务。
答案1
没有真正需要禁用“额外”TTY,因为systemd
getty 是按需生成的:请参阅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 上获得一个,因此您始终至少拥有一个虚拟控制台。
答案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
也会失败。
是的,死灵答案。干杯。