Em 17-01-2011 14:10, Fagner Patricio escreveu:
Olá pessoal!!
Vejam se vocês podem me ajudar, eu fiz um script em Python para
verificar o estado da variável "*/proc/acpi/ac_adapter/AC/state*" ela
indica quando o cabo de energia de um notebook está ligado ou com
energia, seus valores possíveis são *"on-line"* quando está plugado ou
com energia e *"off-line"* quando não está plugado ou sem energia, o
script terá que executar algumas ações apenas quando valor dessa
varível mudar de um estado para outro, alguém sabe se o Linux tem
algum sistema próprio para ficar fazendo essa checagem e assim chamar
meu script?
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