Jak uzyskać mniej tty z Systemd?

29

W dawnych czasach właśnie modyfikowałem /etc/inittab. Teraz, gdy systemd wydaje się uruchamiać tty [1-6] automatycznie, jak powinienem wyłączyć tty [4-6]?

Wygląda na to, że jest tylko jeden plik usługi systemowej i używa on %Ido rozpoznawania różnych sesji tty. Mam nadzieję, że nie muszę usuwać tej usługi i tworzyć każdej z nich [email protected]ręcznie.

stokrotka
źródło

Odpowiedzi:

35

Nie ma potrzeby wyłączania „dodatkowych” TTY, ponieważ w systemdgettys są generowane na żądanie: zobacz man systemd-getty-generatorszczegóły. Zauważ, że domyślnie to automatyczne spawnowanie odbywa się tylko dla VT do VT6 (w celu naśladowania tradycyjnych systemów Linux).

Jak pisze Lennart w poście na blogu 1 :

Aby wszystko było bardziej wydajne, monity logowania są teraz uruchamiane tylko na żądanie. Po przejściu na VT usługa getty jest tworzona w postaci [email protected], [email protected] i tak dalej. Ponieważ nie musimy już bezwarunkowo uruchamiać procesów getty, pozwala nam to zaoszczędzić trochę zasobów i przyspiesza start-up.

Jeśli chcesz skonfigurować określoną liczbę gettys, możesz po prostu zmodyfikować logind.confodpowiednią pozycję w tym przykładzie 3:

NAutoVTs=3


1. W rzeczywistości warto przeczytać całą serię postów - obecnie 18 - ustawioną dla Administratorów .

jasonwryan
źródło
Dzięki za odpowiedź, Jason. Aplikacja mojej firmy jest dostarczana na serwerze fizycznym, a przy starszych dystrybucjach zmodyfikowalibyśmy inittab, aby zablokować inne tty.
jcbwlkr
11

W systemach opartych na Debianie istnieje plik, który powoduje uruchomienie 5 dodatkowych programów getty podczas uruchamiania, jeśli właśnie zbudowałeś serwer (bez usługi dbus):

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

W nim napisano:

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

Samo usunięcie tego pliku zatrzyma pojawienie się dodatkowego getty. Skróć listę, jeśli chcesz po prostu odrodzić jednego dodatkowego getty (na 2 konsole virt). Zauważ, że automatycznie dostajesz jeden na tty1, więc zawsze masz przynajmniej jedną wirtualną konsolę.

Zobacz także: systemd-logind.service nie uruchamia się, jeśli brakuje dbus

mili
źródło
2
Uwaga: plik należy do pakietu systemd, więc aby go zmodyfikować lub usunąć, użyj go dpkg-divertnajpierw. Ale istnieje również systemowo natywny sposób na usunięcie go z pracy - uruchomienie sudo systemctl mask getty-static.servicei skonfigurowanie własnego/etc
Josip Rodin
2
maskPonieważ włączona usługa jest głośna , łatwiej byłoby utworzyć jednostkę o tej samej nazwie, /etcaby zastąpić jej zawartość. Użyj ExecStart = / bin / true, jeśli chcesz uruchomić zero statycznego getty.
sourcejedi
innym prawidłowym sposobem jest zastąpienie wersji pakietu (naprawdę NIGDY nie należy usuwać tego pliku) za pomocą sudo systemctl edit getty-static.service, która utworzy plik zastępowania, który będzie nadrzędny w stosunku do /libjednego
ryeager
8

Aby wyłączyć gettys na poszczególnych TTY 4-6, a jednocześnie pozostawiając 1-3 i 7-9 działające, uruchom:

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

masktworzy dowiązanie symboliczne, /etc/systemd/system/{name} -> /dev/nullktóre skutecznie wyłącza usługę. Próba uruchomienia go systemctl startwyświetli błądFailed to start NAME.service: Unit NAME.service is masked.

Jeśli masz A.service Wants=masked.service, start Aodniesie sukces, ale również wygeneruje błąd uruchomienia zależności w dzienniku.

Jeśli masz B.service Requires=masked.service, to start Brównież się nie powiedzie.

Tak, necroanswer. Twoje zdrowie.

temoto
źródło