【问题标题】:bluetooth.btcommon.BluetoothError: [Errno 2] No such file or directorybluetooth.btcommon.BluetoothError: [Errno 2] 没有这样的文件或目录
【发布时间】:2022-08-23 20:45:48
【问题描述】:

我正在尝试通过 Python 脚本使用 Khadas 板上的 pybluez 连接到蓝牙设备(有点像 Raspberry Pi,aarch64)。

我已手动将 PyBluez 更新为 5.65,因为它包含我需要的修复程序。 bluetoothctl --versionbluetoothd --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)

    标签: python bluetooth pybluez


    【解决方案1】:

    如果您升级,您还必须更新系统服务配置,因为新配置在这种情况下不起作用。如果您运行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
    

    【讨论】:

      猜你喜欢
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 2015-11-19
      • 2013-03-21
      • 2015-04-09
      • 2019-05-26
      • 2018-12-06
      相关资源
      最近更新 更多