Bluetooth-Eingabegeräte in Multiboot-Umgebungen verwenden

Wer, wie ich, ein Multiboot-System betreibt und ein Bluetooth-Eingabegerät verwendet, wie z.B. in meinem Fall die Microsoft Sculpt Touch Mouse, wird sich sicherlich schon mal geärgert haben, dass die Maus nur auf jeweils einem der Systeme funktioniert. Natürlich könnte man die Maus jedes Mal neu mit dem aktuell aktiven Betriebssystem verbinden, aber mich zumindest hat dieses Vorgehen auf Dauer doch ein wenig genervt. Ich habe also nach einem Weg gesucht, wie ich meine Maus in einer Multiboot-Umgebung unter möglichst allen installierten Systemen verwenden kann, ohne die Maus jedes Mal neu installieren zu müssen. Die von mir gefundenen Lösungen möchte ich auf diesem Wege auch anderen verfügbar machen.

Das Problem

Das Problem entsteht durch die Art und Weise, wie Bluetooth-Geräte miteinander verbunden werden. Für jede Verbindung zwischen zwei Geräten wird ein 128-Bit-Sicherheitsschlüssel generiert, der anschließend zusammen mit der Hardwareadresse des jeweils anderen Bluetooth-Gerätes gespeichert wird. Diese beiden Komponenten, die Hardwareadresse und der Sicherheitsschlüssel, bezeichne ich im Folgenden als Datensatz.

Werden zuvor miteinander verbundene Bluetooth-Geräte später wieder miteinander verbunden, wird dieser Sicherheitsschlüssel wieder verwendet. Bluetooth-Eingabegeräte können aber sinnvollerweise zu einem bestimmten Zeitpunkt nur zu einem einzigen Gerät verbunden sein. Folglich macht es Sinn, dass diese Geräte nur je einen einzigen Datensatz speichern können. Soll nun ein anderes Gerät dieses Bluetooth-Eingabegerät verwenden, muss der vorhandene Datensatz auf dem Eingabegerät zunächst gelöscht werden. Dies geschieht meist, durch betätigen eines am Eingabegerät angebrachten „Connect“-Knopfes und dem anschließenden Verbinden mit einem anderen Gerät bzw. Betriebssystem.

Wollen wir nun mehrere Betriebssysteme auf einem Rechner mit ein und demselben Bluetooth-Eingabegerät verwenden, so liegt mit dem vorangegangenen Wissen die Lösung nahe, einfach den Sicherheitsschlüssel des einen Betriebssystems auf das andere, bzw. die anderen, zu kopieren. An und für sich ist diese Lösung exakt das Prinzip, auf das ich im Folgenden hinausmöchte. Allerdings nützt uns dieser Schlüssel nichts, wenn das Betriebssystem das jeweilige Eingabegerät nicht kennt. Das gewünschte Betriebssystem muss also zuvor schon einmal normal mit dem Eingabegerät verbunden gewesen sein, bevor der Schlüssel des nun mit dem Eingabegerät verbundenen Betriebssystems auf dem/den jeweils anderen Betriebssystem/en übertragen werden kann. Der erste Schritt, also das Verbinden des Eingabegeräts mit dem Rechner unter dem jeweiligen Betriebssystem, sollte eigentlich für jeden machbar sein. Wie der zweite Schritt umgesetzt wird, darauf möchte ich im Folgenden eingehen.

Die folgenden Erklärungen für Linux beziehen sich hauptsächlich auf Ubuntu (12.04 – 14.04) und seine Derivate, LinuxMint (15 – 17) sowie elementaryOS Luna. Das grobe Prinzip sollte auf allen anderen Distros ähnlich sein, eventuell werden die Schlüssel aber in einer Datei mit anderem Namen gespeichert. Genaueres findet man i.d.R. in den Manpages der jeweiligen Distro.

Ferner wird angenommen, dass das aktuell aktive Betriebssystem das jeweils zuletzt mit dem Eingabegerät verbundene ist, alle anderen Betriebssysteme also zuvor schon einmal mit dem Eingabegerät verbunden waren.

Konstellation [Linux ↔ Linux]

Diese Konstellation ist die wahrscheinlich einfachste, da hierbei lediglich ein Texteditor, wie z.B. gedit oder, für die Freunde des Terminals, vim, Emacs oder nano, benötigt wird.

