Linuxのコンソール

Debian GNU/Linuxの/sbin/init (というか、たぶんほとんどのLinuxベースOS) には、動作中にコンソールをすりかえるカッチョイイ機能があるみたい。

Linux (というかUnix一般) でコンソールとは特殊な端末で、だいたい3つの役割がある。

  • カーネルが直接入出力をする端末。カーネルの起動メッセージやエラーメッセージが出る。入力の方はあんまりないが、KDBとか。
  • init(8)の標準入出力になっている端末。各デーモンの起動メッセージなんかが出てくる。BSD系Unixではshutdown時の各デーモンの終了メッセージは、shutdown(8)を実行した端末に出てくるが、Linuxなどではコンソールなどに出てくる (デーモンを停止する動作は、BSD系ではshutdown(8)が起動する/etc/rc.shutdownスクリプトが行なうのに対し、Linuxなどではshutdown(8)などの指示によりinit(8)が起動する/etc/rc?.d/*スクリプトが行なうという違いがあるため)。/sbin/initはカーネルが起動するので、その標準入出力もカーネルが設定する。したがって、普通は上記のコンソールと一致する。
  • loginして普通に作業する端末。普通にgetty→login→ログインシェルが動く端末。他の端末と同じように、/etc/inittab (BSD系では/etc/ttys) で設定。

Linuxの場合、1番目に挙げたカーネルの端末を、起動オプションconsole=<ほげ>で与える。カッチョイイのは、これが複数指定できて、どの端末も同じように使える点。このうち最後に指定された端末が、/sbin/initを起動する際の標準入出力になる。最近のLinux-2.6では、USBシリアルをコンソールにできたり、出力専用ながらsyslogd形式でカーネルメッセージを他のマシンに送ったりできるようだ。

実際にはUSBシリアルは、init(8)起動の時点でまだ初期化されていないことが多いので、いくら最後に指定してもinitのコンソールにはならない。そこで、このプログラムをコンパイルして、

# ./chcons /dev/ttyUSB0

などとしてやると、init(8)のコンソールを/dev/ttyUSB0にすりかえることができる。端末のパラメータ (速度やパリティなど) はあらかじめstty(8)などで設定しておくこと。

# stty -F /dev/ttyUSB0 `stty -F /dev/ttySC0 -g`

てな感じで設定がttySC0からコピーされる。

このブログ記事について

このページは、みが2005年12月28日 21:26に書いたブログ記事です。

ひとつ前のブログ記事は「A列車の思い出」です。

次のブログ記事は「JR東日本カレンダー」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。