2016-01-04 5 views
4

Я использую Bluetooth-ключ, чтобы попытаться отправить информацию от ubuntu 15.04 до малины pi b + запускать последнее изображение debian jessie. Я просто следую руководству http://people.csail.mit.edu/albert/bluez-intro/. Я получил простые протоколы RFCOMM и L2CAP. У меня проблемы с протоколом SDP. Код сервера -rfcomm разрешение Bluetooth отклонено ошибка raspberry pi

from bluetooth import * 

server_sock = BluetoothSocket(RFCOMM) 
server_sock.bind(("", PORT_ANY)) 
server_sock.listen(1) 

advertise_service(server_sock, "SampleServer",service_classes=[SERIAL_PORT_CLASS], profiles=[SERIAL_PORT_PROFILE]) 

client_sock, client_info = server_sock.accept() 

print "connection from: ", client_info 

client_sock.send("PyBluez server says Hello!") 
data = client_sock.recv(1024) 
print "received: ", data 

client_sock.close() 
server_sock.close() 

ошибка я получаю -

Traceback (most recent call last): 
    File "rfcomm-server.py", line 7, in <module> 
    advertise_service(server_sock, "SampleServer",service_classes=[SERIAL_PORT_CLASS], profiles=[SERIAL_PORT_PROFILE]) 
    File "/usr/lib/python2.7/dist-packages/bluetooth/bluez.py", line 176, in advertise_service 
    raise BluetoothError (str (e)) 
bluetooth.btcommon.BluetoothError: (13, 'Permission denied') 

Вот несколько шагов, у меня есть taken-

Add the user 'pi' to lp group 
run piscan on hciconfig hci0 
Add --compat option to bluetoothd in bluetooth.service 

Любая помощь будет оценена. Благодаря!

+0

Вы пробовали работать как корень? –

+2

Я должен ударить себя по голове. Иногда решение так просто! –

ответ

-1

И sudo выполняет эту работу.

sudo python script.py 
7

Выполнение сценария под псевдонимом root, но it's not a good practice.

Согласно this thread, вам просто нужно настроить разрешения на файл /var/run/sdp (который создается при использовании переключателя --compat).

Таким образом, чтобы предотвратить ссылку гниль Я воспроизводящий пост dlech и адаптируя его к Raspberry Pi:

  1. убедитесь, что ваш pi пользователь находится в bluetooth группе:

    $ cat /etc/group | grep bluetooth 
    bluetooth:x:113:pi 
    

    1.1. Если это не так, добавьте pi к bluetooth группы:

    $ sudo usermod -G bluetooth -a pi 
    
  2. Изменить группу файла /var/run/sdp:

    $ sudo chgrp bluetooth /var/run/sdp 
    
  3. Чтобы сделать изменения постоянными после перезагрузки:

    3.1. Создать файл /etc/systemd/system/var-run-sdp.path со следующим содержанием:

    [Unit] 
    Descrption=Monitor /var/run/sdp 
    
    [Install] 
    WantedBy=bluetooth.service 
    
    [Path] 
    PathExists=/var/run/sdp 
    Unit=var-run-sdp.service 
    

    3.2. И еще один файл, /etc/systemd/system/var-run-sdp.service:

    [Unit] 
    Description=Set permission of /var/run/sdp 
    
    [Install] 
    RequiredBy=var-run-sdp.path 
    
    [Service] 
    Type=simple 
    ExecStart=/bin/chgrp bluetooth /var/run/sdp 
    

    3.3. И, наконец, начать все это:

    sudo systemctl daemon-reload 
    sudo systemctl enable var-run-sdp.path 
    sudo systemctl enable var-run-sdp.service 
    sudo systemctl start var-run-sdp.path 
    

Заслуга пользователя dlech, который «понял это» изначально.

+2

Вам необходимо изменить служебный файл, который будет включать: 'ExecStartPost =/bin/chmod 662/var/run/sdp'. Это сработало для меня –