- PVSM.RU - https://www.pvsm.ru -
Представь ситуацию: ты работаешь в 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_MACHINESYSTEMCurrentControlSetServicesBTHPORTParametersKeys
Linux: в файлах BlueZ /var/lib/bluetooth/[MAC]/[DEVICE]/info
Но подвох в том, что каждая ОС генерирует свои собственные ключи.
Когда происходит переключение между Windows и Linux:
Устройство находит твой компьютер по MAC-адресу Bluetooth-адаптера
Пытается установить зашифрованное соединение с сохранённым ключом
Ключ не совпадает с тем, что хранится в текущей ОС
Соединение отклоняется
Устройство требует повторного сопряжения
Bluetooth-устройство может хранить только один ключ для одного хоста. Поэтому каждое новое сопряжение перезаписывает предыдущий ключ.
Технически продвинутые пользователи копируют ключи вручную:
Загружаются в Windows
Экспортируют ключи из реестра
Перезагружаются в Linux
Конвертируют формат ключей
Вставляют в конфигурационные файлы BlueZ
Перезапускают Bluetooth-службу
Но этот способ несёт в себе некоторые риски и неудобства:
Нужно делать после каждого нового сопряжения
Требует доступа к разделу Windows из Linux (и наоборот)
Легко ошибиться в формате или расположении ключей
Существует риск повредить системный реестр Windows
Существует утилита bt-dualboot [1], которая пытается автоматизировать процесс.
Но в ней не всё так идеально:
Требует ручного запуска после каждого сопряжения. Автоматизации нет.
Нет поддержки двухсторонней синхронизации. Работает только из под Linux.
Требует монтирования раздела Windows с правами на запись.
Использует хакерские методы (chntpw [2]) для модификации реестра Windows. Chntpw изначально создан для взлома систем.
Проект заброшен с 2022 года. Существующие проблемы в разделе issues остаются без ответа.
После очередного раза, когда я потратил 10 минут на переподключение всех устройств, — мне надоело. Я решил что проблема должна решаться автоматически.
Я потратил месяц на разработку BlueVein [3] — кросс-платформенного инструмента для автоматической синхронизации Bluetooth-ключей между Linux и Windows.
Полная автоматизация — установил и забыл
Синхронизация в реальном времени — изменения применяются мгновенно
Двусторонняя работа — неважно, в какой ОС ты сопрягаешь устройство
Поддержка BLE — все типы ключей (LTK, IRK, CSRK)
Безопасность — работа на системном уровне с привилегиями администратора
Zero configuration — не нужно указывать пути, разделы или настраивать что-либо
Система состоит из трёх компонентов:
Linux systemd service:
Следит за изменениями в /var/lib/bluetooth/
Отслеживает события D-Bus от BlueZ
Применяет обновления к локальным устройствам
Windows service:
Следит за реестром BTHPORTParametersKeys
Использует WinAPI для получения событий Bluetooth
Обновляет ключи в реестре
Ключи сохраняются в JSON-файл на EFI-разделе: /EFI/BlueVein/bluevein.json
Почему EFI?
Доступен из любой ОС без монтирования
Не зависит от BitLocker/LUKS шифрования
Защищён правами доступа (только root/admin)
Стандартное расположение на всех современных системах
Для работы с EFI я написал собственную библиотеку fat32-raw [4], которая читает/записывает FAT32 напрямую, без монтирования.
Преимущества:
Не требует прав на монтирование
Работает даже если EFI не в /etc/fstab
Быстрее стандартного I/O
Кросс-платформенность (Windows тоже может читать EFI)

Простыми словами:
BlueVein запускается как системная служба
Читает ключи из bluevein.json
Проверяет локальные Bluetooth-устройства
Если ключ в EFI новее — обновляет локальный
Если в системе есть новое устройство — добавляет в EFI
Простыми словами:
Ты сопрягаешь новое устройство в любой ОС
BlueVein получает событие о новом устройстве
Извлекает ключи шифрования
Сохраняет в bluevein.json
При следующей загрузке другой ОС устройство работает автоматически
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-ключи это наименьшая из твоих проблем :)
# Установка через AUR
yay -S bluevein-bin
# Запуск службы
sudo systemctl enable --now bluevein
# Проверка статуса
sudo systemctl status bluevein
# Сборка из исходников
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
# Скачайте 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 [3]
📦 AUR пакет: bluevein-bin [5]
📥 Releases: GitHub Releases [6]
🐛 Issues: GitHub Issues [7]
Автор: DIMFLIX
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/443006
Ссылки в тексте:
[1] bt-dualboot: https://github.com/x2es/bt-dualboot
[2] chntpw: https://www.kali.org/tools/chntpw/
[3] BlueVein: https://github.com/meowrch/BlueVein
[4] fat32-raw: https://github.com/meowrch/fat32-raw
[5] bluevein-bin: https://aur.archlinux.org/packages/bluevein-bin
[6] GitHub Releases: https://github.com/meowrch/BlueVein/releases
[7] GitHub Issues: https://github.com/meowrch/BlueVein/issues
[8] Источник: https://habr.com/ru/articles/988972/?utm_source=habrahabr&utm_medium=rss&utm_campaign=988972
Нажмите здесь для печати.