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.


4 Answers 4


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:


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

  • 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
    Commented Oct 23, 2013 at 23:14

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):


In it, it says:

ExecStart=/bin/systemctl --no-block start [email protected] [email protected] [email protected] [email protected] [email protected]

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 Commented 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
    Commented 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
    Commented Dec 15, 2017 at 16:17

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

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.


If you're going to mask as suggested above, make sure to use the right service:

Hence why you're better off masking [email protected], e.g:

systemctl mask --now [email protected]

Reference: https://github.com/systemd/systemd/issues/8067#issuecomment-362902300

P.S. This solution only blocks logind from spawning TTYs meaning the logic is still active. Consider updating logind.conf to correctly disable VTs as seen above.

You must log in to answer this question.

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