系统:Ubuntu 15.10 with Bluez 5.38
与BlueZ 4相关的PyBluez对此没有任何问题。但是,自从迁移到BlueZ 5并进行必要的调整以运行蓝牙代码后,我无法在没有sudo
的情况下运行相同的程序。使用sudo
一切都按预期工作。但是,如果我在没有sudo的情况下运行,则会抛出以下错误:
Traceback (most recent call last):
File "/home/sidmeister/mymodule/py34/lib/python3.4/site-packages/PyBluez-0.22-py3.4-linux-x86_64.egg/bluetooth/bluez.py", line 240, in advertise_service
protocols)
_bluetooth.error: (13, 'Permission denied')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.4/runpy.py", line 170, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.4/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/sidmeister/mymodule/mymodule/blue/receiver.py", line xxx, in some_function
profiles=[bluetooth.SERIAL_PORT_PROFILE]
File "/home/sidmeister/mymodule/py34/lib/python3.4/site-packages/PyBluez-0.22-py3.4-linux-x86_64.egg/bluetooth/bluez.py", line 242, in advertise_service
raise BluetoothError (str (e))
bluetooth.btcommon.BluetoothError: (13, 'Permission denied')
据我所知,这源于新蓝牙库的安全性提高,这就是它需要sudo
的原因。但是,是否有任何特殊组(如访问摄像机时为video
)具有固有的蓝牙访问权限,以便我可以使我的用户成为该组的成员,并且它将能够访问蓝牙而不{{1 }}?仅供参考,我的用户已经是sudo
群组的成员,但它没有帮助。
如果我有其他方法可以解决这个问题,请告诉我。
答案 0 :(得分:1)
您可以使用setcap
设置python可执行文件的权限。
在Ubuntu上安装setcap
:
sudo apt-get install libcap2-bin
找出你的python可执行文件的位置:
which python
这通常是一个链接。您需要弄清楚二进制文件的实际路径。在我的计算机上,/usr/bin/python
是指向/usr/bin/python2.7
为可执行文件分配适当的权限:
sudo setcap 'cap_net_raw,cap_net_admin+eip' <path-to-python-binary-here>