web-dev-qa-db-ja.com

フレームバッファーデバイスでテキストコンソールを起動するsystemdサービスはどれですか?

私は組み込みプラットフォームで作業していて、自分の使用のために/dev/fb0をクリアする必要があります(Xを使用せずに、画面が情報の表示に使用されている間、シリアルコンソールを介してアクセス可能なデバイス)。

私はすでにdefault.targetをグラフィカルからマルチユーザーに変更しましたが、フレームバッファーデバイスでログインプロンプトでgettyを開き、whichサービスが見つかりません。偶然シリアルコンソールログインを無効にしたくありません。また、/dev/fb0を開いた状態でlsofに何も表示されません。

ディストリビューションはYocto Linuxです。

6
SF.

lsofは、/dev/fb0が開いていると何も表示しません。

それはしません。 Linuxカーネルにはターミナルエミュレータプログラムが組み込まれています。ファイルハンドルが開いている実行中のプロセスとしては現れません。フレームバッファーと入力イベントサブシステムの上に階層化されており、内部カーネルインターフェイスを使用してアクセスします。一連のカーネル仮想端末デバイス、/dev/tty1などとしてアプリケーションモードシステムに表示されます。アクティブなKVT番号を示す/sysの下の疑似ファイル。一連のCGAスタイルのビデオバッファデバイス、/dev/vcsa1など。

これらのアプリケーションモードシステムの1つはもちろんgetty + loginシステムであり、これらのカーネル仮想端末で動作するように構成できます。文書化されたsystemdメカニズムを使用して、gettyプロセスを簡単に取り除くことができます。

古いSystem 5 initシステムでは、各getty/etc/inittabのレコードでした。 BSD initシステムでは、各getty/etc/ttysのレコードです。 systemdシステムでは、物事は少し間接的です。

  • 「ログイン」デーモンであるlogindは、systemdスラングで「シート」と呼ばれるものを認識しています。 「シート」ゼロは、プライマリフレームバッファとそれらすべてのカーネル仮想端末を備えたものです。
  • そのシートでは、logindが開始しようとします[〜#〜] n [〜#〜][email protected]からautovt@ttyN.serviceまでの名前のsystemdサービス。 [〜#〜] n [〜#〜]の値は、/etc/systemd/logind.confNAutoVTs設定で設定されます。
  • これらのsystemdサービスは、[email protected]という名前のサービステンプレートユニットから作成されます。 templateパラメーターは、上記のように、/dev/内のカーネル仮想端末のデバイスファイルのデバイス名です。
  • [email protected]は、デフォルトの設定では、[email protected]へのシンボリックリンクです。
  • カーネル仮想端末デバイスファイルを介して入出力を行うように設定されたgettyプログラムの実行を記述するのは[email protected]です。

したがって、これを停止するには、/etc/systemd/logind.confにアクセスし、logindサービスを自動開始しないようにautovtを構成します(詳細を知りたい場合は、仮想端末を予約しないでください)。

ただし、それだけではありません。ターミナルエミュレータプログラムはカーネルでまだアクティブであり、カーネルVTに向けられたログメッセージから通常のカーソルの点滅まで、ターミナルエミュレータがフレームバッファの使用を妨害します。ただし、これは、フレームバッファを使用してカーネルターミナルエミュレータプログラムとネゴシエートするプログラムをコーディングする場合に問題となります。

ちなみに、シリアルコンソールのログインは、まったく異なるルートを介して行われます。 generatorは、起動時に[email protected]テンプレートユニットのインスタンスを作成し、検出または通知されるカーネルコンソールデバイスごとにインスタンス化します。

参考文献

13
JdeBP