Xen-3.3.0 & HVM-USB-Support

Diesen Beitrag schrieb ich 13 Jahre und 11 Monate zuvor; die nachfolgenden Ausführungen müssen heute nicht unbedingt noch genau so funktionieren. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 2 Minuten

Oder: mit Apples X11.app geht nichts, also machen wir’s auf der dom0

Während ich mich weiter mit dem Problem befasste fiel mir auf, dass in der Xen-Gemeinde offenbar doch sehr hohe Verwirrung herrscht; deshalb fasse ich mal kurz zusammen, wie man die Sache angehen kann: ich habe auf der dom0 einen grundlegenden X-Server installiert (apt-get install xserver-xorg xfonts-base xterm fvwm), Maus sowie Tastatur angeschlossen und den Server mal gestartet – das funktionierte.

Hinweis: Sollte es nicht funktionieren mit einer Fehlermeldung wie der nachfolgenden, ist das Paket xfonts-base nicht ordnungsgemäß installiert!

Could not init font path element /usr/share/fonts/X11/misc:unscaled, removing from list!
Could not init font path element /usr/share/fonts/X11/misc, removing from list!
Could not init font path element /usr/share/fonts/X11/Speedo, removing from list!
Could not init font path element /usr/share/fonts/X11/PEX, removing from list!
Could not init font path element /usr/share/fonts/X11/cyrillic, removing from list!
Could not init font path element /usr/share/fonts/truetype, removing from list!
Could not init font path element /usr/share/fonts/latex-ttf-fonts, removing from list!

Fatal server error:
could not open default font 'fixed'

Dann per lsusb schauen: welche Geräte sind gerade da? In meinem Fall sieht das dann etwa so aus:

Bus 003 Device 011: ID 045e:0025 Microsoft Corp. IntelliEye Mouse
Bus 003 Device 004: ID 04b4:6560 Cypress Semiconductor Corp. CY7C65640 USB-2.0 "TetraHub"
Bus 003 Device 003: ID 04b4:6560 Cypress Semiconductor Corp. CY7C65640 USB-2.0 "TetraHub"
Bus 003 Device 001: ID 0000:0000  
Bus 001 Device 003: ID 04d9:1603 Holtek Semiconductor, Inc. 
Bus 001 Device 001: ID 0000:0000  
Bus 002 Device 001: ID 0000:0000

Dann stöpfle ich mein USB-Device an und rufe erneut lsusb auf und sehe: es ergab sich eine Änderung, eine Zeile kam dazu:

Bus 003 Device 013: ID 13fe:3123

Hat zwar keinen Namen, aber das ist mein Device – hach, schön. Im fvwm starte ich nun ein xterm, und aus diesem xterm heraus starte ich die `domUv, die in ihrem SDL-Fenster hochkommt:

$ xm create galaxy

Innerhalb des SDL-Fensters kann ich nun (erfolgreich) die Tastenkombination Ctrl+Alt+2 ausführen und gelange tatsächlich in den Monitor des Qemu – hurra! Nun muss ich an dieser Stelle mein USB-Device (bei mir ist das ein 4GB-Stick) bekanntmachen:

$ usb_add host:13fe:3123

Hinweis: Erscheint als Reaktion auf diese Eingabe ein lapidares „Could not add host:13fe:3123“, so wurde in der Konfiguration der domU die Option usb=1 vergessen!

Den Monitor kann ich mittels Ctrl+Alt+1 wieder verlassen. Ich logge mich nun in die domU ein, rufe ein dmesg auf und sehe folgendes:

usb 1-2: new full speed USB device using uhci_hcd and address 2
usb 1-2: configuration #1 chosen from 1 choice
SCSI subsystem initialized
Initializing USB Mass Storage driver...
scsi0 : SCSI emulation for USB Mass Storage devices
usbcore: registered new driver usb-storage
usb-storage: device found at 2
usb-storage: waiting for device to settle before scanning
USB Mass Storage support registered.
  Vendor: Verbatim  Model: STORE N GO        Rev: 5.00
  Type:   Direct-Access                      ANSI SCSI revision: 00
usb-storage: device scan complete
SCSI device sda: 7935104 512-byte hdwr sectors (4063 MB)
sda: Write Protect is off
sda: Mode Sense: 23 00 00 00
sda: assuming drive cache: write through
SCSI device sda: 7935104 512-byte hdwr sectors (4063 MB)
sda: Write Protect is off
sda: Mode Sense: 23 00 00 00
sda: assuming drive cache: write through
 sda: sda1
sd 0:0:0:0: Attached scsi removable disk sda

Außerdem mache ich mal ein lsusb und erhalte als Output dies hier:

galaxy:~$ lsusb 
Bus 001 Device 002: ID 13fe:3123

That’s it! Von meiner Apple-Workstation aus funktioniert es halt nicht – schätzungsweise müsste man da mal einen Bugreport an Apple schicken, damit diese elende Tastenkombination auch unter X11.app benutzbar wird. Davon abgesehen funktioniert diese Sache so ziemlich großartig.

Hinweis: Um das Device wieder zu entfernen arbeitet man nicht mehr mit dem host:vendor_id:product_id-Key, sondern mit der Bus-Adresse. Da die Ausgabe bei mir Bus 001 Device 002: ID 13fe:3123 lautete, ist die Adresse zum Entfernen des Geräts die 0.2 – im Qemu-Monitor also usb_del 0.2 eingeben und anschließend im dmesg staunen, dass das Gerät tatsächlich entfernt wurde ;) Doch Vorsicht: allzu willenloses Spielen mit den Parametern kann dazu führen, das du aus Versehen deine USB-Maus (die wohl per default immer auf 0.1 sitzt) deaktivierst.

Damit das funktioniert, musste ich in der Konfiguration der domU einige Anpassungen vornehmen; nachfolgend die Konfiguration.

## kernel and memory
kernel	= '/usr/lib/xen/boot/hvmloader'
builder	= 'hvm'
device_model = '/usr/lib/xen/bin/qemu-dm'
memory	= '2048'

## display options
vnc=0
sdl=1
monitor=1
usb=1
keymap='en-us'

## disk devices
disk	= [ 'file:/vm/galaxy/main.img,hda,w', 'file:/vm/galaxy/data.img,hdb,w' ]
boot	= 'c'

## power
vcpus	= '2'

## networking and hostname
vif	= [ 'mac=00:02:02:c0:ff:ee' ]
dhcp	= 'dhcp'
name	= 'galaxy'

## behaviour
on_poweroff	= 'destroy'
on_reboot	= 'restart'
on_crash	= 'restart'