Zunächst öffnen wir die Datei /var/lib/bluetooth/XXXXXXXXXXXX/linkkeys mit unserem Texteditor, XXXXXXXXXXXX ist dabei die Hardware-Adresse des Bluetooth-Moduls im Rechner. Der Inhalt der Datei sollte nach dem folgenden Schema aufgebaut sein:

YY:YY:YY:YY:YY:YY FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A B

YY:YY:YY:YY:YY:YY ist dabei die durch Doppelpunkte getrennte Hardwareadresse des Eingabegeräts, FF…FF der Sicherheitsschlüssel und A und B Parameter, deren Bedeutungen für uns uninteressant sind.

Um nun den Sicherheitsschlüssel des aktuellen Systems in die Konfiguration des jeweils anderen Systems zu übernehmen, muss dieser nun einfach in die entsprechende Konfigurationsdatei des anderen Systems, z.B. /mnt/OtherSystemsPartition/var/lib/bluetooth/XXXXXXXXXXXX/linkkeys, kopiert werden, dabei überschreiben wir einfach den schon vorhandenen Schlüssel.

Wenn nun das andere System gestartet wird, sollte es sich theoretisch ohne Probleme mit dem Eingabegerät verbinden können.

Konstellation [Windows ↔ Windows]

Diese Konstellation ist schon etwas kniffeliger, aber an sich noch recht einfach. Unter Windows werden die Sicherheitsschlüssel für Bluetooth-Geräte unter dem Pfad HKLM\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys\XXXXXXXXXXXX in der Registry gespeichert. Allerdings haben weder Benutzer noch Administrator das Recht, auf den Registry-Schlüssel HKLM\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys zuzugreifen. Damit können wir leider auch nicht den Schlüssel auslesen. Wir benötigen also Systemrechte, vergleichbar den root-Rechten auf unixoiden Systemen. Diese zu erlangen ist mit normalen Windows-Bordmitteln schwierig, wenn nicht unmöglich. Um dennoch Systemrechte zu erlangen, benötigen wir das Sysinternals-Tool psexec.exe. Dieses kann man entweder mit den anderen ps-Tools von http://technet.microsoft.com/de-de/sysinternals/bb896649 herunterladen, oder zusammen mit der kompletten Sysinternals Suite von http://technet.microsoft.com/de-de/sysinternals/bb842062.

Nachdem das ZIP-Archiv entpackt wurde, öffnen wir in dem Verzeichnis, in dem sich psexec.exe nun befindet, ein Konsolenfenster mit Administrator-Rechten und führen den Befehl

psexec.exe /s /i regedit

aus. /s sorgt dafür, dass das von psexec.exe gestartete Programm mit Systemrechten ausgeführt wird, /i sorgt dafür, dass dieses ggf. interaktiv ist, der Benutzer also auch mit dem Programm interagieren kann.

Wenn wir nun den oben beschriebenen Pfad in der Registry öffnen, erscheint keine Fehlermeldung, sondern der Zugriff ist erlaubt. Haben wir nun also den Registry-Schlüssel HKLM\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys\XXXXXXXXXXXX geöffnet, so sehen wir im rechten Teil des Fensters einen Eintrag der Hardwareadresse des Eingabegeräts vom Typ REG_BINARY. Dieser muss nun exportiert werden, dafür wird der Eintrag markiert und anschließend über Datei → „Exportieren…“ an einem sicheren Ort abgelegt.

Nun müssen wir zunächst die Konfiguration des anderen Systems, auch Struktur genannt, öffnen. Diese wollen wir in diesem Beispiel unter HKLM als „Other_SYSTEM“ einbinden. Dafür gehen wir zunächst wieder auf den Registry-Schlüssel HKLM zurück und binden nun über Datei →  „Struktur laden“ die Datei Z:\Windows\System32\config\SYSTEM ein, Z: ist hierbei das Volume, auf dem sich das andere System befindet. Nachdem die Datei ausgewählt wurde, müssen wir nun einen Schlüsselnamen festlegen, hierfür verwenden wir, wie bereits erwähnt, „Other_SYSTEM“. Bevor wir nun den zuvor exportierten Registry-Schlüssel wieder importieren können, müssen wir zunächst den Schlüsselpfad in der exportierten Datei anpassen, da wir anderenfalls den Schlüssel an der Stelle importieren würden, von der wir ihn zuvor exportiert haben. Um die Datei anzupassen, öffnen wir sie in einem normalen Texteditor und ersetzen nun in der Zeile

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys\08edb9e140b4]

