2016-04-18 9 views
0

システム:Ubuntu 15.10 with Bluez 5.38BlueZ5ライブラリを使用してPyBluezサンプルを(sudoなしで)通常のユーザとして実行するにはどうすればよいですか?

PyBluez with BlueZ 4はこれに問題はありませんでした。しかし、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を必要とする理由である、新しいBluetoothのライブラリで強化されたセキュリティに由来することを理解しています。しかし、私のユーザをそのグループのメンバーにすることができ、sudoなしでブルートゥースにアクセスできるように、ブルートゥースに固有のアクセス権を持つ特別グループ(カメラにアクセスする場合はvideoなど)がありますか?参考までに、私のユーザーは既にdialoutグループのメンバーであり、助けにはなりません。

私はこの問題に取り組むことができる他の方法があるかどうか教えてください。

答えて

1

setcapを使用して、python実行可能ファイルのアクセス許可を設定することができます。

Ubuntuの上setcapをインストールするには:あなたのpythonの実行ファイルがどこにある

sudo apt-get install libcap2-bin 

を把握するには:

which python 

これは、多くの場合、リンクになります。バイナリの実際のパスを把握する必要があります。

sudo setcap 'cap_net_raw,cap_net_admin+eip' <path-to-python-binary-here> 

関連質問:https://unix.stackexchange.com/a/182559

+0

私はこれをしなかった私のマシンでは、/usr/bin/pythonは、実行可能ファイルに適切な権限を割り当てるには/usr/bin/python2.7

へのリンクです。 14.04で動作しますが、15.10では失敗します。 'sudo'ではうまく動作します。私は 'sudo'なしで15.10で動作するようにこれが必要です! – Sidmeister

+0

あなたの質問から、あなたはpython 3.4を使っているようです。したがって、私はあなたのバイナリが '/ usr/bin/python3.4'のようなものだろうと思います。 'setcap'を実行しているときにエラーが出たのですか、それとも単に' sudo'であなたのPythonコードを実行する必要があるという問題を修正していませんか? –

+0

はい。私はpython3.4の許可を設定し、それは滑らかでした。しかし、それは許可の問題を解決しませんでした。 'bluez.py'ライブラリの中で' bluetooth._bluetooth.sdp_advertise_service'が呼び出されたときに、 – Sidmeister

関連する問題