Em 17-01-2011 14:10, Fagner Patricio escreveu:
Olá pessoal!! Olá! Em sistema modernos de Linux, usa-se o DBus. Para usá-lo com Python leia a documentação em [1] e sobre energia leia em [2]. [1] http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html [2] http://upower.freedesktop.org/docs/ref-dbus.html Veja um programa em Python (trocar "...." por " ") bem simples para capturar todos os eventos do sistema via DBus, imprimir na tela e sair se for pressionado o botão de "power": #!/usr/bin/env python # -*- coding: utf-8 -*- import dbus import gobject from dbus.mainloop.glib import DBusGMainLoop def sinal_recebido(*args): ....print args ....# Se precissionar o botão de power sai do loop ....if args == (dbus.String(u'ButtonPressed'), dbus.String(u'power')): ........loop.quit() DBusGMainLoop(set_as_default=True) system_bus = dbus.SystemBus() system_bus.add_signal_receiver(sinal_recebido) loop = gobject.MainLoop() loop.run() Este outro aqui lista os dispositivos de energia e detecta a alteração no dispositivo de linha de energia: #!/usr/bin/env python # -*- coding: utf-8 -*- import dbus import gobject import datetime from dbus.mainloop.glib import DBusGMainLoop def detalhes_energia(): ....power_interface = ('org.freedesktop.UPower', '/org/freedesktop/UPower') ....power_object = system_bus.get_object(*power_interface) ....power_devices = power_object.EnumerateDevices(dbus_interface = power_interface[0]) ....print "Interfaces de energia:" ....for power_device in power_devices: ........print "|-->", power_device ........obj = system_bus.get_object(power_interface[0], power_device) ........props = obj.GetAll(power_interface[0] + '.Device', dbus_interface = 'org.freedesktop.DBus.Properties') ........for prop in props: ............if prop == "Type": ................print "| |-->", prop, ":", props[prop], ('Unknown', 'Line Power', 'Battery', 'Ups', 'Monitor', 'Mouse', 'Keyboard', 'Pda', 'Phone')[props[prop]] ............elif prop == "State": ................print "| |-->", prop, ":", props[prop], ('Unknown', 'Charging', 'Discharging', 'Empty', 'Fully charged', 'Pending charge', 'Pending discharge')[props[prop]] ............else: ................print "| |-->", prop, ":", props[prop] def sinal_recebido(*args): ....obj = system_bus.get_object('org.freedesktop.UPower', '/org/freedesktop/UPower/devices/line_power_ACAD') ...._on_line_ = obj.Get('org.freedesktop.UPower.Device', 'Online', dbus_interface = 'org.freedesktop.DBus.Properties') ....print datetime.datetime.now(), ('Desenergizado!', 'Energizado!')[on_line] DBusGMainLoop(set_as_default=True) system_bus = dbus.SystemBus() detalhes_energia() # Filtro somente para chamar a função quando houver alteração nesse dispositivo system_bus.add_signal_receiver(sinal_recebido, # função a ser chamada quando o sinal for emitido ..............................."Changed", # sinal emitido ...............................'org.freedesktop.UPower.Device', # interface final ...............................'org.freedesktop.UPower', # interface primária ...............................'/org/freedesktop/UPower/devices/line_power_ACAD') # caminho do dispositivo no dbus loop = gobject.MainLoop() loop.run() []'s Junior Polegato |