古いモノクロのCRT端末を使用できるように、シェルをシリアル(USBからRS232)に転送しようとしています。
シェルをシリアルポートに転送して、もう一方の端がTTYのようにコマンドを送信し、出力を読み取ることができるようにするにはどうすればよいですか?
注:回答は、さまざまなサイトからのいくつかのソリューションを集約しています。現時点では、それらをテストする手段がありません。
Pre systemd
Linuxは、sysvinitの_/etc/inittab
_を使用して、さまざまな端末でgetty
を生成する場合があります。例の行は次のようになります( この古いガイド から取得):
_s0:2345:respawn:/sbin/getty -L 115200 ttyS0 vt102
_
OSがupstart
を使用している場合、手順は異なります。例えば。 このハウツー があります:
以下を含む_
/etc/init/ttyS0.conf
_というファイルを作成します。_# ttyS0 - getty # # This service maintains a getty on ttyS0 from the point the system is # started until it is shut down again. start on stopped rc RUNLEVEL=[12345] stop on runlevel [!12345] respawn exec /sbin/getty -L 115200 ttyS0 vt102
_
upstart
にgetty
を開始するように依頼します_Sudo start ttyS0
_
このサイト によると、systemd
ソリューションは次のように単純かもしれません
シリアルコンソールを利用するには、カーネルコマンドラインで_
console=ttyS0
_を使用するだけで、systemd
が自動的にgetty
を開始します。
これを行うようにGRUB2を構成する可能性があります。 Arch Wiki の内容を分析し、必要に応じてディストリビューションに調整します。
Grubでシリアルコンソールを有効にするには、エディターで_
/etc/default/grub
_を開きます。 _GRUB_CMDLINE_DEFAULT
_行を変更して、_/dev/ttyS0
_でコンソールを起動します。以下の例では、2つのコンソールを設定していることに注意してください。 1つは_tty0
_に、もう1つはシリアルポートにあります。_GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,38400n8"
_次に、シリアルコンソールを有効にするためにコンソールの場所と開始するコマンドをgrubに指示する必要があります(Linuxカーネルの場合は上記のように、grubに複数の入出力端子を追加できます。たとえば_
GRUB_TERMINAL="console serial"
_は両方の表示を有効にしますおよびシリアル):_## Serial console GRUB_TERMINAL=serial GRUB_SERIAL_COMMAND="serial --speed=38400 --unit=0 --Word=8 --parity=no --stop=1"
_次のコマンドを使用して、_
grub.cfg
_ファイルを再構築します。_grub-mkconfig -o /boot/grub/grub.cfg
_再起動後、
getty
は_/dev/ttyS0
_をリッスンし、_38400
_ボー、_8
_データビット、パリティなし、1ストップビットを期待します。 Archが起動すると、systemd
は自動的にgetty
セッションを開始し、同じ設定で同じデバイスでリッスンします。
両方のサイトは、GRUB2がシリアルデバイスでリッスンするのではなく、起動後にgetty
だけリッスンする場合は、次のようなものが必要になることに同意しています。
_systemctl enable [email protected]
systemctl start [email protected]
_
問題が発生した場合は、getty
は単なるプログラムであり、オンデマンドまたは_rc.local
_から実行できます。詳細については、_man getty
_を参照してください。私はあなたの最初の試みは次のようになると思います
_Sudo getty -L 115200 ttyS0 vt102
_
(編集)これはOPからのフィードバックであり、同様の問題を抱えているユーザーに役立つ可能性があります。
正しく動作させるには、_
Sudo su -c "…"
_を実行する必要がありました。