Как получить меньше тты с Systemd?

29

В старые времена я просто модифицировал /etc/inittab. Теперь, с помощью systemd, кажется, что tty [1-6] запускается автоматически, как мне отключить tty [4-6]?

Похоже, есть только один файл службы systemd, и он использует %Iдля распознавания различных сеансов tty. Надеюсь, мне не нужно удалять этот сервис и создавать каждый getty@ttyX.serviceвручную.

маргаритка
источник

Ответы:

35

Нет реальной необходимости отключать «лишние» TTY, поскольку под systemdgettys генерируются по запросу: man systemd-getty-generatorподробности см . Обратите внимание, что по умолчанию это автоматическое порождение выполняется только для VT до VT6 (для имитации традиционных систем Linux).

Как говорит Леннарт в посте 1 :

Чтобы сделать вещи более эффективными, запросы на вход в систему теперь запускаются только по запросу. Когда вы переключаетесь на VT, сервис getty создается для getty@tty2.service, getty@tty5.service и так далее. Поскольку нам больше не нужно безоговорочно запускать процессы getty, это позволяет нам сэкономить немного ресурсов и ускорить запуск.

Если вы хотите настроить определенное количество gettys, вы можете просто изменить logind.confс соответствующей записью, в этом примере 3:

NAutoVTs=3


1. На самом деле стоит прочитать всю серию постов (в настоящее время их число 18) для администраторов .

jasonwryan
источник
Спасибо за ответ, Джейсон. Приложение моей компании поставляется на физическом сервере, и в старых дистрибутивах мы изменили бы inittab для блокировки других ttys.
jcbwlkr
11

В системах на основе Debian есть файл, который вызывает запуск 5 дополнительных getty при запуске, если вы только что создали сервер (без службы dbus):

/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 консолей вирт). Обратите внимание, что вы автоматически получаете его на tty1, поэтому у вас всегда есть хотя бы одна виртуальная консоль.

Смотрите также: systemd-logind.service не запускается, если отсутствует dbus

Милли
источник
2
NB: файл принадлежит пакету systemd, поэтому для его изменения или удаления используйте dpkg-divertсначала. Но есть также системно-родной способ избавиться от этого - запустить sudo systemctl mask getty-static.serviceи настроить свой собственный/etc
Josip Rodin
2
maskЕсли активированная служба работает шумно , было бы лучше создать единицу с таким же именем, /etcчтобы переопределить ее содержимое. Используйте ExecStart = / bin / true, если вы хотите запустить ноль статических getty.
Sourcejedi
другой Systemd правильного путь , чтобы переопределить версию пакета (вы действительно никогда не должны удалить этот файл) , используя sudo systemctl edit getty-static.service, который создаст файл переопределение , который имеет приоритет над /libодним
ryeager
8

Чтобы отключить gettys для определенных TTY 4-6, оставляя работающими 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. Приветствия.

temoto
источник