2011-10-31 3 views
1

내 USB 스틱이 연결되었을 때 내 사용자 정의 스크립트를 실행하는 스크립트를 만들려고합니다. 나는 좋은 파이썬 스크립트 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 : 오픈 수세 11.4

내가 전에 DBUS 작동하지 않았다, 당신이 내게 줄 수를 무슨 일 이니? 감사합니다. .

답변

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

가 BTW : HAL은 이제 사용되지 않습니다, 당신은 아마 udisks로 전환해야한다. http://www.freedesktop.org/wiki/Software/hal

+0

많은 감사합니다. 작동합니다! :) – ink

+0

내 질문과 관련이있는 것 같습니다. 확인할 수 있습니까? http://stackoverflow.com/questions/34424037/dbus-to-python-takes-exactly-1-gargument – ArtOfWarfare