31

In the old days I just modified /etc/inittab. Now, with systemd, it seems to start tty[1-6] automatically, how should I disable tty[4-6]?

Looks like there's only one systemd service file, and it use a %I to discern different tty sessions. I hope I don't need to remove that service, and create each [email protected] manually.

0

3 Answers 3

39

There is no real need to disable "extra" TTYs as under systemd gettys are generated on demand: see man systemd-getty-generator for details. Note that, by default, this automatic spawning is done for the VTs up to VT6 only (to mimic traditonal Linux systems).

As Lennart says in a blog post1:

In order to make things more efficient login prompts are now started on demand only. As you switch to the VTs the getty service is instantiated to [email protected], [email protected] and so on. Since we don't have to unconditionally start the getty processes anymore this allows us to save a bit of resources, and makes start-up a bit faster.

If you do wish to configure a specific number of gettys, you can, just modify logind.conf with the appropriate entry, in this example 3:

NAutoVTs=3


1. In fact the entire series of posts—currently numbering 18— systemd for Administrators, is well worth reading.

1
  • 1
    Thanks for the answer, Jason. My company's application is shipped on a physical server and on older distributions we would modify inittab to lock out other ttys.
    – jcbwlkr
    Oct 23, 2013 at 23:14
12

On Debian-based systems, there is a file that causes 5 extra getty's to be launched on startup if you've just built a server (without dbus service):

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

In it, it says:

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

Just deleting this file will stop the extra getty's from spawning. Feel free to shorten the list if you want to just spawn one extra getty (for 2 virt consoles). Note that you automatically get one on tty1 so you always have at least one virtual console.

See also: systemd-logind.service fails to start if dbus is missing

3
  • 2
    NB: the file is owned by the systemd package, so to modify or delete it, use dpkg-divert first. But, there's also a systemd-native way to get it out of the way - run sudo systemctl mask getty-static.service and set up your own in /etc Jul 9, 2017 at 13:23
  • 2
    masking an enabled service is noisy, it would be cleaner to create a unit with the same name in /etc to override it's contents. Use ExecStart=/bin/true if you desire to start zero static getty's.
    – sourcejedi
    Jul 30, 2017 at 12:30
  • 1
    the other systemd correct way is to override the package version (you really should NEVER delete that file) using sudo systemctl edit getty-static.service, which will create an override file that takes precedence over the /lib one
    – ryeager
    Dec 15, 2017 at 16:17
12

To disable gettys on particular TTYs 4-6 while possibly leaving 1-3 and 7-9 working, run:

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

mask creates symlink /etc/systemd/system/{name} -> /dev/null which effectively disables service. Attempt to run it via systemctl start will display error Failed to start NAME.service: Unit NAME.service is masked.

If you have A.service Wants=masked.service, then start A will succeed but also generate dependency start error in journal.

If you have B.service Requires=masked.service, then start B will also fail.

Yup, necroanswer. Cheers.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .