Ubuntu Weekly Recipe

第638回 Ubuntuに「普通に」ログインするいろいろな方法

この記事を読むのに必要な時間:およそ 7 分

シリアルコンソールからログインする

仮想コンソールはディスプレイにLinuxのコンソールを表示するための仕組みです。しかしながらUbuntuが動くコンピューターはあるものの,ディスプレイはなく,無言で渡されたのはシリアルケーブルだけ,というのも「普通にある」話です。そうなるとシリアルコンソール経由でのログインが必要になります。

Ubuntuは,デスクトップ版もサーバー版もシリアルコンソールの設定は無効化されています。よってまずはGRUBやLinuxのメッセージをシリアルコンソールに出力するための設定が必要です。詳細はUbuntuの公式ドキュメントを参照してもらいたいところではあるのですが,若干内容が古いです。そこで簡単に手順を説明しましょう。

まず設定対象のルートファイルシステムを入手します。一般的なPCのシリアルコンソールを有効化するのであれば,PCをディスプレイにつないで起動して設定する,で良いでしょう。そもそもVGAがないデバイスであれば,先にストレージやその中身であるルートファイルシステムを何か別の方法で編集できるようにしておきます。

まずはGRUBの設定です。/etc/default/grubに以下の行を追加します。

GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

「console」が仮想コンソールへの出力,⁠serial」がシリアルコンソールへの出力です。両方書くことで両方に同じ内容が出力されます。ちなみにサーバーマシン等にある「シリアルコンソールリダイレクト」を有効化していると,同じデータが二重に出力されてしまうので注意してください。その場合はconsoleだけ有効化しておけば良いでしょう。

--speed=115200はシリアルコンソールの速度です。環境によって異なりますのでうまく出力できない場合は速度を下げると良いでしょう。おそらく「115200」⁠38400」⁠9600」のいずれかは動くはずです。

さらにLinux側の設定として,同じファイルのGRUB_CMDLINE_LINUX_DEFAULTを次のように変更します。

GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"

これはLinuxのメッセージを出力する先の設定です。⁠tty0」がコンソール側で「ttyS0」がシリアルコンソール側です。GRUBと同じようにコンソールとシリアルコンソールの双方に出力しています。

ちなみにUbuntuの初期設定だとこの変数には「quiet splash」が設定されているはずです。⁠quiet」はカーネルの起動ログを抑制するオプションです。シリアルコンソール出力の際も有効化したい場合は,上記設定の末尾にでも追加しておいてください。⁠splash」は起動時のスプラッシュスクリーンを表示するオプションです。シリアルコンソールだと動かないので,外しておいて良いでしょう。

/etc/default/grubの設定を次のコマンドで反映します。

$ sudo update-grub

もし別システムのルートファイルシステムをマウントして作成したいなら,何か適当な仮想マシンで実行するか,chrootして「grub-mkconfig」で出力した結果を,/boot/grub/grub.cfgに保存してください。

システム側のシリアルコンソールの出力設定が完了したら,今度はクライアント側を準備します。といってもシリアルコンソールケーブルを接続したマシン上でシリアル接続ソフトウェアを動かすだけです。

まずデバイス側とPC側をシリアルコンソールケーブルで接続します。最近はシリアルポートがあるPCも少なくなってきたので,いわゆる「USBシリアルケーブル」みたいなケーブルを使うことになるでしょう。シリアルケーブルには,クロスだストレートだ,ジェンダーがどうとかいろいろやっかいな話がありますので,⁠最終的にうまくつながる」までには何度も抜き差ししたり,入れ替えたりすることになります。

ソフトウェアはWindowsならTeraTermが鉄板です。Ubuntuならminicom,gkermit,screenあたりがよく使われているようです。screenなら次のように接続することになります。

$ sudo adduser $USER dialout
(設定を反映するために一度ログインし直す)

$ screen /dev/ttyUSB0 115200

シリアルコンソールデバイスは接続形態によって/dev/ttySxもしくは/dev/ttyUSBx/dev/ttyACMxなどの名前で作られます。これらのデバイスはrootユーザーかdialoutグループでのみ読み書き可能な設定になっているので,まずはdialoutグループに所属しておくようにしておきましょう。そうしたらあとはscreenコマンドで上記のように接続できます。速度(ボーレート)が異なる場合は,最後の引数を変更してください。

ちなみにscreenを終了させるには「Ctrl-a k」を入力します。

このように「ログイン」ひとつとっても,Ubuntuには様々な選択肢が用意されています。普段のログイン生活に不満があるなら,自分にとって最良のログイン方法を模索してみるのはいかがでしょうか。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。