1 июня 2026 г. | 5 мин Читать
Представляю MagicPods для Linux
Valve невероятно впечатлила меня выходом Steam Deck, и еще в 2024 году я разработал плагин MagicPodsDecky для игрового режима Steam Deck. А анонсом Steam Machine Valve смогли впечатлить меня еще больше, и так родилась идея портировать MagicPods на Linux в виде полноценного нативного приложения, а не очередного Electron/React-монстра, и опубликовать MagicPods в Steam.
О разработке
Под Linux я раньше практически не писал и был знаком в основном только с серверами, так что MagicPods Linux можно считать моим пилотным Linux-проектом.
Первоначально я решил попробовать сделать KDE Plasmoid и посмотреть, как мои пользователи вообще воспримут эту идею. Как оказалось, довольно много людей пользуется SteamOS.
Следующим этапом стала разработка основного приложения, которое объединяло бы установку и настройку всех компонентов. Мне хотелось сделать так, чтобы пользователь мог просто установить MagicPods и бесшовно пользоваться им как в десктопном, так и в игровом режиме SteamOS. Уже примерно через месяц был готов первый билд приложения, включающий:
- MagicPods — интерфейс для десктопного режима
- MagicPodsPlasmoid — виджет с быстрыми настройками для трея десктопного режима
- MagicPodsDecky — интерфейс для игрового режима
- MagicPodsCore — общий фоновый сервис для работы с наушниками, используемый всеми вышеописанными компонентами
С работой DBus и исправлением некоторых ошибок в коде мне помогал Андрей Литвинцев. Также он тестировал мой UI на своей системе. Мы довольно сильно переработали возможности MagicPodsCore, добавив работу с BLE, сохранение настроек и поддержку новых вышедших моделей AirPods и Beats.
Все работало и выглядело отлично в стиле KDE, а само приложение вместе со всем контентом занимало всего около 60 МБ. На минутку — это 40 анимаций, изображения наушников, иконки и все компоненты, включенные в приложение.
Но потом я столкнулся с требованиями публикации в Steam. Вкратце — приложение должно быть полностью автономным, содержать все необходимое внутри билда и не зависеть от библиотек операционной системы. И самое главное — тестирование сначала проходит в Linux, а только потом в SteamOS. Следовательно, нельзя опубликовать приложение только для SteamOS, несмотря на настройки в админке Steam и успешную работу приложения через Steam.
Следующие два месяца я практически полностью перепроектировал и переписал приложение. Пришлось отказаться от части функций, включая MagicPodsPlasmoid, заменив его трей-иконкой. А запуск общего фонового сервиса вообще пришлось немного «закастылить» через само приложение и Decky-плагин. Сам MagicPodsDecky теперь необходимо устанавливать через магазин Decky Loader.
Вдобавок приходится тащить с собой огромное количество библиотек для независимого запуска приложения, из-за чего размер приложения вырос почти до 200 МБ. Это позволило запускать приложение на Linux, по крайней мере на SteamOS, Kubuntu и Ubuntu.
Самой сложной и до сих пор не идеально решенной задачей стала поддержка High DPI мониторов. В KDE приложение выглядело прекрасно, но в других окружениях и особенно в игровом режиме SteamOS интерфейс отображался мыльно, а некоторые цвета отображались некорректно вне зависимости от выбранной темы.
Более того, на Ubuntu мне так и не удалось вернуть тень под окном приложения, потому что при включении тени приложение становилось размытым, а если делать приложение четким — тень исчезала. Выбирая между тенью и четкостью интерфейса, я выбрал второе.
И так было буквально со всем. Меняешь одно — ломается другое. После пары сотен попыток мне удалось подобрать плюс-минус универсальные настройки.
Финальным этапом стали бесконечные правки текста, скриншотов и описания для страницы приложения в Steam. Именно поэтому на некоторых скриншотах можно заметить довольно забавные названия наушников.
В итоге разработка приложения заняла около шести месяцев практически без выходных и в среднем при 10-часовом рабочем дне. Но стоит учитывать, что параллельно я еще занимался обновлениями основного приложения, плагина и других своих проектов.
Приложение и функции
В основе MagicPods лежит MagicPodsCore — мой фоновый сервис для управления AirPods, Beats, Galaxy Buds и другими Bluetooth-наушниками, написанный на C++, а сам интерфейс MagicPods построен на Qt и C++.
На данный момент я реализовал практически весь функционал, доступный в MagicPodsCore, а часть возможностей даже немного расширил.
Главное нововведение — поддержка анимаций для AirPods и Beats. Работает эта функция немного иначе, чем в Windows-версии. Необходимо один раз подключить наушники для первоначальной настройки, после чего анимация и отображение уровня заряда будут работать практически как на iPhone.
Интерфейс состоит из двух частей:
- детальные настройки в основном окне приложения;
- быстрые настройки по клику на трей-иконку.
Большинство привычных функций: управление шумоподавлением, индивидуальная громкость, настройка длительности нажатий, громкости тонов и многое другое — прекрасно работают для моделей AirPods и наушников Beats.
Некоторые функции работают с оговорками. Например, одиночное/двойное нажатие для управления звонками можно настроить, но работать эти настройки будут только на iPhone/iPad/Mac. При подключении к другим устройствам они недоступны.
Функция «Распознавание разговора» работает, но управление звуком пока реализовано только внутри MagicPodsDecky. В будущем я планирую перенести эту функцию непосредственно в MagicPodsCore, чтобы она не зависела от игрового режима SteamOS.
Уведомления и локализация в первый релиз не вошли. Пока я не до конца разобрался в особенностях реализации этих функций в Linux, но планирую добавить их в будущих обновлениях.
Отдельное внимание я уделил управлению кодеками. Функция доступна для всех наушников и зависит от поддерживаемых кодеков в системе. В большинстве случаев Linux сам выбирает лучший вариант, но при желании пользователь может вручную переключить Bluetooth-кодек на предпочтительный.
Определение системной темы в Linux — отдельная головная боль. Если цвет иконок не совпадает с вашим оформлением, в настройках MagicPods можно вручную выбрать светлую или темную тему.
Поддерживаемые наушники
Следующие наушники из списка имеют поддержку расширенных функций, а для большинства остальных наушников доступно отображение уровня заряда и переключение Bluetooth-кодеков.
| Apple | Beats | Samsung |
|---|---|---|
| AirPods 1 | PowerBeats Pro | Galaxy Buds |
| AirPods 2 | PowerBeats Pro 2 | Galaxy Buds Plus |
| AirPods 3 | PowerBeats 3 | Galaxy Buds Live |
| AirPods 4 | PowerBeats 4 | Galaxy Buds Pro |
| AirPods 4 (ANC) | Beats Fit Pro | Galaxy Buds 2 |
| AirPods Pro | Beats Studio Buds | Galaxy Buds 2 Pro |
| AirPods Pro 2 | Beats Studio Buds Plus | Galaxy Buds Fe |
| AirPods Pro 3 | Beats Studio Pro | Galaxy Buds 3 |
| AirPods Max | Beats Solo 3 | Galaxy Buds 3 Pro |
| AirPods Max 2024 | Beats Solo Pro | |
| AirPods Max 2 | Beats Studio 3 | |
| Beats X | ||
| Beats Flex | ||
| Beats Solo Buds | ||
| Powerbeats Fit |
В заключение
Мои проекты MagicPodsLinux, MagicPodsDecky и MagicPodsCore имеют открытый исходный код, так что при желании вы можете самостоятельно добавить поддержку дополнительных моделей устройств.
MagicPods для Linux уже доступен в Steam.