середа, 18 листопада 2015 р.

Анонс: Управление питанием PC-BSD

Доброго времени суток.
Хочу поделится некоторыми подробностями того что прямо сейчас делаю для PC-BSD, а именно систему управления электропитанием. Планы наполеоновские, как обычно. Кое- что уже сделано и работает.
Надеюсь работа на ноутбуке станет намного более приятной.
Итак...


Предпосылки и хотелки

Ни для кого не секрет что FreeBSD с настройками по умолчанию на ноутбуке мягко скажем не лучшим образом себя чувствует. Тут и регулировка яркости подсветки экрана и отсутствие по умолчанию реакции на закрытие крышки и необходимость запуска powerd для динамического снижения частоты процессора и много чего другого. Был у меня пост на эту тему. Да, все это настраивается. Но через консоль и скриптами. А хочется мышкой.

Планируемые функции

Ниже самый полный список моих хотелок. Далеко не все будет сразу. Чего- то вообще, возможно, не будет:
  1.  Регулировка яркости подсветки. С поддержкой нескольких подсветок если таковые есть.
  2. Показ состояния батареи (или батарей если их несколько) с прогнозируемым временем автономной работы.
  3. Настройка действий при нажатии кнопки питания, кнопки "сон" или закрытии крышки ноутбука. Возможные действия- сон или гибернация (если поддерживается).
  4. Поддержка настраиваемых профилей. Каждому из состояний (на зарядке, разряжается, низкий заряд батареи) соответствует свой профиль.
  5. Показ информации об оборудовании (для батареи: емкость, производитель, серийный номер, остаточная емкость). 
  6. Отображение уведомлений о смене состояния электропитания, смене профиля, изменении яркости подсветки и т.д. на выбор в виде всплывающих уведомлений в системном лотке или HUD.
  7. Интерфейс командной строки. Например у меня клавиши Win+F5 и Win+F6 привязаны на смену подсветки +/-10%. Выглядит команда где- то следующим образом "pwrcli  sb +10"
  8. Показ значения текущего энергопотребления (в милливаттах).
  9. Сбор и показ статистики энергопотребления.
  10. Возможность временного отключения USB устройств (например встроенного адаптера Bluetooth или веб камеры), адаптеров WiFi как для текущего состояния так и настройками в профиле.
  11. Управление процессором (состояния сна, тактовые частоты и т.д.). По сути переписанный powerd с большим количеством настроек.
Последний пункт, думаю, объяснить нужно. Я до последнего не хотел туда лезть. Но, к сожалению запущенный powerd не имеет механизма смены настроек "на лету". Да и не много их у него. А руками перезапускать чужой демон всякий раз когда переключается профиль как бы "не комильфо". К тому же хотелось бы иметь возможность задавать как адаптивный выбор частот процессора так и частоты напрямую. Короче- больше настроек хороших и разных. Надеюсь от обвинения в NIH синдроме я отвертелся.

Из чего состоит управление электропитанием

 

Системный демон pwrd

Собственно сам демон управления электропитанием. Именно он проделывает всю "черную магию" по настройке подсветки, мониторингу батареи, получению информации от оборудования, выбору того или иного профиля в соответствии с состоянием системы и т.д.

 

Интерфейс командной строки: утилита pwrcli

Минимальный интерфейс командной строки. Позволяет установить значение подсветки (в т.ч. и относительное), сменить текущий профиль, показать информацию об оборудовании и т.д. но не может непосредственно менять профили и настройки.

 

Графический интерфейс: программа pc-power

Визуально на первый взгляд выглядит как иконка батареи в системном лотке. Но позволяет полностью настроить управление электропитанием, изменить текущие значения, изменять профили и настройки. Ну и, само собой, показывает все текущее состояние.

Немножко технических подробностей

Я понимаю что педантов и перфекционистов может хватить кондратий, но все таки сознаюсь: все компоненты написаны на Qt. Да, демон тоже. Сразу изложу доводы:
  1.  Because I can. Извините, но мне так удобно.
  2. Конкретно этот демон управления питанием на сервере бессмысленен. Для сервера замечательно подойдет powerd. Соответственно для десктопа наличие в системе Qt5 не есть чем- то из ряда вон выходящим.
Демон обеспечивает что- то типа  json based RPC. Используется два Unix сокета. Один для управления, другой для уведомлений (изменение профиля, изменение подсветки изменение состояния или оставшейся емкости батареи  т.д.). Т.е. если из командной строки вы изменили яркость подсветки то pc-power тут же получит уведомление об этом и отобразит Вам, например, по средине экрана прогрессбар с текущим состоянием. Более того. Если вы  измените sysctl напрямую pc-power тоже Вам это отобразит (хоть и с задержкой).
Да, везде протокол основанный на json. К стати, можете, скажем, из питона дергать демон или получать уведомления. Все по-пижонски так. Стильно-модно-молодежно.

Текущее состояние

И сразу скриншот:

На скриншоте (как раз все что  работает):
  • Батарейка в системном лотке. Показывает правильный заряд. Показывает состояние внешнего питания.
  • Регулировка яркости подсветки
  • Состояние батарей (одна, правда, фейковая для проверки)
  • Изменение текущего профиля
  • Кнопки перехода в режим сна или гибернации
Ну и еще:
  • pwrcli готова на 90%
  • Оторажение информации об оборудовании, профилях и энергопотреблении работает в демоне и в  pwrcli. В pc-power появится в течении пары дней.

Что нужно доделать перед тем как оно появится в Edge:
  • Добавить в pwrd и pc-power возможность изменения настроек, изменения, удаления и добавления профилей (все через RPC)
  • Доделать интерфейс  pc-power. Пока оно умеет только то что на скрине. Еще много работы.
  •  Добавить в pc-power отображение уведомлений
  • Несколько других мелких изменений и добавлений
  • Вылизывание всего
  • Написание man руководств для pwrd и pwrcli
  • Добавление локализации в  pwrcli
Надеюсь первую тестовую версию доделать где- то ближе к новому году. Но тут как фишка ляжет. Свободное время... вот в чем секрет... если оно есть, то его сразу нет.

В итоге по началу получится штука умеющая настраивать кнопки, крышку ноутбука , устанавливать яркость и показывать текущее состояние в купе с информацие об оборудовании. Дальше изменения буду порциями:
  1.  Добавление отключение USB устройств и WiFi
  2. Статистика энергопотребления
  3. Управление процессором
Надеюсь в итоге то что получится понравится не только мне.

Немає коментарів:

Дописати коментар