Сколько пользовался всяческими DE (десктопными окружениями) всегда натыкался на какие-нибудь ограничения. То есть всё прекрасно! Всё работает, дружественно к пользователю, но как только хочешь чего-то особенного — натыкаешься на ограничения системы (будь то работа с pulseaudio или настройка альтернативного шортката на закрытие окна). В общем, GNOME, KDE, Xfce удобны пока ваша фантазия находится в пределах того, что позволили разработчики.
Каждое из перечисленных DE обладает своим собственным powersave-демоном, он же берёт на себя всяческие оповещения, засыпания и прочее. К сожалению, ни один из них не двигается дальше «сделать потемнее экран» и «отключить композит», чтобы продлить время работы без розетки. По настоящему мощный powersave я увидел только у laptop-tools (в настройках, к слову, советую покопаться, ибо вся мощь этих утилит стандартно отключена). Но не только заботой о сохранении энергии хороши пресловутые демоны: они также умеют оповещения. Конечно, по юникс-вею laptop-tools не должен этим заниматься, поэтому мы напишем свой демон «с блекджеком и шлюхами».
Всплывающие информирующие окна у нас будут реализованы через libnotify — готовый, удобный, настраиваемый механизм. Также нам понадобится демон следящий за появлением новых сообщений и выводящий их на экран, у вас два на выбор: notification-daemon (Gnome) или xfce4-notifyd (Xfce, как ни странно), насчёт KDE’шной оповещалки ничего путного сказать не могу — видимо у них своя реализация (ещё один повод задуматься, а так ли хорош KDE4?).
Собственно сам скрипт-демон (скрипт сам отделяется от терминала) batterynotifyd:
#!/bin/bash
# Author: Vitaly Dolgov (ferhiord (at) gmail (dot) com), 2009
HALF_L=50
LOW_L=15
CRIT_L=5
(while true ; do
sleep 5s
MODE=$(acpi -b | awk '{print $3}' | sed 's/,//')
CUR_L=$(acpi -b | awk '{print $4}' | sed 's/%,//')
if [ "$MODE" = "Discharging" ] ; then continue ; fi
if [ $CUR_L -eq $HALF_L ] ; then
notify-send -i battery -u normal "Warning!" "Battery charge is half! ($HALF_L%)"
sleep 2m
elif [ $CUR_L -eq $LOW_L ] ; then
notify-send -i battery -u normal "Warning!" "Battery charge is low! ($LOW_L%)"
sleep 2m
elif [ $CUR_L -eq $CRIT_L ] ; then
notify-send -i battery -u critical "Warning!" "Battery charge is critical! ($CRIT_L%)"
sleep 2m
fi
done) & disown
Знаю, скрипт есть куда дорабатывать, но основную задачу он всё же выполняет. Тут вы сами вольны вызывать что хотите и в каком хотите порядке, не ограничиваясь рамками с кнопочками и выпадающими списками, которые для вас любезно создали разработчики. Если у вас будет время и желание улучшить скрипт (добавить функционал, прилизать), можете прислать доработанную версию мне — возможно я включу изменения. Удачи :)
P.S. Чтобы демон автоматически запускался при загрузке системы, пропишите его в /etc/rc.local.