デバイス/dev/ttyAMA0
で一部のゲッティを無効にするには、systemctl mask [email protected]
でマスクする必要があります。これは正常に機能します。そこで、ttyUSB1
でsystemctl enable [email protected]
を使用してゲッティを有効にします。正常に動作します。
だから私の質問:[email protected]
と[email protected]
の間に違い(そしてそれが何であるか)はありますか?
これら2つのユニット(またはユニットテンプレート)の違いを確認するには、ファイルの違いを確認するだけで十分です getty @ .service と serial-getty @ .service =、これはシステムの/lib/systemd/system
にあります。
(ここにリンクされているファイルは、この記事の執筆時点で最新リリースのsystemd v239のファイルを指しています。ファイルにはm4マクロが含まれているため、インストール前に処理されますが、m4処理によって導入された小さな変更であるため、十分近い。)
いくつかの違いがありますが、主な違いは、各ユニットによって呼び出されるExecStart=
コマンドです。
ユニットgetty @ .serviceは、次のコマンドを呼び出します。
ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear %I $TERM
Serial-getty @ .serviceがこのコマンドを呼び出す間:
ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 %I $TERM
Serial-getty @ .serviceで使用されるコマンドは、シリアルポートの速度を構成するために、agetty
--keep-baud
引数を渡します。ある意味で、getty @ .serviceはシリアルポートで機能しますが、シリアルポートが適切に構成されていない可能性があり、適切に構成されている場合と同じように機能しないか、遅くなる可能性があります。
一方、getty @ .serviceはagetty
--noclear
引数を渡すため、ユーザーがログアウトした後、コンソール画面はクリアされません(これは従来、少なくともtty0で構成されていました)。
ユニットファイルとのさらなる違い:
BindsTo=dev-%i.device
)のudevデバイスにバインドするため、リムーバブルデバイス(USBなど)の場合、デバイスが取り外されたりプラグが抜かれたりすると、systemdはgettyを停止します。ConditionPathExists=/dev/tty0
)。したがって、カーネルでローカルコンソールのサポートが無効になっている場合、ローカルコンソールは生成されません。UnsetEnvironment=LANG LANGUAGE LC_...
)の設定を解除します。これは、ローカリゼーションは通常、ローカルコンソールでサポートされていないか、サポートが不十分であるためです。TtyAMA0をマスクし、代わりにttyUSB1を有効にする特定のケースに関しては、ttyUSB1はシリアルポートであるため(少なくとも1つをエミュレートします)、serial-getty @ .serviceを使用する方が適切です。
ただし、getty @または[email protected]を有効にし、@ ttyAMA0をマスクすることはこれを達成するための最良の方法ではありません。
systemdは、カーネルから、通常はカーネルコマンドラインのconsole=
引数からコンソール構成を取得します(これは systemd-getty-generator によって実装されるため、詳細についてはドキュメントを参照してください)。したがって、カーネルコマンドラインでコンソールを構成するだけで(console=ttyUSB1
などの引数を使用しますが、tty0
などのローカルコンソールも含めることができます)、systemdが実行します。正しいこと。
詳細については、 systemdでのシリアルコンソールサポートに関するこのブログ投稿 をご覧ください。