Qemu programmatisch sendkey-Befehle schicken

Das Durchreichen einer GPU bringt mit qemu ein kleines Problem mit sich. Natürlich gibt es dafür keine fertige Lösung, aber wie immer gibt es unter Linux genug Strick um sich zu erhängen…

Normalerweise geht beim Starten einer Qemu-VM ein kleines Fenster mit einer grafischen Konsole auf. Gibt man dem Ding Fokus, dann frisst es Tastatur- und Mauseingaben und leitet sie an die VM weiter. Das funktioniert auch bereits mit grub. Gibt man der VM nur die echte GPU, dann wird es hakelig. Man kann natürlich USB Geräte durchreichen, aber SeaBIOS scheint nicht in der Lage, mit deren Eingaben etwas anzufangen. Erst nachdem das Betriebssystem das USB-Geraffel initialisiert hat funktioniert alles. Hilft einem aber nicht mit bspw. grub.

In der Monitorkonsole kann man von Hand „sendkey down“, dann „sendkey ret“ eingeben, um zuerst unten und dann Enter zu drücken. Wenn man aber einen Bootloader hat, dem man regelmäßig längere Zeichenfolgen übergeben will, dann macht einen das sehr schnell mürbe. Wie also automatisieren?

Die billige, aber für mich funktionale, Variante ist die Kombination aus qemus Fähigkeit, einen Unix-Socket als Monitor zu nutzen. Dafür gibt man einfach die Option „-monitor unix:/socket/path,server,nowait“ mit. Danach kann man qua socat mit dem Socket spielen. „socat – UNIX-CONNECT:/socket/path“ ist hier gefragt. Hängt man ein ‚printf „sendkey f \n sendkey u \n sendkey c \n“ | ‚ davor, kann man beliebigen Text in den Socket pipen. Unter Fedora 22 wollte echo explizit nicht funktionieren, printf dagegen schon.

Am Ende kann man einen kleinen Wrapper schreiben, der das eigentliche Startskript für die VM aufruft und per „&“ in den Hintergrund drückt, dann kurz wartet und per socat Befehle durchreicht. Am Ende noch ein „wait“ drangeklatscht und fertig ist die Laube. Wenn das nochmal akut werden sollte, dann muss ich entweder nach einer besseren Lösung suchen oder mir ein Tool schreiben, was live Tastatureingaben übersetzt und in den Socket drückt.

Ja, nach sowas verstehe ich /cbx doch recht gut, wenn er die Kategorie bei sich „Linux LeidenSchaf(f)t“ nennt…

2 thoughts on “Qemu programmatisch sendkey-Befehle schicken

  1. Wow, gleich zwei Posts auf einmal! Und dann auch noch Linux als Host für qemu. Wow!

    Da muss ich dann leider kumulativ kommentieren. Inzwischen ist mir nämlich einerseits noch der letzte missionarische Eifer bezüglich des Linux-Evangeliums abhanden gekommen, andererseits aber habe ich gelernt zu akzeptieren, dass sich unsere beiden teuren Celsius-Workstations unter Win7 bisweilen genauso zickig und irrational verhalten wie alle anderen Computer mit denen ich in meinem Leben bisher zu tun hatte.

    Allerdings bereiten mir – vermutlich mangels Erfahrung – die Windosen im Fall eines Falles deutlich mehr Magenschmerzen – ich stehe meist einfach komplett im Wald. Linux hingegen bietet mir ungezählte Möglichkeiten, an Rädern zu drehen, die mit dem eigentlichen Problem zwar nichts zu tun haben, immerhin aber das Gefühl erzeugen, handlungsfähig zu sein. Denn nichts stresst uns mehr, als das Gefühl, keine Kontrolle zu haben…

    Insofern bevorzuge ich Linux weiterhin, weil es so unglaublich viele Wege bietet, an Problemen vorbeizuarbeiten, die man auf anderen Systemen gar nicht erst hätte…

    Wenn das kein Argument ist.

  2. Ja, ich würde das auf mangelnde Erfahrung mit Windows schieben. Wenn man sich ein wenig reingefuchst hat, dann ist die Registry genau so toll wie /etc und zwischen grub und dem BCD-Gedöns ist hinsichtlich der Unverständlichkeit mancher Dinge auch nicht mehr viel Unterschied. Und während man bei Linux zwar „man“ hat, muss man bei exotischeren Sachen genau so drauf hoffen die passenden Einträge einer Mailingliste zu finden, wie man umgekehrt auf einen Post in einem Entwicklerblog von MS oder dergleichen hoffen muss.
    Unterm Strich gibt sich das nicht viel, aber Linux bietet einem die Werkzeuge zum Frickeln so verlockend offen an, dass ich da auch viel eher versucht bin aktiv zu werden. Und generell ist „weniger Putz auf der Wand“. Klartextdateien sind halt einladender als irgendwelche Systemdatenbanken, die Verwaltungstools zum Lesen brauchen. (Man füge hier einen Witz über SystemD und Poettering ein.)

    Nein, wo mir Linux ein wenig madig wird ist fast immer das GUI. Da merkt man bei fast allen recht schnell, dass da weniger Feinschliff und Entwicklerstunden drinstecken. Man drücke mal bei mint auf die Windows-Taste und fange an zu tippen. Wartet man nicht, bleibt die Hälfte der Tastendrücke noch im Terminal hängen. Bisher gefällt mir Fedora mit dem Plasmakram ganz gut. Mal sehen, was mich dort zur Weißglut treiben wird…

    Vermutlich lebe ich in einem Jahr mit einem MacBook Retina in einer winzigen 1-Zimmer-Wohnung und fühle mich so toll, dass ich mir die Schuhe nicht mehr selbst binden kann, oder habe weite Teile meiner Körperpflege genauso wegrationalisiert wie jegliche Zeigegeräte, weil man so ein Ding bei Emacs nicht brauchen kann.

Hinterlasse eine Antwort

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

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>