EnglishРусский Map

bluetui

title
bluetui
type
toolbox
summary
Терминальный Bluetooth-менеджер для Linux, работающий как Bluetooth HID пульт для Smart TV
tags
python, tui, bluetooth, linux, watchlist
language
Python
license
GPL-3.0
created
2026-05-02
updated
2026-05-02
lang
ru
translation_of
bluetui
source_updated
2026-05-02
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Терминальный Bluetooth-менеджер для Linux, написанный на Python. Работает поверх BlueZ через системный D-Bus, sudo не требуется (авторизацией занимается PolicyKit). Главная особенность здесь не список устройств: то же самое приложение превращает ноутбук в полноценный Bluetooth HID пульт управления для Smart TV, регистрируясь как HID-устройство точно так же, как штатный пульт для Android-TV / Tizen / WebOS.

Архитектура

Построен на Textual для TUI и dbus-next для асинхронного D-Bus. Репозиторий разбит на модули по отдельным частям BlueZ:

bluetui/
├── bluez.py          # BluezManager — wraps BlueZ ObjectManager over D-Bus
├── agent.py          # org.bluez.Agent1 — PIN/passkey/confirm dialogs
├── audio.py          # pactl auto-routing for PulseAudio + PipeWire
├── classic_hid.py    # Classic-BT HID Device profile (TV remote)
├── hid_remote.py     # BLE HID over GATT (legacy, kept for testing)
├── remote_screen.py  # virtual-remote UI screen
├── widgets.py        # AdapterBar, DeviceList
└── modals.py         # Confirm/Pin/Info/Help/MediaControl dialogs

Список устройств группируется по статусу (connected / paired / nearby), отображает индикаторы RSSI и заряд батареи, а также поддерживает стандартные операции: сопряжение, удаление, доверие, блокировку, сканирование и переключение питания по горячим клавишам.

Пульт Bluetooth HID

Отличительная особенность проекта. Большинство решений вроде "ПК в качестве пульта для ТВ" либо управляют ИК-передатчиком, либо используют протокол Android TV Remote v2 по WiFi. bluetui не делает ни того, ни другого: он притворяется Bluetooth HID устройством, и телевизор сопрягается с ним так же, как с родным заводским пультом.

Реализация, согласно README:

  • Регистрирует org.bluez.Profile1 с UUID 0x1124 (HID)
  • Формирует SDP-запись с дескриптором HID, содержащим Consumer Control (Report ID 1) + Keyboard (Report ID 2)
  • Открывает сырые сокеты L2CAP на PSM 17 (Control) и PSM 19 (Interrupt) через socket.AF_BLUETOOTH + BTPROTO_L2CAP
  • Для сопряжения: агент переключается в режим NoInputNoOutput, поэтому JustWorks проходит автоматически
  • После подключения принудительно отключает профили A2DP/AVRCP/HSP, чтобы звук с ТВ не уходил в динамики ноутбука

Протестировано на TCL Android TV. Должно работать с любыми телевизорами Samsung / LG / Sony с поддержкой профиля BT HID-host, однако совместимость охватывает "большинство, но не все": в README прямо указано, что некоторые модели вообще не принимают HID через Bluetooth.

AVRCP и маршрутизация звука

При подключении сопряжённого аудиоустройства bluetui автоматически перенаправляет на него системный sink по умолчанию через pactl (работает с PulseAudio и PipeWire). Воспроизведение, пауза и переключение треков идут через AVRCP. Громкость регулируется через системный микшер, а не через AVRCP-absolute-volume - в README отмечается, что это осознанный выбор ради удобства. В автомаршрутизации есть известное состояние гонки с BlueZ, которое приложение пытается обработать повторными попытками.

Требования

  • Linux с BlueZ ≥ 5.50 (Debian 11+, Ubuntu 20.04+, актуальный Arch)
  • Python ≥ 3.9
  • Запущенный bluetoothd
  • Для маршрутизации звука: pulseaudio или pipewire-pulse + pactl
  • Для отображения эмодзи-иконок: моноширинный шрифт с глифами 📺 🎧 ⌨ (JetBrains Mono / Fira Code Nerd / DejaVu Sans Mono)

Установка:

git clone https://github.com/HelpFreedom/TUI_bluetooth.git
cd TUI_bluetooth
pip3 install --user -r requirements.txt
./bluetui.sh

(В примере из README указаны bluetui.git и cd bluetui, хотя сам репозиторий называется TUI_bluetooth. Оформление пакета неформальное: requirements.txt плюс shell-обёртка, без pyproject.toml и без релиза на PyPI.)

Горячие клавиши: j/k перемещение, Enter подключение, p сопряжение, f удаление, t доверие, b блокировка, s сканирование, o питание, i информация, m AVRCP, r открыть пульт ТВ, ? справка, q выход.

Статус в watchlist

Внесён в watchlist, так как проект совсем свежий: репозиторий создан 2026-05-01 (за день до создания этой страницы), ноль звёзд, один автор, нет тегов релизов, нет видимого набора тестов, только русскоязычный README, а способ установки - pip3 install --user -r requirements.txt, а не готовый дистрибутивный пакет. Реализация HID-пульта для ТВ рабочая и необычная, но открытым остаётся вопрос поддержки проекта. Повторная проверка 2026-08-02: посмотреть, появятся ли сторонние PR, перевод README, более аккуратная сборка и расширится ли совместимость с ТВ за пределы протестированного автором TCL Android TV.

Репозиторий

github.com/HelpFreedom/TUI_bluetooth - 0 звёзд, GPL-3.0, основной язык Python, репозиторий создан 2026-05-01, один автор. README на русском языке.