Systemdでttyを減らす方法は?


29

昔は修正し/etc/inittabたばかりです。さて、systemdでは、tty [1-6]が自動的に起動するようですが、tty [4-6]を無効にするにはどうすればよいですか?

systemdサービスファイルは1つだけであるように見え、%I異なるttyセッションを識別するためにを使用します。そのサービスを削除して、それぞれをgetty@ttyX.service手動で作成する必要がないことを願っています。

回答:


35

systemdgettysはオンデマンドで生成されるため、「余分な」TTYを無効にする必要はありませんman systemd-getty-generator。詳細を参照してください。デフォルトでは、この自動生成はVT6までのVTに対してのみ行われます(従来のLinuxシステムを模倣するため)。

以下のようレナートは、ブログの記事で述べている1

物事をより効率的にするために、ログインプロンプトはオンデマンドでのみ開始されるようになりました。VTに切り替えると、gettyサービスはgetty @ tty2.service、getty @ tty5.serviceなどにインスタンス化されます。無条件にgettyプロセスを開始する必要がないため、これによりリソースを少し節約でき、起動が少し速くなります。

特定の数のgettyを設定したい場合logind.confは、適切なエントリで変更することができます(この例3を参照)。

NAutoVTs=3


1.実際、管理者向けのsystemdである一連の投稿(現在は18番)は、読む価値があります。


答えてくれてありがとう、ジェイソン。私の会社のアプリケーションは物理サーバーで出荷されており、古いディストリビューションではinittabを変更して他のttyをロックアウトします。
jcbwlkr

11

Debianベースのシステムでは、サーバーを構築した直後に(dbusサービスなしで)起動時に5つの追加gettyが起動されるファイルがあります。

/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を1つだけ生成する場合(2つのvirtコンソールの場合)は、リストを短くしてください。tty1で自動的に1つを取得するため、常に少なくとも1つの仮想コンソールがあることに注意してください。

参照:dbusが見つからない場合、systemd-logind.serviceの開始に失敗する


2
注意:ファイルはsystemdパッケージによって所有されているため、変更または削除するには、dpkg-divert最初に使用します。しかし、それを邪魔にならないようにシステム化されたネイティブな方法もありsudo systemctl mask getty-static.serviceます-実行し、独自に設定します/etc
ジョシップロダン

2
mask有効なサービスがうるさい場合、同じ名前のユニットを作成してその/etcコンテンツをオーバーライドする方がクリーンです。ゼロの静的gettyを開始する場合は、ExecStart = / bin / trueを使用します。
sourcejedi

その他のsystemdに正しい方法は、パッケージのバージョン(あなたが本当にそのファイルを削除してはいけません)を使用してオーバーライドすることであるsudo systemctl edit getty-static.serviceよりも優先されるオーバーライド・ファイルが作成されます、/lib1
ryeager

8

特定のTTY 4〜6でgettyを無効にし、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.servicestart A成功しますが、ジャーナルに依存関係開始エラーも生成します。

あなたはB.serviceを持っている場合はRequires=masked.service、その後start Bも失敗します。

うん、ネクロアンサー。乾杯。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.