dbus
Algumas pessoas relataram que minha solução anterior do udev enviou a notificação muitas vezes quando o cabo de alimentação estava conectado. Eu não consegui reproduzir isso, mas escrevi este script python para utilizar o dbus em vez do udev. Salve-o como um arquivo .py
em algum lugar no seu disco rígido. Marque o arquivo executável executando:
sudo chmod +x yourFile.py
e adicione-o aos seus aplicativos de inicialização conforme descrito aqui . Este script requer que o pacote acpi
esteja instalado.
#!/usr/bin/python
import dbus
from dbus.mainloop.glib import DBusGMainLoop
import gobject
import subprocess
dbus_loop = DBusGMainLoop()
bus = dbus.SystemBus(mainloop=dbus_loop)
onMessage="Power plugged in!"
offMessage="Power unplugged!"
onImage="/usr/share/icons/gnome/32x32/devices/ac-adapter.png"
offImage="/usr/share/icons/gnome/32x32/status/battery-full.png"
def callback():
state = subprocess.check_output(["acpi", "-a"]).split(':')[1].strip()
if state == "on-line":
subprocess.call(["notify-send", "-i", onImage, onMessage])
elif state == "off-line":
subprocess.call(["notify-send", "-i", offImage, offMessage])
bus.add_signal_receiver(callback, 'Changed', 'org.freedesktop.UPower.Device', 'org.freedesktop.UPower', '/org/freedesktop/UPower/devices/line_power_AC')
loop = gobject.MainLoop()
loop.run()
udev
Com um pouco de experimentação (e uma pequena ajuda), pude utilizar uma regra udev para realizar isso . Algumas pessoas relataram que às vezes envia a notificação mais de uma vez, mas eu não tive nenhum problema. YMMV.
Crie um script com o seguinte conteúdo:
#!/bin/bash
# Set this to your username
USER="some_user"
if [ "$POWER" == "on" ]
then
DISPLAY=:0 /bin/su $USER -c '/usr/bin/notify-send -i /usr/share/icons/gnome/32x32/devices/ac-adapter.png "Power cable plugged in."'
elif [ "$POWER" == "off" ]
then
DISPLAY=:0 /bin/su $USER -c '/usr/bin/notify-send -i /usr/share/icons/gnome/32x32/status/battery-full.png "Power cable unplugged."'
fi
substituindo some_user
pelo seu nome de usuário. Marque o arquivo executável executando:
sudo chmod +x /path/to/script.sh
substituindo /path/to/script.sh
pelo caminho para onde você salvou o script.
Em seguida, crie um arquivo em /etc/udev/rules.d
chamado 10-power.rules
com o conteúdo:
SUBSYSTEM=="power_supply", ACTION=="change", ENV{POWER_SUPPLY_ONLINE}=="0", OPTIONS+="last_rule", RUN+="/path/to/script.sh" ENV{POWER}="off"
SUBSYSTEM=="power_supply", ACTION=="change", ENV{POWER_SUPPLY_ONLINE}=="1", OPTIONS+="last_rule", RUN+="/path/to/script.sh" ENV{POWER}="on"
novamente substituindo /path/to/script.sh
pelo caminho do script criado anteriormente.
Agora recarregue as regras do udev executando:
sudo udevadm control --reload-rules
Desconecte o cabo de energia. Você deve receber uma notificação.