Raspi - DBUS - Bluez: 'org.freedesktop.DBus.Properties' 인터페이스에 's' 서명이 있는 'GetAll' 메서드가 존재하지 않습니다.

Raspi - DBUS - Bluez: 'org.freedesktop.DBus.Properties' 인터페이스에 's' 서명이 있는 'GetAll' 메서드가 존재하지 않습니다.

다음과 같은 문제에 직면했습니다. 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 설치에 문제가 있을 수 있습니다.

이 오류가 발생한 몇 가지 사례를 찾았지만 해결 방법이 설명된 사례는 없습니다.

해결책을 찾는 데 도움을 주기 위해 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를 사용하여 장치에 연결하려면 프로그램이 먼저 장치를 검색해야 합니다. 장치가 검색되면 필요한 모든 인터페이스가 생성됩니다.

관련 정보