私12月 VT101USB RS-232ヌルモデムケーブルを使用して、Debianを実行しているRaspberry Pi 3のシリアル端末に接続します。端末を閉じるとシェルセッションが終了し、端末を再度開くと新しいログインセッションが開始されます。どうすればいいですか?端末を閉じて再度開くと、Returnキーを押すなど、Bashが新しいプロンプトを表示するなどの操作を実行するまで、画面は空白のままになります。
少なくともシステムがUSBヌルモデムケーブルからデータを受信するかどうかを問い合わせる方法がわかったら、自動ログイン/ログアウトを直接スクリプトできます。私が考えたアプローチの1つは、最近のユーザー入力がないときに端末に応答クエリを送信し、しばらくしても応答がない場合は端末が閉じていると仮定することです。
答え1
一般的なアプローチは、DTR(「Data Terminal Ready」)信号が低下するタイミングを検出することです。これには、グランド、データ受信用の接続、データ転送用の接続以上が必要です。
stty
DTR信号を無視するように設定を調整する必要があります。実行してみてくださいstty -clocal
。接続がすぐに切断されると、ケーブルに適切なピンが接続されていません。 sttyコマンドを実行した後もまだシェル接続がある場合は、ターミナルを閉じて開きます。セッションが終了すると予想しました。それ以外の場合、シリアルケーブルはRS232アダプタのDSR(「Data Set Ready」)信号をDTR入力に戻すことができます。アダプターからケーブルを抜いてテストし、それがシャットダウンしていることを確認できます。その場合は、シリアルケーブルを再接続する必要があります。
答え2
既存のハードウェアを使用して切断検出を実行する方法がわからなかったため、次のソフトウェアベースのソリューションを作成しました。ハプモンInは端末にCPR(Cursor Position Report)シーケンスを送信し、応答を待って端末がオンラインであるかどうかを判断します。応答が受信されない場合、端末はオフラインとみなされる。リポジトリには、代わりに使用できるスクリプトとシステム単位のファイルが含まれています。年齢(8)その機能は次のスクリプトに似ています。
stty 19200 sane -brkint ixoff -imaxbel
while :; do
if [ "$(hupmon -1)" = "DEVICE_ONLINE" ]; then
stty 19200 sane -brkint ixoff -imaxbel
printf "\033[r\033[H\033[J" # Clear the screen.
TERM="vt100" hupmon /bin/login
fi
sleep 1
done