Bluetooth 어댑터 연결이 거부되었습니다.

Bluetooth 어댑터 연결이 거부되었습니다.

Android 휴대폰에 직렬 데이터를 전송하려는 Bluetooth 어댑터(약 2달러)가 있습니다.

나는 다음을 설치했습니다:

sudo apt-get install bluetooth bluez-utils blueman

스캔하는 동안 Android 기기를 찾았습니다. (이것은 동글이 작동하고 있다는 뜻인 것 같습니다.)

hcitool scan

그 후 나는 이것을 실행했습니다 :

sudo bluez-simple-agent hci0 xx:xx:xx:xx:xx:xx

이 파일을 편집했습니다./etc/bluetooth/rfcomm.conf

이와 관련하여:

rfcomm1 {
    bind yes;
    device xx:xx:xx:xx:xx:xx;
    channel 1;
    comment "Connection to Bluetooth serial module";
}

하지만 달리는 동안

sudo rfcomm connect 1, 입력 중입니다(' Can't connect RFCOMM socket: Connection refused' 상태

문제가 무엇입니까?

답변1

지금은 일을 하고 있는 것 같아요. Bluetooth좀 까다로운 것 같군요. 다른 사람이 유용하다고 생각할 경우를 대비해 전체 단계를 검토해 보겠습니다(비록 제가 처음에 시도한 것과 거의 비슷하지만). 이는 Nexus 4의 Android JB(4.2.2) 및 Arch Linux 3.6.7-1, Gnome 3.6의 bluez 4.101(gnome-bluetooth 포함)에서 작동합니다.

(이 단계는 아마도 유용하지 않을 것입니다.) Android를 종료 Bluetooth하고 Linux 컴퓨터에서 USB/블루투스 어댑터를 분리합니다(또는 내장 어댑터가 있는 경우 hcitool devname 재설정으로 재설정).

Linux에서 어댑터를 연결/엽니다 bluetooth. 어댑터가 보이는지 확인하십시오(gnome-bluetooth에서 설정할 수 있음 - bluetooth시스템 트레이 아이콘이 표시되어야 함).

bluetooth안드로이드 기기를 엽니다 . Android를 사용하여 어댑터와 페어링합니다(Linux에서는 반대 방향으로 페어링할 수 없습니다). 키를 제공하라는 대화 상자가 나타납니다. 원하는 PIN을 입력하세요. Gnome은 이전에 입력한 것과 동일한 PIN을 입력하라는 알림을 표시합니다. 이제 Android 기기와 키가 페어링되었습니다.

Linux에서는 터미널을 열고 bluetooth다음을 입력하여 사용 가능한 서비스를 확인하세요.

sdptool browse local

이미 직렬 포트 서비스가 있는 경우 해당 서비스가 어떤 채널인지 기록해 두십시오. 그렇지 않은 경우 서비스를 추가할 수 있습니다.

sdptool add --channel=22 SP

이제 다음 명령을 사용하여 채널을 듣습니다 rfcomm.

sudo rfcomm listen /dev/rfcomm0 22

rfcomm차단하고 다음과 같은 메시지의 연결을 수신합니다.

Waiting for connection on channel 22

Android에서는 BlueTerm 앱(http://pymasde.es/blueterm/, Google Play 스토어에서도 무료로 제공됨), 유사한 앱이면 모두 작동합니다. BlueTerm을 열고 옵션 > 장치 연결로 이동하여 페어링된 어댑터를 선택합니다.

앱이 연결되길 바랍니다. 청취를 차단한 터미널에 다음과 같은 메시지와 함께 추가 유효성 검사가 표시됩니다.

Waiting for connection on channel 22
Connection from 22:22:22:22:22:22 to /dev/rfcomm0
Press CTRL-C for hangup

BlueTerm 응용프로그램에 입력하는 모든 내용이 나타나야 합니다 /dev/rfcomm0. 새 터미널을 열고 다음을 수행하면 입력할 때 표시되는 내용을 확인할 수 있습니다.

cat /dev/rfcomm0

원천: Linux에서 Bluetooth 직렬 포트에 연결하고 데이터를 보내는 방법은 무엇입니까?


포장에 대해 논의하고 싶습니다.브루스그리고bluez-utils 도구, 이사한 이후로란츠 5예 를 sdptool들어 (이 질문과 동일),

$ sdptool browse local
Failed to connect to SDP server on FF:FF:FF:00:00:00: No such file or directory

이는 Bluez 5가 소켓 /var/run/sdp를 통한 통신을 위해 이전 C 인터페이스를 더 이상 사용하지 않고 해당 소켓이 더 이상 존재하지 않기 때문입니다. bluetoothd의 도움말 메시지는 해결책을 제공합니다.

$ /usr/lib/bluetooth/bluetoothd --help

...

 -C, --compat                Provide deprecated command line interfaces

나는 이것을 다음과 같이 적용한다.

# nano /etc/systemd/system/dbus-org.bluez.service

좋다:

ExecStart=/usr/lib/bluetooth/bluetoothd --compat

muru의 댓글: 위에서 편집됨 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

systemctl edit dbus-org.bluez.service서비스 파일을 직접 편집하는 대신 패키지 업데이트 시 손실되지 않는 오버레이 파일을 만드는 데 사용됩니다 .


그 다음에:

# systemctl daemon-reload
# systemctl restart bluetooth

말할 필요도 없이 이 편집 내용은 bluez가 업데이트될 때마다 되돌려집니다. 이제 /var/run/sdp가 존재하지만 sdptool은 여전히 ​​손상되었습니다.

$ sdptool browse local
Failed to connect to SDP server on FF:FF:FF:00:00:00: Permission denied

/var/run/sdpUbuntu(여전히 Bluez 4를 사용하는 14.04)와 비교하면 권한이 다른 것을 확인 하고 다음과 같이 설정합니다.

# chmod 777 /var/run/sdp

(주장하지 않고) 드디어 성공했습니다 sdptool.

원천: https://bbs.archlinux.org/viewtopic.php?id=201672

답변2

문제는 소켓이 생성되고 사용자 측에서 바인딩되었음에도 불구하고 connect()를 성공적으로 호출할 수 없다는 것입니다. ( bluez-X-Y.Z/tools/rfcomm.c출처에서). 실패한 connect() 호출(즉, 반환 값 <0)은 여러 가지 이유로 인해 발생할 수 있습니다.

귀하의 실제 질문은 "어떻게 성공적으로 연결합니까?"입니다.

이 문제를 해결하려면 먼저 다른 컴퓨터에 청취 소켓이 있는지 확인해야 합니다. 컴퓨터에서 실행 중인 다른 bluez 스택을 사용하여 이 작업을 수행하는 것이 좋습니다.

다른 머신에서 실행:

rfcomm listen 0           # listens on channel 1 by default

그리고 테스트 머신에서 실행해 보세요:

rfcomm connect 0 00:11:22:33:44:55 1

오류 없이 예상되는 동작입니다.

그런 다음 이 메커니즘을 사용하여 소켓을 연결하고 로그인하고 파일을 전송하는 등의 작업을 수행할 수 있습니다. 그러나 이것은 귀하의 질문을 넘어서는 것입니다.

관련 정보