如何使用Systemd减少ttys?


29

在过去我只是修改了/etc/inittab。现在,在systemd中,它似乎会自动启动tty [1-6],如何禁用tty [4-6]?

看起来只有一个systemd服务文件,并且它使用a %I来识别不同的tty会话。我希望我不需要删除该服务,而是getty@ttyX.service手动创建每个服务。

Answers:


35

真正不需要禁用“额外” TTY,因为根据systemd需要生成了getty:man systemd-getty-generator有关详细信息,请参见。请注意,默认情况下,仅针对VT6以下的VT(模拟传统Linux系统)才执行此自动生成。

正如Lennart在博客文章1中所说

为了使事情更有效率,现在仅按需启动登录提示。当您切换到VT时,getty服务将实例化为getty @ tty2.service,getty @ tty5.service等。由于我们不再需要无条件地启动getty流程,因此这可以节省一些资源,并使启动速度更快。

如果您确实希望配置特定数量的盖蒂,则可以logind.conf使用相应的条目进行修改,在此示例中:3

NAutoVTs=3


1.实际上,为管理员准备的整个职位系列(目前为18个职位)非常值得一读。


谢谢您的回答,杰森。我公司的应用程序安装在物理服务器上,并且在较旧的发行版中,我们将修改inittab来锁定其他ttys。
jcbwlkr

11

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

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

在其中说:

[Service]
Type=oneshot
ExecStart=/bin/systemctl --no-block start getty@tty2.service getty@tty3.service getty@tty4.service getty@tty5.service getty@tty6.service
RemainAfterExit=true

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

另请参阅:如果缺少dbus,则systemd-logind.service无法启动


2
注意:该文件归systemd软件包所有,因此要对其进行修改或删除,dpkg-divert请先使用。但是,还有一个systemd原生的方式把它弄出来的方式-运行sudo systemctl mask getty-static.service,并建立自己的/etc
约瑟普·罗丹

2
mask如果启用的服务比较吵杂,则创建一个具有相同名称的单元/etc来覆盖其内容会更清洁。如果要启动零静态盖蒂值,请使用ExecStart = / bin / true。
sourcejedi '17

其他systemd正确的方法是重写包的版本使用(你真的不要删除文件)sudo systemctl edit getty-static.service,这将创建一个覆盖文件优先于/lib一个
ryeager

8

要禁用特定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也会失败。

是的,necroanswer。干杯。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.