我已经成功地通过蓝牙创建并连接到控制台,正如通过谷歌搜索找到的许多问答的常见问题解答指南等中所描述的那样。
简而言之,在 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
如果蓝牙连接稳定那就好了。
我的问题是如何使无头系统(树莓派)更加健壮。如果蓝牙连接丢失,我发现自己必须重新启动无头系统。系统上可能有多个(非并发)用户,不可避免地会有一个用户在没有先注销的情况下带着蓝牙客户端设备走出去,导致下一个用户无法登录!
轻微编辑:一个可能丑陋的解决方法是监视丢失的连接,然后终止/重新启动适当的进程。不确定执行此操作的最佳方法是什么(不确定要终止的正确进程(终止 rfcomm 后,无法建立新连接)),也不确定要监视的正确内容(tty 和/或蓝牙断开连接?)!
答案1
好的,我自己想出了一个解决方案 - 但它可能不是最佳的,因此欢迎评论和建议。
继我的“轻微编辑”之后,我编写了一个脚本来监视 rfcomm 连接,如果蓝牙已断开但 tty 仍然连接,则终止设备上的进程:
检查射频通讯
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
似乎有效,但测试很少。不知道它有多坚固!