Tuner-плагин: Питание и экран блокировки Seni
  • Vala 71.1%
  • Python 25.5%
  • Meson 2.7%
  • Dockerfile 0.5%
  • Shell 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
plafonlinux 749a050462
All checks were successful
Release / Build and release (push) Successful in 6s
RPM / rpm (push) Successful in 2m57s
Исправить краш Тюнера при включении LAVD/ananicy-cpp
EnableUnitFiles/DisableUnitFiles передавали string[] литералом прямо
в Variant("(asbb)", ...) — маршалинг массива ломался, g_variant_new
получал NULL вместо GVariantBuilder, и tuner падал с сегфолтом
(подтверждено coredump: libtuner-niti-power.so). Массив юнитов теперь
собирается через VariantBuilder и подставляется как @as.
2026-10-10 19:41:06 +02:00
.forgejo/workflows release.yml: убрать несуществующий libtuner-niti-config-devel, добавить json-glib/blueprint-compiler 2026-10-09 18:19:32 +02:00
build-aux/altlinux Вендорить json-file.vala вместо BuildRequires: libtuner-niti-config-devel 2026-09-29 18:21:45 +02:00
data Планировщики: LAVD (два режима) и ananicy-cpp в Питании 2026-10-09 18:02:14 +02:00
src Исправить краш Тюнера при включении LAVD/ananicy-cpp 2026-10-10 19:41:06 +02:00
tests Исправить краш Тюнера при включении LAVD/ananicy-cpp 2026-10-10 19:41:06 +02:00
.gitignore Игнорировать локальное состояние проверки кода 2026-10-10 07:28:34 +02:00
CHANGELOG.md Доработка: исправления по проверке на реальной системе, единый порядок страниц 2026-09-19 12:32:55 +02:00
Containerfile Перенос панелей GNOME Settings 51 в Tuner-плагин: интерфейс, backend, тесты, журнал изменений 2026-09-19 11:39:40 +02:00
meson.build Перенос панелей GNOME Settings 51 в Tuner-плагин: интерфейс, backend, тесты, журнал изменений 2026-09-19 11:39:40 +02:00
README.md README: актуальные скриншоты страниц плагина 2026-09-20 18:18:03 +02:00
screenshot.png README: актуальные скриншоты страниц плагина 2026-09-20 18:18:03 +02:00

TunerNitiPower

Питание

Плагин Tuner для Atomic Niri с русской вкладкой «Питание». Визуальная структура перенесена из панели panels/power GNOME Settings 51.0: BreakpointBin, ViewStack с переключателем страниц, группы libadwaita, батареи/UPS, подключённые устройства, режимы питания и энергосбережение. Дополнительно есть отдельная страница настроек экрана блокировки Seni с таймаутом, фоном, размытием и цветовой схемой.

В группе «Подключённые устройства» периферия UPower классифицируется теми же правилами, что и Quick Center NitiVala (mouse, keyboard, controller и hidpp_battery), и отображается GNOME-подобной полосой уровня, статусом и значком зарядки. Группа «Быстрое меню» управляет фильтрами периферии и блоком peripheral-battery; отдельный переключатель управляет niti-power в zones.right панели. Кнопка «Применить» атомарно сохраняет оба JSON-файла и перезапускает пользовательскую службу niti.

Логика написана на Vala. UPower и power-profiles-daemon вызываются напрямую через асинхронный D-Bus с GCancellable; GNOME Shell, gnome-settings-daemon и GDM не требуются. Конфигурация Tuner хранится в ~/.config/niti-vala/power.json, а интеграция простоя Niri — в ~/.config/niri/idle.kdl.

Сборка

Нужны Meson, Vala, GTK4, libadwaita, json-glib, libpeas/Tuner и blueprint-compiler:

meson setup build
meson compile -C build
meson test -C build
python3 -m pytest -q

Сборка компилирует четыре Blueprint-шаблона в .ui и упаковывает их через GResource. src/power-model.vala не зависит от GTK и содержит разбор UPower, allowlist профилей/object paths, форматирование времени и безопасный конфиг; его компиляция закреплена pytest-контрактом. tests/power-gtk-smoke создаёт страницу в GTK4 под Xvfb.

На системе без встроенной батареи батарейные группы и строка процента заряда не показываются; внешние батареи и устройства UPower остаются в соответствующих списках. Режимы performance, balanced и power-saver отображаются с теми же русскими названиями и описаниями, что и портированная строка GNOME Settings 51.0.

Для проверки JSON-моделей и классификации периферии используются pytest и Vala-тест power-model-test; GTK smoke-тест требует Xvfb.

Безопасность

Нет shell-строк и запуска команд из пользовательского ввода. Значения профилей, object paths, таймауты и пути обоев проверяются; конфигурационные каталоги создаются с mode 0700. D-Bus подписки и async backend’ы отменяются/снимаются в dispose().

Замены GNOME

GNOME-настройки org.gnome.settings-daemon.plugins.power, org.gnome.desktop.session и org.gnome.desktop.interface заменены пользовательским Vala-конфигом и Niri idle.kdl. Переключение профилей и порогов зарядки выполняется через UPower/power-profiles-daemon, включая сообщения PerformanceDegraded. GNOME Shell Brightness и SensorProxy заменены capability-настройкой, потому что в Niri нет совместимого GNOME session-сервиса. Экран блокировки перенесён на Seni; системный /etc/seni/greeter.json намеренно не изменяется без polkit/systemd helper.

Настройки часов Seni в текущем контракте Seni отсутствуют, поэтому отдельные элементы часов не добавляются. Caffeine не дублируется: его inhibit-сервис уже принадлежит NitiVala, но публичного клиентского D-Bus API для управления из Tuner пока нет.