当我发出以下错误时发生sudo rfcomm listen rfcomm0
无法创建 RFCOMM TTY:地址已被使用
我事先在 Python 程序中收到了一些串行蓝牙数据。因此,似乎有些东西卡住了。
然后我输入sudo rfcomm release rfcomm0
以下内容:
无法释放设备:操作已在进行中
我该如何进行硬发布?目前让它重新运行的唯一方法是重新启动。
答案1
好的,因为重新启动很烦人,我尝试了两种方法。
- 创建另一个设备并将蓝牙绑定到它。然后在程序中使用新的设备。
打开 /etc/bluetooth/rfcomm.conf 并添加另一个设备。
rfcomm0 { # 启动时自动绑定设备 bind no; # 设备的蓝牙地址 device 00:06:66:68:20:61; # 连接的 RFCOMM 通道 channel 1; # 连接的描述 comment “这是设备 1 的串口。”; }
rfcomm2 { # 启动时自动绑定设备 bind no; # 设备的蓝牙地址 device 20:15:12:08:62:95; # 连接的 RFCOMM 通道 channel 1; # 连接的描述 comment “这是设备 1 的串口。”; }
rfcomm3 { # 启动时自动绑定设备 bind no; # 设备的蓝牙地址 device 20:15:12:08:62:95; # 连接的 RFCOMM 通道 channel 1; # 连接的描述 comment “这是设备 1 的串口。”; }
然后重新启动蓝牙服务:
userk@dopamine:~$ sudo rfcomm bind 2 DEV_ADDR CHANNEL
- 答案:
由于 Ubuntu 中的其他进程,Rfcomm 无法释放设备。检查哪一个
userk@dopamine:~$ sudo lsof | grep /dev/rfcomm2
MATLAB 5554 6868 userk 514u CHR 216,2 0t0 603 /dev/rfcomm2
杀了它!!
userk@dopamine:~$ ps -ax | grep MATLAB
7684 pts/5 Sl 0:39 /usr/local/MATLAB/R2015b/bin/glnxa64/MATLAB
7873 pts/5 S+ 0:00 grep --color=auto MATLAB
userk@dopamine:~$ kill -9 7684
无需强制重启!希望对您有帮助
答案2
这里已经很晚了,但我在 Ubuntu 16.04 上遇到了同样的问题。
我做了以下事情:
sudo service bluetooth restart
这给了我错误:
Warning: bluetooth.service changed on disk. Run 'systemctl daemon-reload' to reload units.
运行警告中建议的命令后,我能够成功重新启动蓝牙服务并开始监听端口。
我怀疑在我的情况下我改变了配置(bluetoothd
使用--compat 参数运行)因此 init 系统必须重新加载。