Skip to main content
← blog

14 May 2026

Fixing Bluetooth Headphone Pairing Hell in Dual Boot Setups

I dual-boot Linux and Windows, and my Bluetooth headphones refuse to reconnect without re-pairing every time. Same MAC address, different keys. Bluetooth has trust issues.

linuxwindowsbluetoothdual-boot

The pattern is predictable: if I last used the headphones on Linux and reboot to Windows, Bluetooth sees the device, claims it's trusted, and then refuses to connect anyway. Same thing in reverse. The only fix is to forget the device and re-pair it, every. single. time I switch operating systems. Why does this happen and who can I blame for this minor first world inconvenience?!

Why this happens

Bluetooth pairing involves an exchange of cryptographic keys. When you pair a device, both sides generate a Link Key and store it. These keys are later used to authenticate and encrypt future connections.

Here's the problem: both Windows and Linux use the same Bluetooth adapter and therefore present the same MAC address to the headphones. From the headphones' perspective, they're talking to one device, but that device keeps presenting different credentials.

  1. You pair on OS #1. The headphones store a link key for MAC address AA:BB:CC:DD:EE:FF
  2. You reboot into OS #2 and pair again. The headphones overwrite the stored key for that same MAC address.
  3. You switch back to OS #1. The headphones reject the connection because the stored key no longer matches.

The headphones don't know you switched operating systems. They just see the same MAC address AA:BB:CC:DD:EE:FF with different keys, and they reject the connection for security reasons. Re-pairing works because it forces the headphones to update the link key for that MAC address, but it's a pain.

The fix: sync the Bluetooth keys

The solution is to make all operating systems use the same Link Key. This way, no matter which OS you boot into, the headphones see the same credentials and connect without issue.

This requires extracting the Link Key from one OS (say, Windows) and importing it into the other (Linux). The exact steps depend on which operating systems you're using. Technically the order doesn't matter, but I find it easier to extract from Windows and import into Linux. Here is how to do it...

Step 1: Pair on Windows

Connect the headphones on Windows and make sure they work. If you've already paired them on Linux, forgetting them there first can help avoid confusion.

Step 2: Extract the pairing keys from Windows

Boot into Linux. The Windows Bluetooth keys live in the registry at:

Windows uses 'Fast Startup' which makes the system go into a hibernation-like state instead of fully shutting down. When this happens you can only mount the partition read-only, which does not work with chntpw. To avoid this, either disable Fast Startup in Windows, do a full shutdown (hold Shift while clicking 'Shut down'), or reboot and choose 'Linux' from GRUB.

text
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys 

Depending on your Windows install, the active control set may differ, but ControlSet001 is commonly the correct one in the offline SYSTEM hive.

We'll need chntpw to read them:

bash
sudo pacman -S chntpw # or your distro's equivalent

# Mount the Windows partition
sudo mkdir /mnt/windows
sudo mount -t ntfs-3g /dev/sdXY /mnt/windows # replace with your Windows partition

# Navigate to the registry hive
cd /mnt/windows/Windows/System32/config

Now open the SYSTEM hive in chntpw:

bash
sudo chntpw -e SYSTEM

Inside the chntpw prompt, navigate to the Bluetooth keys:

text
cd ControlSet001\Services\BTHPORT\Parameters\Keys
ls

You'll see a folder named after your Bluetooth adapter's MAC address. cd into it:

text
cd <adapter MAC> # replace with your adapter's MAC
ls

This lists paired devices. You should see your headphones' MAC address. To view the Link Key:

text
hex <headphones MAC> # replace with your headphones' MAC

The output is the Link Key in hexadecimal. Write it down (or copy like a sane person). It should be 32 hex characters (16 bytes). Type q to quit chntpw.

chntpw output, Bluetooth Key highlighted
chntpw output, Bluetooth Key highlighted

Step 3: Write the key to Linux

Linux stores Bluetooth pairing info in /var/lib/bluetooth. Each adapter has a folder, and each paired device has an info file containing the Link Key.

First, stop the Bluetooth service (assuming systemd):

bash
sudo systemctl stop bluetooth

Now edit the info file for your headphones.

The device must already be paired once in Linux so the info file exists.

bash
sudo vim /var/lib/bluetooth/<adapter MAC>/<headphones MAC>/info

Find the [LinkKey] section. It should look like this:

bash
[LinkKey]
Key=00000000000000000000000000000000

Replace the existing key with the one you extracted from Windows. The format is just the 32 hex characters without spaces or separators.

Info file
Info file

Step 3.5: Fix the Handsfree service

If you disabled the handsfree service in Windows to avoid conflicts, you will also need to disable it in Linux. In the same info file, find the [Service] section. Handsfree is usually listed as 0000111e-0000-1000-8000-00805f9b34fb, you can verify this by checking device properties.

Handsfree key removal
Handsfree key removal
Bluemann device properties showing Handsfree service in red
Bluemann device properties showing Handsfree service in red

Save the file and restart Bluetooth:

bash
sudo systemctl start bluetooth

Step 4: Test it out

Reboot to Windows. The headphones should connect without needing to re-pair. Switch back to Linux, and they should also connect seamlessly. Both OSes are now using the same Link Key for the same MAC address, so the headphones see them as the same trusted device.

What I learned

I knew Bluetooth pairing involved some kind of security handshake but had never looked at how the keys are actually stored or why dual-boot breaks it. A few things stood out:

  • The MAC address collision is the entire problem. If Windows and Linux had separate Bluetooth adapters, this wouldn't happen, the headphones would treat them as two different devices with separate keys.
  • Windows and Linux store the same information, just in different places. The Link Key format is identical; it's just a matter of reading it from the registry and writing it to /var/lib/bluetooth.
  • chntpw is more useful than expected. I thought it was only for password resets, but being able to navigate the registry from Linux and dump arbitrary keys makes it a solid dual-boot debugging tool.

The real takeaway: when you dual-boot, Bluetooth devices only get to store one set of pairing keys per MAC address. If you want both operating systems to work, you have to make sure they're using the same ones.

// share

// comments