我正试图通过Python脚本在Khadas板上使用pybluez连接到蓝牙设备(有点像Raspberry Pi,aarch64(。
我已经手动将PyBluez更新到5.65,因为它包含我需要的修复程序。CCD_ 1和CCD_。
启动脚本后,我得到
> 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
在此之后,我编辑了/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)
如果升级,还必须更新系统服务配置,因为新配置在这种情况下不起作用。如果运行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