28

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 getty@ttyX.service manually.

34

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 getty@tty2.service, getty@tty5.service 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.

  • 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 '13 at 23:14
11

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 getty@tty2.service getty@tty3.service getty@tty4.service getty@tty5.service getty@tty6.service
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

  • 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 – Josip Rodin Jul 9 '17 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 '17 at 12:30
  • 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 '17 at 16:17
5

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.