当前位置:  开发笔记 > 编程语言 > 正文

rfcomm bluetooth权限被拒绝错误覆盆子pi

如何解决《rfcommbluetooth权限被拒绝错误覆盆子pi》经验,为你挑选了1个好方法。

我正在使用蓝牙加密狗尝试从ubuntu 15.04发送信息到raspberry pi b +运行最新的debian jessie图像.我只是关注http://people.csail.mit.edu/albert/bluez-intro/教程.我得到了简单的RFCOMM和L2CAP协议.我在运行SDP协议时遇到问题.服务器代码是 -

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 
    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')

以下是我采取的一些步骤 -

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

任何帮助,将不胜感激.谢谢!



1> Peter Kovac..:

以root用户身份运行脚本是有效的,但这不是一个好习惯.

根据此线程,您只需要调整/var/run/sdp文件的权限(使用--compat交换机时创建).

因此,为了防止链接腐烂,我正在复制dlech的帖子并将其改编为Raspberry Pi:

    确保您的pi用户在bluetooth群组中:

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

    1.1.如果不是,请添加pibluetooth组:

    $ sudo usermod -G bluetooth -a pi
    

    更改/var/run/sdp文件组:

    $ sudo chgrp bluetooth /var/run/sdp
    

    要在重新启动后使更改持久化:

    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.


您需要修改服务文件以包含:`ExecStartPost =/bin/chmod 662/var/run/sdp`.这对我有用
推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有