Намедни озадачился отсутствием индикатора заряда батареи в xfce-4.4.3, который идет в стандартной поставке Slackware 12.2. Плагин, который можно скачать с офф. сайта проекта xfce мне не понравился хотя бы только потому, что тянет за собой ряд зависимостей, захламлять которыми машину как-то не хочется, плюс установить удалось только одну из версий, которая толком и не работала. С другой стороны, на машинке уже установлена libnotify, которая позволяет выводить всплывающие уведомления, так почему бы не вспользоваться ей. Решение и реализация заняли всего 10 минут.
1. Определяемся, где у нас лежит информация о батарее.
$ cat /proc/acpi/battery/BAT1/state — информация о состоянии, отсюда будем брать текущий заряд. $ cat /proc/acpi/battery/BAT1/info — общая информация, отсюда будем брать общую емкость, для вычисления процентов. Возможно у Вас путь будет немного другой, например /proc/acpi/battery/BAT0/state 2. Пишем скрипт.
Первое что пришло на ум, это perl, хотя уверен, реализовать такое легко и на bash
#!/usr/bin/perl -w
my ($file1,$file2,@data,$damage,$current);
#читаем файл с информацией о батарее
open F1, '/proc/acpi/battery/BAT1/info'; while (<F1>) { $file1 .= $_; }; close F1;
open F2, '/proc/acpi/battery/BAT1/state'; while (<F2>) { $file2 .= $_; }; close F2;
#выбираем интересующие нас данные
return unless @data[0] = $file1 =~ /design\scapacity\:\s+(\d+)\s\w+/;
return unless @data[1] = $file1 =~ /last\sfull\scapacity\:\s+(\d+)\s\w+/;
return unless @data[2] = $file2 =~ /remaining\scapacity\:\s+(\d+)\s\w+/;
#считаем проценты
$damage = 100-(@data[1]/40);$damage = sprintf("%.1f",$damage);
$current = (@data[2]*100)/@data[1];$current = sprintf("%.1f",$current);
#вызываем внешнюю программу для отображения данных
`notify-send -u critical -t 7000 -i battery "
\tТекущий заряд батареи $current%
\n\tИзнос батареи $damage%"`
Вот собственно и все, при вызове этой программки получаем нечто подобное:

При желании можно вызывать скрипт посредством bash скрипта, а если сделать симлинк на этот скрипт в /usr/local/bin, то можно, в добавок, повесить вызов уведомления на хоткей.
Comment