_robust_bluetooth 직렬 콘솔/tty

_robust_bluetooth 직렬 콘솔/tty

인터넷 검색을 통해 찾은 많은 Q&A, FAQ 가이드 등에 설명된 대로 블루투스를 통해 콘솔을 성공적으로 생성하고 연결했습니다.

간단히 말해서, sudo 모드에서는

/usr/sbin/hciconfig hci0 piscan
/usr/bin/sdptool add --channel=3 SP
/usr/bin/rfcomm watch /dev/rfcomm0 3 /sbin/agetty rfcomm0 9600 vt100

블루투스 연결이 안정적이면 좋을 것 같아요.

내 질문은 헤드리스 시스템(Raspberry Pi)을 더욱 강력하게 만드는 방법입니다. Bluetooth 연결이 끊어지면 헤드리스 시스템을 재부팅해야 합니다. 시스템에 여러 명의(비동시) 사용자가 있을 수 있으며 필연적으로 한 명의 사용자가 먼저 로그아웃하지 않고 Bluetooth 클라이언트 장치를 가지고 나가게 되어 다음 사용자가 로그인할 수 없게 됩니다!

사소한 편집: 잠재적으로 보기 흉한 해결 방법은 연결 끊김을 모니터링한 다음 적절한 프로세스를 종료/다시 시작하는 것입니다. 이를 수행하는 가장 좋은 방법이 무엇인지 잘 모르겠습니다(종료할 올바른 프로세스가 확실하지 않음(rfcomm이 종료된 후 새 연결이 만들어질 수 없음)), 모니터링할 올바른 것(tty 및/또는 블루투스 연결이 끊김?)!

답변1

좋아요, 제가 직접 해결책을 찾았습니다. 하지만 최적이 아닐 수도 있으므로 의견과 제안을 환영합니다.

"간단한 편집" 후에 rfcomm 연결을 모니터링하고 블루투스 연결이 끊어졌지만 tty는 여전히 연결되어 있는 경우 장치의 프로세스를 종료하는 스크립트를 작성했습니다.

RF 통신 확인

rfcomm show /dev/rfcomm0 2>/dev/null | grep "channel 3 closed" | grep "tty-attached"
if [ $? -eq 0 ]; then
    kill -9 `lsof -t /dev/rfcomm0`
fi

그런 다음 crontab에 스크립트를 추가했습니다.

* * * * * /usr/local/bin/check_rfcomm >>/var/log/check_rfcomm.log 2>&1

작동하는 것 같지만 제대로 테스트되지 않았습니다. 얼마나 강한지 모릅니다!

관련 정보