我试图通过Python在Khadas板上使用pybluez连接到蓝牙设备(有点像Raspberry,aarch64)。
我已经手动将PyBluez更新为5.65,因为它包含我需要的修补程序。bluetoothctl --version
和bluetoothd --version
都返回5.65。
一启动我的脚本,我就得到
> python main.py
...
File "/home/khadas/env/lib/python3.8/site-packages/bluetooth/bluez.py", line 271, in advertise_service
_bt.sdp_advertise_service (sock._sock, name, service_id, \
_bluetooth.error: (2, 'No such file or directory')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/khadas/copilot/copilot/process/process.py", line 126, in run
self._pre_run()
File "/home/khadas/copilot/copilot/task/bluetooth_connector_task.py", line 55, in _pre_run
bluetooth.advertise_service(
File "/home/khadas/env/lib/python3.8/site-packages/bluetooth/bluez.py", line 275, in advertise_service
raise BluetoothError (*e.args)
bluetooth.btcommon.BluetoothError: [Errno 2] No such file or directory
在this之后,我编辑了/etc/systemd/system/dbus-org.bluez.service
和/lib/systemd/system/bluetooth.service
ExecStart=/usr/libexec/bluetooth/bluetoothd -C
然后,我用
sudo systemctl daemon-reload & sudo systemctl restart bluetooth & sudo sdptool add SP
但我的错误依然存在。
你们以前有没有遇到过这种情况?
谢谢你抽出时间:)
注意:这个线程表示,在sudo sdptool add SP
之后,应该在/var/run/sdp
上创建一个文件;它不是。
注意:蓝牙服务正在运行,但存在错误,即
(env) khadas@khadas > systemctl status bluetooth.service
● bluetooth.service - Bluetooth service
Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-08-11 13:23:09 UTC; 13min ago
Docs: man:bluetoothd(8)
Main PID: 14256 (bluetoothd)
Status: "Running"
Tasks: 1 (limit: 2932)
Memory: 676.0K
CGroup: /system.slice/bluetooth.service
└─14256 /usr/libexec/bluetooth/bluetoothd -C
Aug 11 13:23:09 khadas systemd[1]: Starting Bluetooth service...
Aug 11 13:23:09 khadas bluetoothd[14256]: Bluetooth daemon 5.65
Aug 11 13:23:09 khadas systemd[1]: Started Bluetooth service.
Aug 11 13:23:09 khadas bluetoothd[14256]: Starting SDP server
Aug 11 13:23:09 khadas bluetoothd[14256]: src/sdpd-server.c:init_server() binding UNIX socket: Read-only file system
Aug 11 13:23:09 khadas bluetoothd[14256]: src/sdpd-server.c:start_sdp_server() Server initialization failed
Aug 11 13:23:09 khadas bluetoothd[14256]: Bluetooth management interface 1.14 initialized
Aug 11 13:23:09 khadas bluetoothd[14256]: src/adapter.c:reset_adv_monitors_complete() Failed to reset Adv Monitors: Unknown Command (0x01)
发布于 2022-08-23 12:45:48
如果升级,还必须更新系统服务配置,因为新配置在此场景中无法工作。如果运行sudo service bluetooth status
,您将看到新配置无法正确启动SDP服务器:
● bluetooth.service - Bluetooth service
Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-08-23 11:42:36 UTC; 10min ago
Docs: man:bluetoothd(8)
Main PID: 3773 (bluetoothd)
Status: "Running"
Tasks: 1 (limit: 2934)
Memory: 2.1M
CGroup: /system.slice/bluetooth.service
└─3773 /usr/libexec/bluetooth/bluetoothd -C
Aug 23 11:42:36 biped12 systemd[1]: Starting Bluetooth service...
Aug 23 11:42:36 biped12 systemd[3773]: ConfigurationDirectory 'bluetooth' already exists but the mode is different. (File system: 755 ConfigurationDirectoryMode: 555)
Aug 23 11:42:36 biped12 bluetoothd[3773]: Bluetooth daemon 5.65
Aug 23 11:42:36 biped12 systemd[1]: Started Bluetooth service.
Aug 23 11:42:36 biped12 bluetoothd[3773]: Starting SDP server
Aug 23 11:42:36 biped12 bluetoothd[3773]: src/sdpd-server.c:init_server() binding UNIX socket: Read-only file system
Aug 23 11:42:36 biped12 bluetoothd[3773]: src/sdpd-server.c:start_sdp_server() Server initialization failed
Aug 23 11:42:36 biped12 bluetoothd[3773]: Bluetooth management interface 1.14 initialized
Aug 23 11:42:36 biped12 bluetoothd[3773]: src/adapter.c:reset_adv_monitors_complete() Failed to reset Adv Monitors: Unknown Command (0x01)
要解决这个问题,您必须将配置更改为:
[Unit]
Description=Bluetooth service
Documentation=man:bluetoothd(8)
ConditionPathIsDirectory=/sys/class/bluetooth
[Service]
Type=dbus
BusName=org.bluez
ExecStart=/usr/lib/bluetooth/bluetoothd -C
NotifyAccess=main
#WatchdogSec=10
Restart=on-failure
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
LimitNPROC=1
ProtectHome=true
ProtectSystem=full
[Install]
WantedBy=bluetooth.target
Alias=dbus-org.bluez.service
https://stackoverflow.com/questions/73321721
复制相似问题