web-dev-qa-db-ja.com

Linuxでシェルをシリアルに転送

古いモノクロのCRT端末を使用できるように、シェルをシリアル(USBからRS232)に転送しようとしています。

シェルをシリアルポートに転送して、もう一方の端がTTYのようにコマンドを送信し、出力を読み取ることができるようにするにはどうすればよいですか?

1
V0idst4r

注:回答は、さまざまなサイトからのいくつかのソリューションを集約しています。現時点では、それらをテストする手段がありません。


SysVinit

Pre systemd Linuxは、sysvinitの_/etc/inittab_を使用して、さまざまな端末でgettyを生成する場合があります。例の行は次のようになります( この古いガイド から取得):

_s0:2345:respawn:/sbin/getty -L 115200 ttyS0 vt102
_

アップスタート

OSがupstartを使用している場合、手順は異なります。例えば。 このハウツー があります:

  1. 以下を含む_/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
    _
  2. upstartgettyを開始するように依頼します

    _Sudo start ttyS0
    _

Systemd

このサイト によると、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 "…"_を実行する必要がありました。

2