Ich nutze geschäftlich die kostenlose VirtualBox-VM von Sun auf dem Mac, um unsere Windows-Software testen zu können. Leider ist es bisher nicht möglich, direkt unter VirtualBox das integrierte Bluetooth-Modul des Macs zu verwenden. Es kann zwar im USB-Gerätemenü ausgewählt werden – jedoch erhält man sofort eine Fehlermeldung von VirtualBox, dass das Gerät nicht eingebunden werden kann, da es in Benutzung sei. Es hilft auch nichts, Apples Bluetooth-Modul in den Systemeinstellungen zu deaktivieren.
Besonders fies ist die Tatsache, dass sich Apples Bluetooth-Implementierung auch im Nachhinein angesteckte USB-Bluetooth-Dongles schnappt, und diese dann ebenfalls nicht in VirtualBox genutzt werden können.
Mit der folgenden Anleitung ist es möglich, das integrierte Bluetooth-Modul (sogar ohne Neustart) in VirtualBox zu verwenden. Allerdings muss man hierfür als root arbeiten! Da hier direkt am laufenden Kernel gearbeitet wird besteht natürlich ein Risiko, die Systemstabilität – zumindest kurzzeitig – zu beeinträchtigen. Hier muß jeder selbst entscheiden, inwieweit er in sein System eingreifen möchte – ich kann daher keine Verantwortung für Schäden übernehmen. Der root-Account ist nach einer Mac OS X Installation auch standardmäßig deaktiviert. Wie man ihn aktivieren kann, findet man relativ schnell über Google heraus.
Um nun das Bluetooth-Modul aus den Mac OS X Fesseln zu befreien, muss man zunächst den Bluetooth-Daemon beenden. Dies geschieht über das Terminal via
su
launchctl unload /System/Library/LaunchDaemons/com.apple.blued.plist
Ob der Befehl funktioniert hat sieht man gegebenenfalls am im Menü eingeblendeten Bluetooth-Symbol. Dieses sollte nun ausgegraut sein und ausserdem die Meldung "Bluetooth: Nicht verfügbar" im Menü anzeigen.
Danach muss man die nun nicht mehr benötigten Kernel-Extensions entladen. Die Schwierigkeit hierbei ist, dass diese teilweise voneinander abhängig sind. Kernel-Extensions, die noch von anderen benötigt werden, können nicht entladen werden. Um nachzusehen, ob noch Abhängigkeiten vorhanden sind, kann man
kextstat
verwenden. Man bekommt dann eine Liste aller geladener Kernel-Extensions angezeigt, wobei uns hier hauptsächlich die Spalte "Refs" interessiert. Hier sollte beim Eintrag "AppleIOBluetoothHCIController" bestenfalls eine 0 (Null) stehen. Das ist vermutlich nicht immer der Fall – zumindest bei mir gab es noch eine Referenzierung durch den "BroadcomUSBBluetoothHCIController".
Welche Extensions auf welche Extensions verlinken steht ganz am Ende jeder Zeile, zwischen den spitzen Klammern. Sollten also noch Verweise auf den AppleIOBluetoothHCIController vorhanden sein, so muss man diese zuerst entladen.
Zum Entladen kommt hier "kextunload" zum Einsatz, in meinem Fall also
kextunload -b com.apple.driver.BroadcomUSBBluetoothHCIController
Wenn alles geklappt halt sollte danach der Refs-Count für "AppleIOBluetoothHCIController" auf 0 stehen. Ist dies der Fall, so kann auch diese Extension entladen werden.
kextunload -b com.apple.driver.AppleUSBBluetoothHCIController
Soweit war es das eigentlich schon. Nun muss man nur noch VirtualBox starten, und das Bluetooth-Modul aus dem USB-Gerätemenü auswählen und einbinden. Damit das Modul dann auch unter Windows genutzt werden kann, sollte man noch die Apple Bootcamp-Treiber installieren.
Die Änderungen sind übrigens temporär, und werden durch einen Neustart zunichte gemacht. Um ohne Neustart das Bluetooth-Modul am Mac wieder nutzen zu können sind die Schritte in umgekehrter Reihenfolge notwendig. Statt "kextunload" ist dann natürlich "kextload" zu verwenden, sowie "load" statt "unload" bei launchctl.