getty
関連記事
getty はターミナルのラインと接続されたターミナルを管理するプログラムの総称です。getty の目的は権限のないアクセスからシステムを保護することにあります。通常、getty のプロセスは systemd によって起動され、ターミナルのラインを管理します。
目次
インストール
Arch Linux におけるデフォルトの getty プログラムは agetty
であり、Arch Linux のベース環境に含まれている util-linux パッケージに入っています。ログインを待機している間は改行コード (LF) が CR–LF に変換されないように TTY の設定を変更します。この設定によってコンソールに出力されたメッセージに"階段効果"が発生することがあります (例えば Init によって起動されたプログラムの出力)。Arch Linux の標準的な環境では、getty プロセスによって管理されるターミナルは仮想端末として実装されています。デフォルトで6つの仮想端末が用意され、普通は Ctrl+Alt+F1
から Ctrl+Alt+F6
を押すことでアクセスすることができます。
他にも以下のような getty が存在します:
- mingetty — 自動ログインができる最小主義の getty。
- fbgetty — フレームバッファをサポートしている mingetty のような getty コンソール。
- mgetty — Unix でモデムを使うのに適した汎用プログラム。
仮想端末の追加
/etc/systemd/logind.conf
ファイルを開いて NAutoVTs=6
オプションを使って好きな数の仮想端末を起動できます。
一時的に起動したい場合、以下を入力することで適当な TTY で getty サービスが起動します:
$ systemctl start getty@ttyN.service
仮想端末に自動ログイン
agetty に渡されるデフォルトパラメータを上書きする systemd のドロップインファイルを使って設定を行います。
設定は仮想コンソールとシリアルコンソールで異なります。ほとんどの場合、設定するのは仮想コンソールの自動ログインでしょう。デバイス名は ttyN
で、N
が数字です。シリアルコンソールのデバイス名は ttySN
のようになり、N
は同じく数字になります。
仮想コンソール
手動で以下のドロップインファイルを作成してユニットファイルを編集するか、systemctl edit getty@tty1
を実行して以下の内容を記述してください:
/etc/systemd/system/getty@tty1.service.d/override.conf
[Service] ExecStart= ExecStart=-/usr/bin/agetty --autologin username --noclear %I $TERM
tty1 以外の tty を使いたい時は Systemd FAQ を見て下さい。
シリアルコンソール
以下のファイル (とディレクトリ) を作成してください:
/etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf
[Service] ExecStart= ExecStart=-/usr/bin/agetty --autologin username -s %I 115200,38400,9600 vt102
Nspawn コンソール
systemd-nspawn コンテナに自動ログインするには、console-getty サービスを上書きしてください:
/etc/systemd/system/console-getty.service.d/override.conf
[Service] ExecStart= ExecStart=-/sbin/agetty --noclear --autologin username --keep-baud console 115200,38400,9600 $TERM
tty1 にブートメッセージを残す
デフォルトで、Arch では getty@tty1
サービスが有効になっています。サービスファイルは既に --noclear
を使うようになっているので、agetty が画面をクリアすることはありません。しかしながら systemd が起動する前に画面をクリアしてしまいます。この挙動を無効にするには、ドロップインディレクトリ /etc/systemd/system/getty@tty1.service.d/
を作成して、その中に noclear.conf
ファイルを作ってください:
/etc/systemd/system/getty@tty1.service.d/noclear.conf
[Service] TTYVTDisallocate=no
上記の設定で TTY1 の agetty の TTYVTDisallocate
だけが上書きされます。グローバルなサービスファイル /usr/lib/systemd/system/getty@.service
に手は加えられません。これは systemd のユニットファイルを編集するときに推奨される方法です。
KMS が後から起動すると最初のブートメッセージがクリアされてしまうことがあります。このような場合は、KMS を先に起動するようにしてください。
おそらく、画面にブートメッセージが溢れてしまうほど表示されますが、Shift+PgUp/PgDow でスクロールできます。スクロールしても表示されないほど多くのブートメッセージが出力される場合、スクロールバックバッファのサイズを増やしてみて下さい。
/etc/issue のクリアを無効化
/etc/issue
に "clear TTY" エスケープシーケンスがある場合、削除してください。
# sed -i $'s/\e\[H//; s/\e\[2J//' /etc/issue