Bluetooth-Geräte im Dualboot-Betrieb Linux/Windows koppeln

Im Dualboot-Betrieb muss bei jedem Wechsel des Betriebssystems ein Bluetooth-Gerät neu gekoppelt werden. Dies dauert unter Windows leider immer eine gewisse Weile, da Windows jedes mal seine Treiber neu installieren muss.
Die Ursache ist, dass bei jedem neuen Kopplungsvorgang zwischen Rechner und Bluetooth-Gerät ein Schlüssel ausgehandelt wird und die beiden Schlüssel von Windows und Linux unterschiedlich sind. Der Windowsschlüssel für Bluetooth befindet sich in der Registry unter dem Pfad “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet002\Services\BTHPORT\Parameters\Keys\${DEVICE}\${ADDRESS}“ (Windows 7) oder “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\${DEVICE}\${ADDRESS}“ (Windows 10). DEVICE steht hier für die MAC-Adresse der Bluetooth-Karte des Rechners und ADDRESS steht für die MAC-Adresse des Bluetooth-Geräts. Leider ist dieser Schlüssel auch für den Benutzer mit Administratorrechten geschützt und kann nicht ausgelesen werden – unter Linux wäre nebenbei gesagt so etwas überhaupt nicht möglich aber Microsoft hält es wohl für nötig, das Betriebssystem vor dem Administratorkonto zu schützen.

Unter Linux kann der Schlüssel jedoch von der gemounteten Windowspartition mit chntpw ausgelesen werden. Zunächst wird chntpw mit:

apt-get install chntpw

installiert. Bei Debian ist das Tool in den Repositorien enthalten. Bei anderen Distributionen muss man ggf. aus den Quellen installieren.

Um einen temporären Bluetoothschlüssel zu erzeugen wird zunächst das Bluetooth-Gerät unter Linux gepairt. Der Schlüssel liegt dann in der Datei /var/lib/bluetooth/${DEVICE}\${ADDRESS}/info. Die Adress von $(ADDRESS) wird notiert. Normalerweise reichen nur die vier letzten Zeichen. Nun wird Windows gebootet und das gleiche Gerät mit Windows gepairt. Nun wird erneut Linux gebootet und die Windowspartition gemountet. In der Konsole wird dann in der Windowspartion in das Verzeichnis „Windows/System32/config“ gewechselt und „chntpw -e SYSTEM“ aufgerufen. chmtpw meldet sich nun mit einer eigenen Shell:

chntpw version 1.00 140201, (c) Petter N Hagen
Hive <SYSTEM> name (from header): <SYSTEM>
ROOT KEY at offset: 0x001020 * Subkey indexing type is: 686c <lh>
File size 19136512 [1240000] bytes, containing 3690 pages (+ 1 headerpage)
Used for data: 293347/18756744 blocks/bytes, unused: 10530/142904 blocks/bytes.

Simple registry editor. ? for help

>

und mit dem Befehl ls erhält man eine Verzeichnungslist:

> ls
Node has 7 subkeys and 1 values
key name
<ControlSet001>
<ControlSet002>
<MountedDevices>
<RNG>
<Select>
<Setup>
<WPA>
size type value name [value if type DWORD]
2 1 REG_SZ <>

>

Wie man sieht, jedenfalls wenn man einmal etwas mit der Windows-Registry gemacht hat, befinden wir uns mit dieser Shell in der Registry. Verzeichnisse kann man hier auch mit cd wechseln. Nun wird in das Verzeichnis „CurrentControlSet002\Services\BTHPORT\Parameters\Keys\${DEVICE}\${ADDRESS}“ (Windows 7) oder “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys\${DEVICE}\${ADDRESS}“ (Windows 10) gewechselt. $(DEVISE) steht für die MAC-Adresse der Bluetooth-Karte im Rechner und $(ADDRESS) steht für die MAC-Adresse des Bluetooth-Gerätes. Das Ganze sieht dann so aus:

(...)\services\BTHPORT\Parameters\Keys> ls
Node has 1 subkeys and 0 values
key name
<552cf4bac659>

(...)\services\BTHPORT\Parameters\Keys> cd 552cf4bac659

(...)\BTHPORT\Parameters\Keys\552cf4bac659> ls
Node has 0 subkeys and 4 values
size type value name [value if type DWORD]
16 3 REG_BINARY <116b8e16d883>
16 3 REG_BINARY <122c26afb9e1>
16 3 REG_BINARY <131167111341>
16 3 REG_BINARY <1311671112c8>

(...)\BTHPORT\Parameters\Keys\552cf4bac659>

552cf4bac659 ist hier die MAC-Adresse der Karte im Rechner und da vier Geräte mit dem Windows gepairt sind sieht man vier MAC-Adressen der Geräte. Nun muss der Schlüssel des gewünsten Geräts ausgelesen werden. Wenn 1311671112c8 die MAC-Adresse des gewünschten Gerätes ist dann wird mit:

(...)\BTHPORT\Parameters\Keys\552cf4bac659> hex 1311671112c8
Value <0011671112c8> of type REG_BINARY (3), data length 16 [0x10]
:00000 D8 3B E8 98 A4 AF 0F FB 89 65 B5 50 6C EC 5C 7C .;.......e.Pl.\|

(...)\BTHPORT\Parameters\Keys\552cf4bac659>

der Bluetoothschlüssel ausgelesen. Der Schlüssel ist oben mit rot markiert. Nun wird wieder Linux gebootet und die Datei /var/lib/bluetooth/${DEVICE}\${ADDRESS}/info mit einem Editor des Vertrauens geöffnet. Die Datei sieht in etwa so aus:

[General]
Name=Trust HS-05
Class=0x200404
SupportedTechnologies=BR/EDR;
Trusted=true
Blocked=false
Services=00001108-0000-1000-8000-00805f9b34fb;0000111e-0000-1000-8000-00805f9b34fb;

[LinkKey]
Key=9B6266331BD4A209EAC15E4AB3B9E997
Type=4
PINLength=0

Der Schlüssel aus der Windows-Registry wird nun in diese Datei statt dem Linux-Schlüssel in die Zeile Key= übertragen. Wie man sieht ist der Windowsschlüssel Byteweise mit einem Leerzeichen versehen und der Linux-Schlüssel nicht. Diese Leerzeichen müssen entfernt werden.

Nachdem man das Bluetooth mit:

service bluetooth restart

neu gestartet hat sollte sich das Bluetooth-Gerät mit dem Rechner paaren lassen.

kais-universum.de