はじめに
Linuxマシンのブート完了後、ディスプレイに真っ先に現れるおなじみの「login:」プロンプト。その裏側で端末の初期化とセッション受付を一手に引き受けているのが agetty デーモンです。本ガイドでは、難解なマニュアルを読むだけではイメージしづらいagettyの実体を解き明かし、systemdとの協調動作、/etc/issue を利用した動的バナーのカスタマイズ、さらには現場で重宝する自動ログインの実装手法まで、ハンズオン形式で実践的に解説します。
agettyの基本構造とsystemdサービス稼働状態の確認
まず、稼働環境において agetty 実行ファイルがどのディレクトリに配置されているかを調査するため、which agetty コマンドを実行します。

agetty は、仮想コンソールやシリアル通信ポートをオープンして通信設定をセットアップし、ユーザーへ入力画面を提供して認証プログラムへ引き渡す中枢デーモンです。導入済みバイナリのバージョンや利用可能な機能フラグを確かめてみましょう。
⚙️ [主要オプション一覧]
-a, --autologin : ユーザープロンプトをスキップし、指定したアカウントで即座に自動ログインを完了させます。-J, --noclear : プロンプト描画前に画面全体をクリアせず、直前のカーネル起動ログなどを画面上に残します。-f, --issue-file : ログイン入力画面のヘッダー部分に出力するシステム告知用ファイル(issue)の参照先を変更します。-o, --login-options : 後段の login ユーティリティへ引き渡すコマンドラインパラメータを指定します。-n, --skip-login : ログインユーザー名の入力フェーズを省略し、直接パスワード等の認証処理へ進めます。-8, --8bits : 8ビット文字の透過処理を有効にし、マルチバイト文字環境に対応させます。

メインの第1仮想コンソール(tty1)を監視・制御しているsystemdインスタンスサービスの現在の稼働状況をチェックするため、systemctl status getty@tty1.service --no-pager を実行します。
実行結果を見ると、agetty プロセスがバックグラウンドで正常に待機しており、ユーザーからのログイン入力を待ち受けていることが確認できます。

/etc/issueをカスタマイズして独自のコンソールウェルカムバナーを作成する
システムに設定されている標準のコンソール案内メッセージを確認するため、cat /etc/issue を実行します。
出力内容に含まれる \n や \l は agetty 固有のエスケープシーケンスであり、それぞれシステムのホスト名や接続中の仮想端末番号(TTY)へ動的に展開されます。

設定変更に先立ち、トラブル発生時でも即座に初期状態へ復元できるよう、sudo cp /etc/issue /etc/issue.bak を実行して現行ファイルのバックアップを確実に取得しておきます。

端末番号やハードウェア仕様、OS情報を動的に盛り込んだ独自のウェルカムメッセージを組み立てるため、echo -e '\n=== Welcome to Ubuntu Server (tty: \l) ===\nOS: \s \r (\m) | Time: \t\n' | sudo tee /tmp/custom_issue を投入します。
この構文には、TTY番号(\l)、オペレーティングシステム名(\s)、カーネルバージョン(\r)、マシンアーキテクチャ(\m)、現在時刻(\t)を取り込むエスケープコードが組み込まれています。

新しく作成した一時バナー用ファイルの内容を開き、記述したエスケープ文字列が設計通りに書き込まれているかを cat /tmp/custom_issue で点検します。

agettyの重要オプション適用とsystemdドロップインによる設定オーバーライド
既存の tty1 向けサービスユニットがどのように定義されているかを把握するため、systemctl cat getty@tty1.service コマンドで設定構成を出力します。
これにより、テンプレートファイル(/usr/lib/systemd/system/getty@.service)に記されているデフォルトの実行環境変数や ExecStart ディレクティブの構造を確認できます。

パッケージ標準の設定ファイルを直接変更することなく安全にパラメータを上書きするため、sudo mkdir -p /etc/systemd/system/getty@tty1.service.d を実行してドロップイン用のディレクトリを新規作成します。

起動時の画面消去を抑止する --noclear フラグの付与や、ボーレート・端末タイプの再調整を行うため、echo -e '[Service]\nExecStart=\nExecStart=-/sbin/agetty -o "-p -- \\u" --noclear -s %I 115200,38400,9600 vt220' | sudo tee /etc/systemd/system/getty@tty1.service.d/noclear.conf を実行します。
空の ExecStart= を宣言して既存の起動コマンドを一度リセットした上で、必要な引数を付加した新たな agetty 起動定義を挿入するのがsystemdオーバーライドの定石です。

追加したドロップイン設定をsystemdマネージャーに即時反映させるため、systemctl daemon-reload を実行して設定情報の再読み込みを行います。

ドロップイン定義が正常にユニットへマージされたかを検証するため、再度 systemctl cat getty@tty1.service を実行します。
出力の終端に先ほど作成した noclear.conf のブロックが追加されており、設定の上書きが成功したことを確認できます。

仮想端末(TTY)およびシリアルコンソールの管理ステータス調査
現在稼働中の仮想コンソールサービス一覧を洗い出すため、systemctl list-units --type=service 'getty@*' --no-pager を実行します。
コマンドの出力結果から、物理ディスプレイを制御する getty@tty1.service がアクティブ状態でバックグラウンド動作している状況を把握できます。

クラウド環境の仮想マシンや組み込みハードウェアで多用されるシリアル接続用ユニットの登録状況をチェックするため、systemctl list-unit-files 'serial-getty*' --no-pager を実行します。
結果を見ると、serial-getty@.service テンプレート自体はシステムに用意されているものの、現在は無効(disabled)の状態で待機していることが分かります。

現在ログインしているユーザーセッションと、それぞれが占有している端末(TTY)情報を一覧化するため、w コマンドを実行します。
この操作により、現在アクティブなセッション情報だけでなく、システムの連続稼働時間(uptime)や平均負荷(load average)までを総合的に把握できます。

今回はLinuxの端末制御を根底から支えるagettyの基本原理から、表示カスタマイズ、systemdを介した安全なサービスパラメータのオーバーライドまでを実践的に解説しました。
コンソール環境の仕組みを自ら触れて理解することは、Linuxのブートフローやログイン処理全体の深い把握に直結します。ぜひ日々のサーバー運用や環境構築に役立ててください。