다음과 같은 문제에 직면했습니다. Bluetooth API를 사용하는 Go로 작성된 애플리케이션이 있습니다. 응용 프로그램은 Windows용으로 컴파일되어 실행될 때 작동합니다. 내 Raspberry Pi용으로 컴파일하면 애플리케이션이 실패합니다. 문제가 무엇인지에 대한 힌트를 얻기 위해 인터넷을 검색했습니다. 애플리케이션에서 다음 오류가 발생합니다.
Properties.GetAll org.bluez.Device1: Method "GetAll" with signature "s" on interface "org.freedesktop.DBus.Properties" doesn't exist
분명히 dbus 문서를 읽을 때 메서드는 지정된 서명이 있는 인터페이스에 존재해야 합니다. 따라서 dbus 설치에 문제가 있을 수 있습니다.
이 오류가 발생한 몇 가지 사례를 찾았지만 해결 방법이 설명된 사례는 없습니다.
- https://github.com/blueman-project/blueman/issues/460
- https://www.linuxquestions.org/questions/slackware-14/pc-config-for-bluetooth-not-able-to-dl-anything-4175656862/
해결책을 찾는 데 도움을 주기 위해 linuxquestions 포럼에 제공된 명령을 실행했습니다.
$ dbus-send --system --dest=org.bluez --type=method_call --print-reply /org/bluez/hci0/dev_xx_xx_xx_xx_xx_xx org.freedesktop.DBus.Properties.GetAll string:org.bluez.Device1
Error org.freedesktop.DBus.Error.UnknownObject: Method "GetAll" with signature "s" on interface "org.freedesktop.DBus.Properties" doesn't exist
이는 내가 실행 중인 애플리케이션의 문제가 아니라 Raspberry Pi 자체의 문제임을 나타냅니다. Python으로 작성된 다른 애플리케이션이 Bluetooth 연결을 성공적으로 생성할 수 있었으므로 하드웨어 문제는 제외되었습니다.
내 시스템에 대한 추가 정보는 다음과 같습니다.
$ rfkill
ID TYPE DEVICE SOFT HARD
0 wlan phy0 blocked unblocked
1 bluetooth hci0 unblocked unblocked
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
$ apt -qq list bluez
bluez/oldstable,now 5.55-3.1+rpt2+deb11u1 armhf [installed,automatically]
설치에 문제가 있나요? 어떻게 해결할 수 있나요?
답변1
귀하의 요청에 잘못된 개체 경로가 정의되어 있는 것 같습니다. bluez 서비스의 모든 개체를 가져오고 /org/bluez/hci0/dev_xx_xx_xx_xx_xx_xx
실제로 존재 하는지 확인하려면 다음 코드 조각을 사용하는 것이 좋습니다.
dbus-send --system --dest=org.bluez --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects
답변2
발견된 문제: Windows에서는 필요하지 않지만 bluez 구현은 BT 장치를 검색한 후에만 dbus 경로를 생성합니다.
bluez를 사용하여 장치에 연결하려면 프로그램이 먼저 장치를 검색해야 합니다. 장치가 검색되면 필요한 모든 인터페이스가 생성됩니다.