2つのシリアルUSBデバイスを互いに接続し、一方の/dev/ttyUSB1
端を実行して/dev/ttyUSB2
picocom/bin/bash
を使用してもう一方の端に接続し、picocom
picocomをローカル端末エミュレータとして使用できるように接続したいと思います。
私はこれを試しました
setsid /bin/bash </dev/ttyUSB2 >/dev/ttyUSB2 2>&1
その後、ピココムで反対側に接続したのですが、画面に横説説(:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$
)だけが出ますね。
しかし、私は何をしているのかわかりませんでした。誰でも私にこの秘密を教えてもらえますか?
修正/更新:
他のコンピュータでは、以前に受け取った横説説はもう受けられません。上記のようにbashをttyに接続し、picocomを使用してもう一方の端に接続すると、プロンプトが表示され、コマンドを実行できますが、コマンドは私にエコーされません(結果のみが表示されます)。 「ジョブ制御」はありません(Ctrl + Cでテストしましたが、スリーププロセスは停止しません)。
背景:
私は2つの異なる方法でpicocomをローカル端末エミュレータとして正常に使用しました。
ゲッティと一緒に:
sudo systemctl start [email protected]
picocomに正常に接続できますが、
/dev/ttyUSB1
ログインする必要があります。 (この回答ありがとうございます。https://unix.stackexchange.com/a/772040/158192前の質問に進む)ソカートと
$ socat -d -d PTY,raw,echo=0 EXEC:"/bin/bash",pty,stderr,setsid,sane 2024/04/01 18:32:13 socat[40547] N PTY is /dev/pts/4 ...
これにより、ピココムをこのようなローカル端末として使用することができます。
picocom /dev/pts/4
はい、私は直接USB ttyに/ bin / bashを接続できるはずですか?しかし、私の実験はすべて間違っていました。
答え1
最初の例は正確に見えます(ただし、下の私のコメントも参照してください)。
私の机の上にコンピュータがあり、シリアルポートを介して接続されています。ターゲットシステムでは、シリアルポートはです/dev/ttyS0
。私のデスクトップでは、ポートは/dev/ttyUSB0
。
次の通信ツールを使用してホストから接続する場合picocom
:
$ picocom -b 115200 /dev/ttyUSB0
getty
その後、通常、シリアルポートで実行されているプログラムを停止し、次を実行します。
# systemctl stop serial-getty@ttyS0
# setsid bash > /dev/ttyS0 < /dev/ttyS0 2>&1
すべてが期待どおりに動作します。にはpicocom
以下が表示されます。
root@radio0:/boot/firmware# tty
/dev/ttyS0
誰ですか確かにどちらの場合も転送速度が一致していますか?stty
次のコマンドを使用して転送速度を明示的に設定できます。
# stty 115200 < /dev/ttyS0
ログインを必要としない bash シェルを自動的に起動することが目標である場合は、次もご覧ください。この記事(免責事項:自分で作成)正確なサービスを提供するためにgettyとpamを設定する方法について説明します。
答え2
ここには2つの質問があります。
- 許可された回答からわかるように、mumbo jumboは質問の内容とは何の関係もなく、簡単に複製することはできません。
- タスク制御とエコーが機能しない - 重要な解決策は、bash接続の片側で「通常」を使用することです。 (おそらくbashに接続する前)
stty sane -F /dev/ttyUSB2
setsid /bin/bash </dev/ttyUSB2 >/dev/ttyUSB2 2>&1
これは質問のsocatコマンドのptsバージョンに組み込まれています。