1

USBスティックが接続されたときにカスタムスクリプトを起動するスクリプトを作成しようとしています。ここで素晴らしいPythonスクリプトを見つけましたが、 GetAllProperties()メソッドを呼び出すと、例外が発生します。

エラー:dbus.connection:D-Busシグナルのハンドラーの例外:
トレースバック(最後の最後の呼び出し):
ファイル "/usr/lib/python2.7/site-packages/dbus/connection.py"、行214、maybe_handle_message
self._handler(* args、** kwargs)
ファイル "./hal-automount"、31行目、device_added
プロパティ= self.udi_to_device(udi).GetAllProperties()
ファイル "/usr/lib/python2.7/site- packages / dbus / proxys.py "、68行目、
__ call__ return self._proxy_method(* args、** keyswords)
ファイル" /usr/lib/python2.7/site-packages/dbus/proxies.py "、140行目、__ call__
**キーワード)
ファイル "/usr/lib/python2.7/site-packages/dbus/connection.py"、630行目、call_blocking
メッセージで、タイムアウト)
DBusException:org.freedesktop.DBus.Error.AccessDenied:拒否された送信メッセージ、3つの一致したルール。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 / halld))

OS:openSuSE 11.4

以前はDBusを使用していませんでしたが、何が問題なのかヒントを教えていただけますか?ありがとう。

4

1 に答える 1

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は廃止されたので、おそらくudiskに切り替える必要があります。http://www.freedesktop.org/wiki/Software/halを参照してください

于 2011-10-31T09:41:12.960 に答える