Если ты пользуешься dual-boot системой, то знаком с этой проблемой
Представь ситуацию: ты работаешь в Linux, при этом слушая музыку через любимые Bluetooth-наушники. Всё работает идеально. Заканчивается рабочий день и ты перезагружаешься на Windows для того чтобы расслабиться и поиграть. Хочешь подключить те-же самые наушники, но, внезапно... Они не работают...
Естественно ты начинаешь разбираться в проблеме, открываешь настройки Bluetooth и нажимаешь на кнопку "Подключить". Но после 10-ти секунд ожидания ничего не происходит. Система видит наушники в Bluetooth, они сопряжены, но ты не можешь к ним подключиться. Приходится удалять устройство и сопрягать его заново.
На следующий день возвращаешься в Linux. И... та же самая история. Снова удаление, снова сопряжение.

Это повторяется каждый чёртов раз.
С наушниками Sony WH-1000XM5. С AirPods Pro. С Xbox-геймпадом. С каждым грёбаным Bluetooth-устройством.
Давай немного посчитаем
Переподключение одного устройства занимает примерно 1-3 минуты твоего времени:
Открыть настройки Bluetooth → 10 сек
Найти устройство → 10 сек
Удалить старое сопряжение → 5 сек
Перевести устройство в режим сопряжения → 15 сек
Подключить заново → 30 сек
Проверить работоспособность → 20 сек
Итого: ~90 секунд на одно устройство.
У меня в работе - 3 Bluetooth-устройства (наушники, мышь, клавиатура). Переключаюсь между ОС 3 раза в день.
3 устройства × 90 секунд × 3 переключения = 13.5 минут в день
13.5 минут × 250 рабочих дней = 3375 минут в год
3375 минут = 56.25 часов = 2.3 полных дня
Больше двух суток в год я тратил на переподключение Bluetooth-устройств!!!
Почему так происходит?
Проблема кроется в том, как работает Bluetooth-шифрование:
При первом сопряжении устройства обмениваются криптографическими ключами:
LTK (Long Term Key) — основной ключ шифрования
IRK (Identity Resolving Key) — ключ для приватности (случайные MAC-адреса)
CSRK (Connection Signature Resolving Key) — ключ для подписи данных
Эти ключи сохраняются в OC:
Windows: в реестре
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\KeysLinux: в файлах BlueZ
/var/lib/bluetooth/[MAC]/[DEVICE]/info
Но подвох в том, что каждая ОС генерирует свои собственные ключи.
Когда происходит переключение между Windows и Linux:
Устройство находит твой компьютер по MAC-адресу Bluetooth-адаптера
Пытается установить зашифрованное соединение с сохранённым ключом
Ключ не совпадает с тем, что хранится в текущей ОС
Соединение отклоняется
Устройство требует повторного сопряжения
Bluetooth-устройство может хранить только один ключ для одного хоста. Поэтому каждое новое сопряжение перезаписывает предыдущий ключ.
Существующие "решения"
Вариант 1: Ручная синхронизация
Технически продвинутые пользователи копируют ключи вручную:
Загружаются в Windows
Экспортируют ключи из реестра
Перезагружаются в Linux
Конвертируют формат ключей
Вставляют в конфигурационные файлы BlueZ
Перезапускают Bluetooth-службу
Но этот способ несёт в себе некоторые риски и неудобства:
Нужно делать после каждого нового сопряжения
Требует доступа к разделу Windows из Linux (и наоборот)
Легко ошибиться в формате или расположении ключей
Существует риск повредить системный реестр Windows
Вариант 2: bt-dualboot
Существует утилита bt-dualboot, которая пытается автоматизировать процесс.
Но в ней не всё так идеально:
Требует ручного запуска после каждого сопряжения. Автоматизации нет.
Нет поддержки двухсторонней синхронизации. Работает только из под Linux.
Требует монтирования раздела Windows с правами на запись.
Использует хакерские методы (chntpw) для модификации реестра Windows. Chntpw изначально создан для взлома систем.
Проект заброшен с 2022 года. Существующие проблемы в разделе issues остаются без ответа.
BlueVein — моё решение
После очередного раза, когда я потратил 10 минут на переподключение всех устройств, — мне надоело. Я решил что проблема должна решаться автоматически.
Я потратил месяц на разработку BlueVein — кросс-платформенного инструмента для автоматической синхронизации Bluetooth-ключей между Linux и Windows.
Главные принципы
Полная автоматизация — установил и забыл
Синхронизация в реальном времени — изменения применяются мгновенно
Двусторонняя работа — неважно, в какой ОС ты сопрягаешь устройство
Поддержка BLE — все типы ключей (LTK, IRK, CSRK)
Безопасность — работа на системном уровне с привилегиями администратора
Zero configuration — не нужно указывать пути, разделы или настраивать что-либо
Как это работает?
Система состоит из трёх компонентов:
1. Мониторинг на каждой ОС
Linux systemd service:
Следит за изменениями в
/var/lib/bluetooth/Отслеживает события D-Bus от BlueZ
Применяет обновления к локальным устройствам
Windows service:
Следит за реестром
BTHPORT\Parameters\KeysИспользует WinAPI для получения событий Bluetooth
Обновляет ключи в реестре
2. Общее хранилище в EFI
Ключи сохраняются в JSON-файл на EFI-разделе: /EFI/BlueVein/bluevein.json
Почему EFI?
Доступен из любой ОС без монтирования
Не зависит от BitLocker/LUKS шифрования
Защищён правами доступа (только root/admin)
Стандартное расположение на всех современных системах
3. Прямой доступ к FAT32
Для работы с EFI я написал собственную библиотеку fat32-raw, которая читает/записывает FAT32 напрямую, без монтирования.
Преимущества:
Не требует прав на монтирование
Работает даже если EFI не в /etc/fstab
Быстрее стандартного I/O
Кросс-платформенность (Windows тоже может читать EFI)
Архитектурная схема

