sudo apt-get install python python-gtk2Скачиваем отсюда архив со Python-скриптом и папкой с иконками батареи, проверим что у скрипта battery_indicator.py есть права на исполнение и запускаем. Всё, индикатор батареи висит в системном трее, далее просто закидываем скрипт в автозапуск.
Индикатор батареи имеет 5 состояний отображения иконки. Первые 3 — это потребление батареи, когда питание от сети отключено:
- Полный заряд батареи — 90-100%;
- Средний заряд — 30-90%;
- Низкий заряд — 30% и менее.
Остальные 2 состояния — это:
- Зарядка батареи от сети;
- Питание от сети (когда батарея полностью заряжена).
При наведении курсора мыши на индикатор — появляется одно из сообщений:
- “Charging” — идёт зарядка;
- “Charged” — батарея заряжена (питание от сети);
- “Discharging” — разрядка (питание от батареи).
И следом отображается состояние заряда батареи в процентах.
Код скрипта:
import pygtk pygtk.require('2.0') import gtk from os import path import re app_title = 'Battery status indicator' timer_interval = 1000 icons_dir = path.join(path.dirname(__file__), 'icons') icon_path = { 'charge': path.join(icons_dir, 'battery-charge-icon.png'), 'plug': path.join(icons_dir, 'battery-plug-icon.png'), 'full': path.join(icons_dir, 'battery-full-icon.png'), 'half': path.join(icons_dir, 'battery-half-icon.png'), 'low': path.join(icons_dir, 'battery-low-icon.png') } icon = gtk.StatusIcon() icon.set_title(app_title) icon.set_tooltip(app_title) def set_timer(): gtk.timeout_add(timer_interval, update) def get_info_and_state(): return { 'info': open('/proc/acpi/battery/BAT0/info', 'r').read(), 'state': open('/proc/acpi/battery/BAT0/state', 'r').read() } def get_charge_percent(data): full = int(re.search('last full capacity:\s*(\d+) mAh', data['info']).group(1)) current = int(re.search('remaining capacity:\s*(\d+) mAh', data['state']).group(1)) return current * 100 / full def get_status(data): return str(re.search('charging state:\s*(\w+)', data['state']).group(1)) last_status = None last_icon = None last_val = None def update(*args): global last_status, last_icon, last_val data = get_info_and_state() val = get_charge_percent(data) status = get_status(data) if status == 'charged' and val < 100: val = 100 if status != last_status or val != last_val: if status == 'discharging': icon.set_tooltip('Battery is discharging, ' + str(val) + '%') if val <= 30: new_icon = icon_path['low'] elif val <= 90: new_icon = icon_path['half'] elif val <= 100: new_icon = icon_path['full'] else: raise Exception('Unknown battery percent value!') if new_icon != last_icon: icon.set_from_file(new_icon) last_icon = new_icon elif status == 'charging': icon.set_tooltip('Battery is charging, ' + str(val) + '%') new_icon = icon_path['charge'] if new_icon != last_icon: icon.set_from_file(new_icon) last_icon = new_icon elif status == 'charged': icon.set_tooltip('Battery is charged, ' + str(val) + '%') new_icon = icon_path['plug'] if new_icon != last_icon: icon.set_from_file(new_icon) last_icon = new_icon else: raise Exception('Unknown battery status value!') last_status = status last_val = val set_timer() update() gtk.main()P.S. Вот в этом файле: /proc/acpi/battery/BAT0/info, — вы можете посмотреть заявленную производителем ёмкость батареи (design capacity), — и последний максимальный заряд батареи (last full capacity) и по нехитрой формуле (last-full * 100 / design) вы можете узнать сколько процентов ёмкости батареи осталось от изначального значения.
Комментариев нет:
Отправить комментарий