Вопрос или проблема
При установке двойной загрузки Windows и Linux Mint/Ubuntu вы можете обнаружить, что вам приходится заново связывать свои устройства Bluetooth снова и снова. Это будет происходить каждый раз, когда вы переключаетесь между операционными системами.
Итак, как этого избежать?
Я отвечаю на свой вопрос с помощью следующего руководства, которое было протестировано на:
- Ubuntu 14.4
- Ubuntu 20.04
- Ubuntu 22.10
- Linux Mint 17.X
- Linux Mint 18.X
- Linux Mint 21.X
- Fedora 25
На стороне Windows это работает с 7, 10 и 11.
Почему это происходит?
В основном, когда вы связываете устройство, ваша служба Bluetooth генерирует уникальный набор ключей для сопряжения. Во-первых, ваш компьютер сохраняет MAC-адрес устройства Bluetooth и ключ сопряжения. Во-вторых, ваше устройство Bluetooth сохраняет MAC-адрес вашего компьютера и соответствующий ключ. Обычно это работает нормально, но MAC-адрес для вашего порта Bluetooth будет одинаковым как в Linux, так и в Windows (он устанавливается на аппаратном уровне). Таким образом, когда вы повторно соединяете устройство в Windows или Linux и он генерирует новый ключ, этот ключ перезаписывает ранее сохраненный ключ на устройстве Bluetooth. Windows перезаписывает Linux-ключ и наоборот.
Устройства Bluetooth LE: Они могут сопрягаться иначе. Я сам не исследовал этот вопрос, но это может помочь Сопряжение устройств Bluetooth LE (низкая энергия) при двойной загрузке
Как это исправить
Согласно приведенным ниже инструкциям, сначала мы свяжем ваши устройства Bluetooth с Ubuntu/Linux Mint, а затем свяжем Windows. Затем мы вернемся в нашу систему Linux и скопируем ключ(и) сопряжения, сгенерированный Windows, в нашу систему Linux.
- Свяжите все устройства с Mint/Ubuntu
- Свяжите все устройства с Windows
- Скопируйте свои ключи сопряжения Windows одним из двух способов:
-
Используйте
psexec -s -i regedit.exe
из Windows (сложнее). Вам нуженpsexec
, так как обычный regedit не имеет достаточных прав для отображения этих значений.- Перейдите в “Устройства и принтеры” в Панели управления и перейдите к свойствам вашего устройства Bluetooth. Затем в разделе Bluetooth вы можете найти уникальный идентификатор. Скопируйте это (это вам понадобится позже). Примечание: в более новых версиях Windows путь к свойствам устройства проходит через Параметры -> Bluetooth и устройства -> Устройства -> Дополнительные параметры устройств и принтеров
- Скачайте PsExec с http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx.
- Распакуйте загруженный zip и откройте окно cmd с повышенными привилегиями. (Нажмите меню “Пуск”, введите
cmd
, затем щелкните правой кнопкой мыши на CMD и выберите “Запустить от имени администратора”.) - Перейдите в папку, куда вы распаковали загрузку.
- Запустите
psexec -s -i regedit.exe
- Перейдите к ключам по пути
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BTHPORT\Parameters\Keys
.
ЕслиCurrentControlSet
отсутствует, попробуйтеControlSet001
. - Вы должны увидеть несколько ключей с метками MAC-адресов – запишите MAC-адрес, связанный с уникальным идентификатором, который вы скопировали ранее. Примечание: Если после сопряжения нет видимых ключей, вам, вероятно, нужно добавить права на чтение (щелкните правой кнопкой мыши -> права)
Keys\
. - Для удобства экспортируйте его как текстовый файл. Щелкните файл -> экспорт -> как текст и сохраните его на общем разделе/облаке.
-
Используйте
chntpw
из вашего дистрибутива Linux (проще). Начните в терминале, затем:-
sudo apt-get install chntpw
-
Подмонтируйте ваш системный диск Windows в режиме чтения и записи
- Чтобы найти диск, используйте
sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
. В зависимости от того, как настроена ваша двойная загрузка, это обычно первыйntfs
раздел на диске с/boot/efi
. Обратите внимание наNAME
. sudo mkdir /mnt/c
sudo mount --read-write /dev/<NAME> /mnt/c
- Для безопасного размонтирования диска
sudo umount /mnt/c
- Если вам нужно попробовать другой диск или когда закончите все эти инструкции
- Чтобы найти диск, используйте
-
cd /[СистемныйДискWindows]/Windows/System32/config
- в Windows 10 корневая папка – “Windows”, в Windows 7 – “WINDOWS”
-
chntpw -e SYSTEM
открывает консоль -
Выполните эти команды в этой консоли:
> # Если нет ControlSet001, попробуйте CurrentControlSet > # в Windows 7, "services" ниже записывается строчными буквами. > cd ControlSet001\Services\BTHPORT\Parameters\Keys > ls # показывает MAC-адрес вашего порта Bluetooth Node has 1 subkeys and 0 values key name <aa1122334455> > cd aa1122334455 # cd в папку > ls # перечисляет существующие MAC-адреса устройств Node has 0 subkeys and 1 values size type value name [value if type DWORD] 16 REG_BINARY <001f20eb4c9a> > # Получите значение записи REG_BINARY > hex 001f20eb4c9a => :00000 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX ...игнорируйте..символы.. # ^ XXs - это ключ сопряжения
-
Запишите, какой MAC-адрес устройства Bluetooth соответствует какому ключу сопряжения. Ключ Mint/Ubuntu не нуждается в пробелах между. Игнорируйте
:00000
.
-
-
- Вернитесь в Linux (если не в Linux) и добавьте наш ключ Windows в наши записи конфигурации Linux. Имейте в виду, что MAC-адрес порта Bluetooth форматируется иначе при переходе с Windows на Linux – указан как aa1122334455 в моем примере выше.
Версия Linux будет записана верхним регистром и будет разделена двоеточиями ‘:’ после каждых двух символов – например, AA:11:22:33:44:55.
В зависимости от вашей версии Linux, вы можете сделать одно из следующих:- До Mint 18/16.04 вы могли сделать следующее:
-
sudo edit /var/lib/bluetooth/[MAC-адрес Bluetooth]/linkkeys
– [MAC-адрес Bluetooth] должен быть единственной папкой в этой папке Bluetooth. -
Этот файл должен выглядеть как-то так:
[MAC Bluetooth] [Ключ сопряжения] [цифры в пине] [0] AA:11:22:33:44:55 XXXXXXXXxxXXxXxXXXXXXxxXXXXXxXxX 5 0 00:1D:D8:3A:33:83 XXXXXXXXxxXXxXxXXXXXXxxXXXXXxXxX 4 0
-
Замените ключ сопряжения Linux на Windows, убрав пробелы.
-
- В Mint 18 (и Ubuntu 16.04) и выше вам, возможно, придется сделать следующее:
-
Перейдите в root:
sudo -i
(В старых версиях Ubuntu, ‘su -‘) -
Перейдите в местоположение конфигурации Bluetooth
/var/lib/bluetooth/[MAC-адреса Bth порта]
-
Здесь вы найдете папки для каждого устройства, с которым вы связывались. Имена папок – это MAC-адреса устройств Bluetooth и содержат один файл
info
. В этих файлах вы увидите ключ-соединения, который вам нужно заменить на ваши Windows, вот так:[LinkKey] Key=B99999999FFFFFFFFF999999999FFFFF
-
- До Mint 18/16.04 вы могли сделать следующее:
- После обновления перезапустите службу Bluetooth одним из следующих способов, и тогда все будет работать!
-
Ubuntu, Mint, Arch:
sudo systemctl restart bluetooth
-
Или перезагрузите свою машину в Linux.
-
- Перезагрузите в Windows – это работает!
Во-первых, многие ответы советуют заменить ключ в секции [linkKey]
файла /var/lib/bluetooth/<ADAPTOR_MAC_ADDRESS>/<DEVICE_MAC_ADDRESS>/info
. Эта секция теперь, похоже, называется [LongTermKey]
. Также [LocalSignatureKey]
, похоже, теперь [IdentityResolvingKey]
. Некоторые ответы упоминают только изменение ключа в [linkKey]
, но вам также нужны записи для Enc
,Ediv
и Rand
и ключ для [IdentityResolvingKey]
.
Во-вторых, MAC-адрес устройства может не оставаться постоянным. В случае моего Logitech G604 он увеличивается на единицу каждый раз, когда я связываю его. Я обновил эти скрипты здесь, чтобы решить эту проблему.
Инструкции
- Загрузитесь в Linux и подключите устройство(а) Bluetooth. Вам понадобятся новые сгенерированные файлы
info
иattributes
в/var/lib/bluetooth/<ADAPTOR_MAC_ADDRESS>/<DEVICE_MAC_ADDRESS>/
. - Перезагрузитесь в Windows и свяжите устройство(а) Bluetooth.
- Скачайте PSExec и выполните следующую команду из командной строки, запущенной в режиме администратора:
PsExec64.exe -s -i regedit /e C:\BTKeys.reg HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys
- Скопируйте файл
C:\BTKeys.reg
на USB-накопитель (или оставьте на дискеC:
, если он доступен из ОС Linux). - Выключите устройство(а) Bluetooth и перезагрузитесь обратно в Linux. Не соединяйте устройство снова в Linux. Это может сгенерировать новый MAC-адрес, что нарушит сопряжение с Windows. (Я не знаю, нормально это или нет, но именно так происходит с моим Logitech G604).
- Скопируйте файл
BTKeys.reg
в файловую систему Linux. - Запустите
clean_reg_file.py --file_path BTKeys.reg --output clean.reg
, чтобы очистить файл (преобразует кодировку в UTF8 и удаляет кавычки). - Запустите
bluetooth_fix.py --reg_path clean.reg
. - Из терминала с
sudo
перейдите в/var/lib/bluetooth/<ADAPTOR_MAC_ADDRESS>/
. - Создайте новую директорию, соответствующую MAC-адресу устройства из
BTKeys.reg
. - Скопируйте
info
иattributes
из директории старого MAC-адреса в новую. - Откройте
/var/lib/bluetooth/<ADAPTOR_MAC>/<NEW_DEVICE_MAC>/info
и измените значения в соответствии с выводом из шага 8. - Перезапустите Bluetooth с помощью
sudo systemctl restart bluetooth
.
Мне нравится это решение, и я потратил годы на сопряжение своих наушников в Linux и Windows после каждой переустановки. Но я устал от этого процесса после того, как купил клавиатуру Bluetooth LE, поэтому я написал скрипт, чтобы помочь. Он в основном предназначен для устройств Bluetooth LE, но также будет работать с обычными устройствами.
Для не LE устройств копируйте только MAC-адрес и ключ и оставляйте другие поля пустыми. Устройства Bluetooth LE будут иметь все поля в ключе в реестре, и их все нужно будет ввести.
Скрипт безопасен – он не изменяет файлы сам, но удаляет пробелы и переименовывает переменные. Читайте README для получения дополнительных инструкций или просто следуйте быстрому старту.
Ответ или решение
Когда вы используете двойную загрузку Windows и Linux Mint/Ubuntu, может возникнуть необходимость постоянно повторно сопоставлять ваши Bluetooth-устройства каждый раз, когда вы переключаетесь с одной операционной системы на другую. Это происходит из-за того, что при парном соединении создаётся уникальный ключ для каждого устройства, и когда вы повышаете уровень Bluetooth-соединений, ключ одного из операционных систем может переписывать ключ другой системы. В этом руководстве мы рассмотрим, как предотвратить необходимость повторного соединения Bluetooth-устройств, упрощая процесс загрузки в обе операционные системы.
Почему это происходит?
При сопоставлении Bluetooth-устройства ваша операционная система генерирует уникальный набор ключей. Операционная система (Windows или Linux) хранил MAC-адрес Bluetooth-устройства и сопоставленный ключ. При переключении между системами ваш Bluetooth-устройство, хранящее MAC-адрес и ключ компьютера, получает новый ключ, который заменяет старый. Так как MAC-адрес Bluetooth-порта вечен (он задан на уровне аппаратной части), это означает, что при повторном парном соединении Windows переписывает ключ для Linux и наоборот.
Как это исправить?
Для того чтобы избежать повторной необходимости в парном соединении, следуйте следующим шагам:
-
Сначала выполните сопоставление всех ваших устройств с Linux Mint/Ubuntu:
- Откройте настройки Bluetooth и выполните парное соединение с вашим устройством. Убедитесь, что они успешно сопоставлены и работают.
-
Затем выполните сопоставление с Windows:
- Перезагрузитесь в Windows и выполните то же самое. Убедитесь, что устройство успешно сопряжено.
-
Скопируйте ключи сопоставления из Windows:
- Существует два основных способа копирования ключей сопоставления из Windows в Linux:
Способ 1: Использование PsExec для доступа к реестру Windows
- Скачайте PsExec.
- Откройте командную строку с правами администратора и выполните:
psexec -s -i regedit.exe
- Перейдите в раздел
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BTHPORT\Parameters\Keys
. - Запишите MAC-адрес устройства и соответствующий ему ключ. Экспортируйте этот ключ в текстовый файл для удобного извлечения.
Способ 2: Использование chntpw из Linux
- Установите
chntpw
:sudo apt-get install chntpw
- Найдите свой загрузочный диск Windows, смонтируйте его в режиме чтения-записи и перейдите в каталог:
/mnt/c/Windows/System32/config
- Замените данную команду на:
chntpw -e SYSTEM
- Перейдите в ключи Bluetooth и скопируйте нужные значения ключей.
-
Перейдите обратно в Linux:
- Не повторяйте сопоставление устройства, так как это может привести к изменению MAC-адреса устройства.
- Замените ключ сопоставления в одном из файлов конфигурации Bluetooth в Linux. Путь часто будет что-то вроде
/var/lib/bluetooth/[MAC-адрес Bluetooth]/[MAC-адрес устройства]/info
.
-
Перезапустите Bluetooth-сервис:
- После внесения изменений выполните команду:
sudo systemctl restart bluetooth
- После внесения изменений выполните команду:
-
Проверьте корректность работы:
- Перезагрузите ваш компьютер в Windows и убедитесь, что устройство работает без необходимости повторного сопоставления.
Дополнительные советы
-
Bluetooth LE устройства: Если вы используете устройства Bluetooth Low Energy (LE), ключи могут записываться несколько иначе и могут требовать дополнительных шагов по имплементации.
-
Использование скриптов: Для пользователей, стремящихся автоматизировать процесс, существуют скрипты, такие как это, которые могут помочь в свапинге ключей между операционными системами, избегая ручного редактирования.
Следуя данным шагам, вы сможете предотвратить необходимость постоянного переопределения Bluetooth-устройств на разных операционных системах, что значительно упростит работу в двойной загрузке Windows и Linux.