SYSTEM mit dem von uns vergebenen Schlüsselnamen, in diesem Fall also Other_SYSTEM. Nun importieren wir die Datei über Datei → „Importieren…“. Zum Schluss markieren wir „Other_SYSTEM“ und entladen die Struktur dann wieder über Datei → „Struktur entladen“.

Konstellation [Windows ↔ Linux]

Dies ist nun die komplizierteste Konstellation. Linux-Distros verwenden meist ein Dateisystem, welches von Windows nicht unterstützt wird. Somit müssen wir in dieser Konstellation unter Linux arbeiten, auch dann, wenn das Windows-System zuletzt mit dem Eingabegerät verbunden wurde. Tatsächlich empfehle ich, zunächst das Linux-System mit dem Gerät zu verbinden, dann das Windows-System und anschließend den Sicherheitsschlüssel von Windows zu verwenden. Warum ich dieses Vorgehen empfehle, wird vielleicht im folgenden Absatz deutlicher.

Um unter Linux auf die Registry von Windows zugreifen zu können, benötigen wir ein Tool namens „chntpw“. Bei diesem Tool handelt es sich um ein Kommandozeilenprogramm, welches allerdings gewisse Nachteile in puncto Benutzerfreundlichkeit besitzt. So habe ich zum Zeitpunkt, zu dem ich dieses How-To schreibe, noch nicht herausgefunden, wie man damit die Registry tatsächlich bearbeitet, lediglich das Lesen funktioniert bei mir ohne Probleme, was aber für unsere Zwecke ausreichen soll.

Auf der Kommandozeile müssen wir nun chntpw mit dem Pfad zu der im vorigen Abschnitt bereits erwähnten Teilstruktur der Registry aufrufen, das kann dann z.B. wie folgt aussehen:

chntpw /mnt/WindowsPartition/Windows/System32/config/SYSTEM

Nun müssen wir zu dem Schlüssel ControlSet001\Services\BTHPORT\Parameters\Keys\XXXXXXXXXXXX wechseln, dies funktioniert in chntpw mit cd, der Befehl dafür lautet also:

cd ControlSet001\Services\BTHPORT\Parameters\Keys\XXXXXXXXXXXX

Nun müssen wir uns noch mit dem folgenden Befehl den Sicherheitsschlüssel ausgeben lassen:

hex YYYYYYYYYYYY

Das Ergebnis sollte in etwa nach dem folgenden Schema aufgebaut sein:

:00000 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

Die 16 FF-Blöcke, von denen jeder Block je ein Byte, also 8 Bit, repräsentiert, stellen hier den Sicherheitsschlüssel dar. Nun müssen wir mit einem Texteditor die schon im Abschnitt „Konstellation [Linux ↔ Linux]“ erwähnte Datei /var/lib/bluetooth/XXXXXXXXXXXX/linkkeys öffnen und den darin enthaltenen Sicherheitsschlüssel mit dem zu kopierenden Sicherheitsschlüssel vom Windows-System überschreiben. Dabei müssen die Leerzeichen zwischen den einzelnen Bytes des neuen Sicherheitsschlüssels entfernt werden. Nun muss das Linux-System noch neugestartet werden. Alternativ kann auch nur der entsprechende Bluetooth-Dienst neugestartet werden, dies kann aber möglicherweise zu Problemen führen, deshalb rate ich zu ersterem. Damit sollte das Bluetooth-Eingabegerät dann unter beiden Systemen nutzbar sein.

 

Ich hoffe, dass meine Lösungen jedem, der ein entsprechendes Problem hat, helfen können. Natürlich können die zuerst genannten Lösungen bei mehr als zwei Betriebssystemen beliebig miteinander kombiniert werden, sodass es relativ einfach möglich sein sollte, das jeweilige Eingabegerät mit wirklich allen in der Multiboot-Umgebung vorhandenen Betriebssystemen zu verwenden.

Zum Schluss möchte ich mich bei dem Benutzer harbulot von ubuntuforums.org bedanken, auf dessen Posting  (http://ubuntuforums.org/showthread.php?t=1479056&p=9363229#post9363229) ich während meiner Recherche gestoßen bin und welches mir ungemein geholfen hat.

 


 

Vielen Dank für diesen Beitrag an den Gastautor – Simon Becker sbecker@outlook.com –

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert