[Python] Mit HAL feststellen wann ein Gerät gemounted wird

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
XCooperation
Beiträge: 78
Registriert: 01.06.2005 15:05:37
Wohnort: Schrobenhausen
Kontaktdaten:

[Python] Mit HAL feststellen wann ein Gerät gemounted wird

Beitrag von XCooperation » 30.08.2008 14:38:26

Hallo,
ich entwickle gerade ein kleines Programm in Python, das überwachen soll, welche Laufwerke am Computer angeschlossen sind und welche gerade gemounted sind. Um die nötigen Informationen zu bekommen verwende ich HAL. Dafür gibt es auch ein schönes Beispiel unter https://dfwpython.org/repo/Projects/DBUS/dtest.py .
Ich bin jetzt inzwischen soweit, dass ich feststellen kann, wann ein Gerät an den Computer angeschlossen wird oder entfernt wird. Das einzige was noch nicht funktioniert ist, festzustellen, wann ein Gerät gemounted oder ungemounted (arrgh deutsch + englisch ;) ) wird.

Nach allem, was ich bisher rausgefunden habe, müsste der Code folgendermaßen aussehen:

Code: Alles auswählen

class HalDevice(object):

	INTERFACE = 'org.freedesktop.Hal.Device'

	def __init__(self, udi):
		bus      = dbus.SystemBus()
		self.dev_obj  = bus.get_object(HalManager.SERVICE, udi)
        	self.dev = dbus.Interface(self.dev_obj, HalDevice.INTERFACE)
        	self.udi = udi

		self.dev.connect_to_signal('PropertyModified', self.property_modified)
		self.dev.connect_to_signal('Condition', self.condition_occurred)

		self.properties = self.HalDevicePropertiesMapping(self)
		self.capabilities = self.HalDeviceCapabilitiesSet(self)

	def condition_occurred(self, condition, *args, **kwargs):
		"""
		Notification handler that receives information about the occurrence of
		a non-property event.

		Normally this is used to signal events that aren't or can't be
		expressed in properties, e.g. 'ProcessorOverheating' etc.

	"""
		print "condition_occurred for "  + self.udi
		print "condition = " + str(key)
		print "args = " + str(args)
		print "kwargs = " + str(kwargs)
		pass
Wenn ein Gerät gemounted wird, sollte dann eigentlich die Funktion condition_occured aufgerufen werden. Sie wird aber nie aufgerufen. Was muss ich tun, damit das funktioniert?
Falls es nötig ist, kann ich auch noch den gesamten Code des Programms posten.
Danke schon mal im Voraus :)
Never trust a running system!
http://www.xenesis.net

Antworten