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