2011-10-31 24 views
1

私のカスタムスクリプトを起動するためのスクリプトを作成しようとしています.USBスティックが接続されています。 私は素敵なPythonスクリプトhereが見つかりましたが、それはGetAllProperties()私は例外を取得メソッドを呼び出したとき:DBusオブジェクトエラー

ERROR:dbus.connection:Exception in handler for D-Bus signal:
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/dbus/connection.py", line 214, in maybe_handle_message
self._handler(*args, **kwargs)
File "./hal-automount", line 31, in device_added
properties = self.udi_to_device(udi).GetAllProperties()
File "/usr/lib/python2.7/site-packages/dbus/proxies.py", line 68, in __call__
return self._proxy_method(*args, **keywords)
File "/usr/lib/python2.7/site-packages/dbus/proxies.py", line 140, in __call__
**keywords)
File "/usr/lib/python2.7/site-packages/dbus/connection.py", line 630, in call_blocking
message, timeout)
DBusException: org.freedesktop.DBus.Error.AccessDenied: Rejected send message, 3 matched rules; type="method_call", sender=":1.39539" (uid=0 pid=9527 comm="python) interface="(unset)" member="getAllProperties" error name="(unset)" requested_reply=0 destination=":1.8" (uid=0 pid=3039 comm="/usr/sbin/hald))

OS:openSUSEの11.4

を私はあなたが私を与えることができ、前にDバスでは動作しませんでした何が間違っているかのヒント?おかげさまで

答えて

2

DBusメソッド呼び出しがアクセスポリシーのために失敗しました。これはおそらく、インターフェースを指定せずにメソッドを呼び出したためです。あなたが使用しようとしたスクリプトのバグのように見えます(DBusメソッドは常にインターフェイス経由で呼び出されるべきです)。

は交換してみてください:

def udi_to_device(self, udi): 
    return self.bus.get_object("org.freedesktop.Hal", udi) 

で:

ところで
def udi_to_device(self, udi): 
    obj = self.bus.get_object("org.freedesktop.Hal", udi) 
    return dbus.Interface(obj, dbus_interface='org.freedesktop.Hal.Device') 

:HALは、おそらくudisksに切り替える必要があり、廃止されました。 http://www.freedesktop.org/wiki/Software/hal

+0

多くの感謝、それは動作します! :) – ink

+0

これは私の質問に関連しているように見える - あなたはそれをチェックできますか? http://stackoverflow.com/questions/34424037/dbus-to-python-takes-exactly-1-argument – ArtOfWarfare