README.md

upnpvol

upnpvol — синхронизатор громкости между сервером MPD и UPnP/DLNA-устройством (медиаплеером, ЦАПом или усилителем с поддержкой UPnP MediaRenderer).

Программа работает как системный демон: подписывается на события UPnP (через event subscription) и на события idle MPD, и поддерживает громкость обеих сторон в согласованном состоянии.

  • Лицензия: BSD-3-Clause
  • Язык: Go (требуется версия 1.26 или новее)
  • Зависимости: полностью вендорятся в src/vendor/, сборка не требует сети

Режимы работы

Режим сканирования (--scan)

Поиск UPnP-устройств в локальной сети и выбор одного из них. Выбранный device сохраняется в конфигурацию, после чего его можно использовать в режиме мониторинга.

upnpvol --scan

В интерактивном режиме доступны команды:

Команда Описание
<индекс> Выбрать устройство по индексу
show <индекс> Показать подробности об устройстве
test <индекс> Проверить устройство (управление громкостью)
list Повторно показать список устройств
scan Повторить сканирование сети
quit / exit Выход

Режим мониторинга (--monitor)

Синхронизация громкости ранее выбранного устройства с MPD. В этом режиме программа работает как демон, завершается по SIGINT/SIGTERM.

upnpvol --monitor

Параметры командной строки

Флаг Значение по умолчанию Описание
-a, --address localhost IP-адрес сервера MPD
-p, --port 6600 Порт сервера MPD
-P, --password (пусто) Пароль сервера MPD
-s, --scan false Сканировать сеть и выбрать устройство
-m, --monitor false Мониторить ранее выбранное устройство
-r, --priority mpd «Источник истины» после [повторного] подключения сторон: device или mpd
-v, --version — Показать информацию о версии

Значения, переданные в командной строке, переопределяют глобальный конфигурационный файл — но только если флаг указан явно.

Конфигурация

Глобальный конфигурационный файл: /etc/upnpvol.conf (образец — в packaging/upnpvol.conf). Основные параметры:

mpd_host = localhost          # адрес MPD
mpd_port = 6600               # порт MPD
mpd_password =                # пароль MPD

upnp_port = 8080              # TCP-порт для входящих UPnP-событий
upnp_timeout = 1800           # таймаут подписки, секунд

priority = mpd                # device | mpd

log_file = /var/log/upnpvol/upnpvol.log
log_level = 3                 # 0 = ошибки ... 4 = отладка
log_to_console = true
log_to_file = true

Сборка

Требования

  • Go >= 1.26
  • GNU make

Основные команды

make release    # сборка бинарника без отладочной информации (в bin/upnpvol)
make debug      # сборка с отладочными символами
make test       # запуск тестов
make verify     # проверка согласованности go.mod/go.sum/vendor/
make deps       # пересинхронизировать go.mod/go.sum и vendor/ после смены импортов
make dist       # собрать исходный tarball в dist/ (для rpmbuild)
make distcheck  # распаковать tarball и собрать его офлайн
make clean      # удалить артефакты сборки

Готовый бинарник появляется в bin/upnpvol.

Прямая сборка через Go

cd src
CGO_ENABLED=0 go build -mod=vendor -o ../bin/upnpvol main.go

Сборка RPM-пакета

Spec-файл предназначен для сборки под Альт линукс. Для сборки нужно настроить hasher по инструкции. Затем создать каталоги rpm:

mkdir -p ~/RPM/{SOURCES,SPECS} 

Далее нужно скачать tar-архив с программой и положить его в ~/RPM/SOURCES, из архива нужно извлечь upnpvol.spec и положить его в ~/RPM/SPECS. Затем следует подготовить apt для сборки под архитектуру aarch64 (если сборка будет происходить на машине с архитектурой, отличной от aarch64):

mkdir -p ~/apt
tee ~/apt/apt.conf.p11.aarch64 > /dev/null <<EOF
Dir::Etc::main "/dev/null";
Dir::Etc::parts "/var/empty";
Dir::Etc::SourceParts "/var/empty";
Dir::Etc::sourcelist "/home/andrew/apt/sources.list.p11.aarch64";
APT::Acquire::Retries "3";
EOF
tee ~/apt/sources.list.p11.aarch64 > /dev/null <<EOF
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/p11/branch aarch64 classic
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/p11/branch noarch classic
EOF

Затем нужно собрать src.rpm-пакет:

rpmbuild -bs --nodeps --target=aarch64 ~/RPM/SPECS/upnpvol.spec

И, наконец, собрать rpm-пакет:

hsh --lazy-cleanup --apt-config=$HOME/apt/apt.conf.p11.aarch64 --with-qemu=aarch64 --target=aarch64 --no-sisyphus-check=packager,gpg,changelog ~/hasher ~/RPM/SRPMS/upnpvol-1.0.0-alt1.src.rpm

Работа с программой

Все команды следуем выполнять от пользователя root. Для понижения прав в режиме –monitor используется функционал systemd (параметр User=_upnpvol в файле upnpvol.service). В режиме –scan права сохраняемому файлу задаются в зависимости от наличия данного параметра в upnpvol.service.

# 1. Найти и выбрать UPnP-устройство
upnpvol --scan

# 2. Запустить синхронизацию вручную
upnpvol --monitor

# Или как systemd-сервис:
systemctl enable --now upnpvol
Описание
Релизы
последний
Конвейеры
0 успешных
0 с ошибкой
Разработчики