Алгоритм синхронизации
Сценарий 1: Загрузка системы

Простыми словами:
BlueVein запускается как системная служба
Читает ключи из
bluevein.jsonПроверяет локальные Bluetooth-устройства
Если ключ в EFI новее — обновляет локальный
Если в системе есть новое устройство — добавляет в EFI
Сценарий 2: Новое сопряжение

Простыми словами:
Ты сопрягаешь новое устройство в любой ОС
BlueVein получает событие о новом устройстве
Извлекает ключи шифрования
Сохраняет в
bluevein.jsonПри следующей загрузке другой ОС устройство работает автоматически
Технические детали реализации
Поддержка Bluetooth LE
BlueVein полностью поддерживает Bluetooth Low Energy с всеми типами ключей:
Тип ключа | Назначение | Поддержка |
|---|---|---|
LTK | Long Term Key — основной ключ шифрования | Полная |
Peripheral LTK | LTK для устройства в роли периферии | Полная |
IRK | Identity Resolving Key — для приватности (случайные MAC) | Полная |
CSRK | Connection Signature Resolving Key — для подписи данных | Полная |
AddressType | Тип адреса (public/random) | Полная |
Где хранятся ключи?
Ключи шифрования хранятся в EFI-разделе: /EFI/BlueVein/bluevein.json
Конечно у тебя возникнет вопрос, — безопасно ли это?
И я скажу — да. И вот почему:
EFI доступен только с правами root/admin
Файл имеет ограниченные права доступа (600)
BlueVein запускается как системная служба с повышенными привилегиями
Исходный код открыт — вы можете проверить сами
Что насчёт шифрования диска?
BlueVein работает независимо от BitLocker (Windows) или LUKS (Linux).
EFI-раздел обычно не шифруется и доступен до загрузки ОС. Это необходимо для работы загрузчика (GRUB, systemd-boot).
Можно ли взломать?
Теоретически, если у злоумышленника есть физический доступ к твоему компьютеру и права root/admin, он может:
Прочитать
bluevein.jsonИзвлечь Bluetooth-ключи
Подключиться к вашим устройствам
НО: для этого ему уже нужны права администратора на твоём компьютере. Если у него есть такой доступ — Bluetooth-ключи это наименьшая из твоих проблем :)
Как установить?
Arch Linux
# Установка через AUR
yay -S bluevein-bin
# Запуск службы
sudo systemctl enable --now bluevein
# Проверка статуса
sudo systemctl status bluevein
Другие дистрибутивы Linux
# Сборка из исходников
git clone https://github.com/meowrch/BlueVein.git
cd BlueVein
cargo build --release
# Установка
sudo cp target/release/bluevein /usr/local/bin/
sudo cp ./systemd/bluevein.service /etc/systemd/system/
# Запуск
sudo systemctl daemon-reload
sudo systemctl enable --now bluevein
Windows
# Скачайте bluevein.exe с GitHub Releases
# Поместите файл в корень диска (или в любое другое надёжное место)
# Откройте PowerShell от имени администратора
# Установка и запуск
.\bluevein.exe install
.\bluevein.exe start
# Проверка
Get-Service BlueVeinService
Сравнение с аналогами
Параметр | BlueVein | bt-dualboot | Ручная синхронизация |
|---|---|---|---|
Автоматизация | ✅ Полная | ⚠️ Требует ручного запуска | ❌ Полностью ручная |
Поддержка BLE | ✅ Все ключи | ⚠️ Частичная | ✅ Возможна |
Множественные адаптеры | ✅ Да | ❌ Нет | ✅ Да |
Безопасность методов | ✅ Официальные API | ⚠️ chntpw (хак) | ⚠️ Риск ошибок |
Монтирование разделов | ✅ Не требуется | ❌ Требуется | ❌ Требуется |
Поддержка | ✅ Активная разработка | ❌ На данный момент заброшен | N/A |
Заключение
Три месяца назад я тратил 2.3 дня в год на переподключение Bluetooth-устройств. Это раздражало, отвлекало, портило настроение.
Теперь я переключаюсь между Windows и Linux без боли. Без геморроя с bluetooth...
Я забыл о проблеме. Надеюсь и ты забудешь :)
Ссылки
🔗 GitHub: github.com/meowrch/BlueVein
📦 AUR пакет: bluevein-bin
📥 Releases: GitHub Releases
🐛 Issues: GitHub Issues
