Eingaben auf einem Embedded-Linux-Gerät
Wenn auf Ihrem Embedded-Linux-Gerät kein Fenstersystem vorhanden ist, werden Maus-, Tastatur- und Touch-Eingaben direkt über „ evdev “ oder mithilfe von Hilfsbibliotheken wie „ libinput “ oder „ tslib “ gelesen. Dieses Verhalten setzt jedoch voraus, dass die Geräteknoten „ /dev/input/event* “ für den Benutzer lesbar sind. „ eglfs “ und „ linuxfb “ verfügen über den gesamten Code zur Eingabeverarbeitung, der bereits kompiliert ist.
Verwenden Sie libinput
libinput ist eine Bibliothek zur Verwaltung von Eingabegeräten, die eine Alternative zur Qt-eigenen Eingabeunterstützung „ evdev “ bietet. Um die Verwendung von libinput zu ermöglichen, stellen Sie bei der Konfiguration und dem Erstellen von Qt sicher, dass die Entwicklungsdateien für libudev und libinput verfügbar sind. Wenn Sie Tastaturunterstützung benötigen, ist außerdem xkbcommon erforderlich. Bei eglfs und linuxfb sind keine weiteren Maßnahmen erforderlich, da diese Plugins standardmäßig libinput verwenden. Wenn die Unterstützung für libinput nicht verfügbar ist oder die Umgebungsvariable QT_QPA_EGLFS_NO_LIBINPUT gesetzt ist, werden stattdessen die Qt-eigenen Handler für evdev verwendet.
Die folgenden Umgebungsvariablen stehen zur Verfügung, wenn Eingabeereignisse über libinput empfangen werden:
| Variable | Beschreibung |
|---|---|
QT_QPA_LIBINPUT_TOUCH_MATRIX | Gibt die ersten beiden Zeilen der anzuwendenden 3x3-Transformationsmatrix an. Die Werte müssen durch Leerzeichen getrennt sein. Weitere Informationen finden Sie in der libinput-Dokumentation. |
Eingabe unter eglfs und linuxfb ohne libinput
Parameter wie der Gerätenamenknoten können in den Umgebungsvariablen ` QT_QPA_EVDEV_MOUSE_PARAMETERS`, ` QT_QPA_EVDEV_KEYBOARD_PARAMETERS ` und ` QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS ` festgelegt werden; trennen Sie Ihre Einträge durch Doppelpunkte. Diese Parameter sind eine Alternative zur Übergabe der Einstellungen über das Befehlszeilenargument ` -plugin ` und bei einigen Backends unverzichtbar. ` eglfs ` und ` linuxfb ` verwenden jedoch integrierte Eingabehandler, sodass kein separates ` -plugin `-Argument verwendet wird.
Zudem können die integrierten Eingabebehandler deaktiviert werden, indem „ QT_QPA_EGLFS_DISABLE_INPUT “ (für „ eglfs “) oder „ QT_QPA_FB_DISABLE_INPUT “ (für „ linuxfb “) auf „ 1 “ gesetzt wird.
Maus
Der Mauszeiger wird angezeigt, sobald QT_QPA_EGLFS_HIDECURSOR (für eglfs) oder QT_QPA_FB_HIDECURSOR (für linuxfb) nicht gesetzt ist und die libudev-basierte Geräteerkennung von Qt meldet, dass mindestens eine Maus verfügbar ist. Wenn keine Unterstützung für libudev vorhanden ist, wird der Mauszeiger immer angezeigt, es sei denn, er wird explizit über die Umgebungsvariable deaktiviert.
Wenn Qt mit Unterstützung für „ libudev “ konfiguriert wurde, wird das Anschließen oder Trennen eines Eingabegeräts während der Ausführung der Anwendung (Hot-Plugging) unterstützt. In diesem Fall sind zum Zeitpunkt der Konfiguration die Entwicklungs-Header von „ libudev “ im sysroot vorhanden.
Der Maus-Handler für „ evdev “ unterstützt die folgenden zusätzlichen Parameter:
| Parameter | Beschreibung |
|---|---|
/dev/input/... | Gibt den Namen des Eingabegeräts an. Wird kein Name angegeben, sucht Qt entweder über „ libudev “ oder durch Durchlaufen der verfügbaren Knoten nach einem geeigneten Gerät. |
nocompress | Standardmäßig werden Eingabeereignisse, die keine Positionsänderung im Vergleich zum letzten Qt-Mausereignis bewirken, komprimiert. Ein neues Qt-Mausereignis wird erst nach einer Änderung der Position oder des Tastenstatus gesendet. Um dieses Verhalten zu deaktivieren, setzen Sie den Parameter „ nocompress “. |
dejitter | Legt ein Jitter-Limit fest; standardmäßig deaktiviert. |
grab | Wenn auf „ 1 “ gesetzt, reserviert Qt das Gerät für die exklusive Nutzung. |
abs | Einige Touchscreens melden absolute Koordinaten und lassen sich nicht von Touchpads unterscheiden. Übergeben Sie in diesem Fall „ abs “, um anzugeben, dass das Gerät absolute Ereignisse verwendet. |
Tastatur
Der Tastatur-Handler „ evdev “ unterstützt die folgenden zusätzlichen Parameter:
| Parameter | Beschreibung |
|---|---|
/dev/input/... | Gibt den Namen des Eingabegeräts an. Wenn dieser nicht angegeben wird, sucht Qt entweder über ` libudev ` oder durch Durchlaufen der verfügbaren Knoten nach einem geeigneten Gerät. |
grab | Aktiviert das „Grabbing“ des Eingabegeräts. |
disable-zap | Deaktiviert die Zap-Tastenkombination. Siehe den Hinweis zu „ Ctrl+Alt+Backspace “ weiter unten. |
keymap | Gibt den Namen einer benutzerdefinierten Tastaturbelegungsdatei an. |
enable-compose | Aktiviert Compositing. |
repeat-delay | Legt eine benutzerdefinierte Verzögerung für die Tastenwiederholung fest. |
repeat-rate | Legt eine benutzerdefinierte Tastenwiederholungsrate fest. |
Auf Embedded-Linux-Systemen, auf denen die Terminal-Sitzungen nicht deaktiviert sind, kann das Verhalten bei Tastendruck verwirrend sein, da das Eingabeereignis sowohl von der Qt-Anwendung als auch vom TTY verarbeitet wird. Um dies zu beheben, stehen folgende Optionen zur Verfügung:
- Beim Start der Anwendung versuchen die Optionen „
EGLFS“ und „LinuxFB“, die Terminaltastatur zu deaktivieren, indem sie den Tastaturmodus des TTY auf „K_OFF“ setzen. Dadurch wird verhindert, dass Tastenanschläge an das Terminal gesendet werden. Wenn das Standardverhalten erforderlich ist, setzen Sie die Umgebungsvariable „QT_QPA_ENABLE_TERMINAL_KEYBOARD“ auf „1“. Beachten Sie, dass dies nur funktioniert, wenn die Anwendung von einer Remote-Konsole aus gestartet wird, beispielsweise über „ssh“, und die Tastatureingabe des Terminals aktiviert bleibt. - Ein alternativer Ansatz besteht darin, den Parameter „
grab“ des Tastatur-Handlers „evdev“ zu verwenden, indem „grab=1“ an „QT_QPA_EVDEV_KEYBOARD_PARAMETERS“ übergeben wird. Dies führt dazu, dass versucht wird, die Kontrolle über das Eingabegerät zu übernehmen. Ist die „grab“ erfolgreich, erhalten keine anderen Komponenten im System Ereignisse von diesem Gerät, solange die Qt-Anwendung läuft. Dieser Ansatz eignet sich besser für Anwendungen, die remote gestartet werden, da er keinen Zugriff auf das TTY-Gerät benötigt. - Schließlich ist es bei vielen spezialisierten Embedded-Linux-Images von vornherein nicht sinnvoll, die Standard-Terminalsitzungen zu aktivieren. Weitere Details dazu, wie Sie diese Terminalsitzungen deaktivieren können, finden Sie in der Dokumentation Ihrer Build-Umgebung. Wenn Sie beispielsweise Images mit dem Yocto-Projekt erstellen, führt das Deaktivieren von „
SYSVINIT_ENABLED_GETTYS“ dazu, dass kein „getty“-Prozess läuft. Das bedeutet, dass auf keinem der virtuellen Terminals Eingaben möglich sind.
Sollte die standardmäßig integrierte Tastaturbelegung nicht ausreichen, können Sie über den Parameter „ keymap “ eine andere festlegen.
Hinweis: Wie bei anderen Konfigurationsdateien für „ eglfs “ gelten diese älteren Tastaturbelegungsdateien als vertrauenswürdiger Inhalt, der vollständig vom Hersteller des Geräts oder der Plattform kontrolliert und verwaltet wird. Es ist nicht vorgesehen, dass sie den Endnutzern des Geräts zugänglich gemacht werden, und sie sind nicht dazu gedacht, das Laden von benutzerdefinierten Tastaturbelegungsdateien zu ermöglichen.
Warnung: Bei der integrierten Tastaturbelegung beendet der „zap“-Akkord (Ctrl+Alt+Backspace) die Anwendung. Der Akkord wird vom Tastatur-Handler verarbeitet, sodass die Anwendung niemals darüber informiert wird und ihn nicht verhindern kann. Auf einem Gerät, auf dem daher jedes tastaturähnliche Eingabegerät die Benutzeroberfläche herunterfahren kann, übergeben Sie „ disable-zap “ in „ QT_QPA_EVDEV_KEYBOARD_PARAMETERS “.
Hinweis: Der Konsolenwechsel (Ctrl+Alt+Fx) und der Neustart-Chord werden vom Tastatur-Handler zwar erkannt, aber nicht weiterverarbeitet und daher praktisch ignoriert.
Um eine benutzerdefinierte Tastenbelegung zu erstellen, verwenden Sie das Dienstprogramm kmap2qmap, das im Modul qttools zu finden ist. Die Quelldateien müssen im Standard-Linux- kmap -Format vorliegen, das vom Kernel-Befehl loadkeys verstanden wird. qmap -Dateien können auf eine der folgenden Arten erstellt werden:
- Das Projekt „Linux Console Tools“ (LCT).
- X.org -X11-Tastaturbelegungen können mit dem Dienstprogramm „
ckbcomp“ in das Format „kmap“ konvertiert werden. - Da es sich bei „
kmap“-Dateien um Klartextdateien handelt, können sie auch manuell erstellt werden.
kmap2qmap ist ein Befehlszeilenprogramm, das mindestens zwei Dateien als Parameter benötigt. Der letzte Parameter ist die generierte „ .qmap “-Datei, während alle anderen als Eingabedateien für „ .kmap “ interpretiert werden. Beispiel:
kmap2qmap i386/qwertz/de-latin1-nodeadkeys.kmap include/compose.latin1.inc de-latin1-nodeadkeys.qmapHinweis: „ kmap2qmap “ unterstützt nicht alle (Pseudo-)Symbole, die der Linux-Kernel unterstützt. Wenn Sie also eine Standard-Tastaturbelegung konvertieren, werden zahlreiche Warnungen bezüglich „ Show_Registers “, „ Hex_A “ usw. angezeigt; diese Meldungen können ignoriert werden.
Touch
Obwohl dies für moderne Touchscreens nicht erforderlich ist, kann es bei einigen älteren resistiven Touchscreens, die nur Single-Touch unterstützen, notwendig sein, auf die Verwendung von tslib zurückzugreifen, anstatt sich auf das Linux-Multi-Touch-Protokoll und die Ereignisgeräte zu verlassen.
Um die Unterstützung für „ tslib “ zu aktivieren, setzen Sie die Umgebungsvariable „ QT_QPA_EGLFS_TSLIB “ (für eglfs) oder „ QT_QPA_FB_TSLIB “ (für linuxfb) auf 1. Um das Gerät zu wechseln, setzen Sie die Umgebungsvariable „ TSLIB_TSDEVICE “ oder übergeben Sie den Gerätenamen über die Befehlszeile. Beachten Sie, dass der Eingabehandler „ tslib “ Mausereignisse generiert und nur Single-Touch unterstützt, im Gegensatz zu „ evdevtouch “, das auch echte Multi-Touch- QTouchEvent -Ereignisse generiert.
Hinweis: Die Geräteauswahl und -filterung wird vollständig an tslib übergeben. Das bedeutet, dass die eigene Konfigurationsdatei von tslib bestimmt, welche Filtermodule in den Anwendungsprozess geladen werden; Qt wählt diese weder aus noch listet es sie auf. Verwenden Sie für neue Geräte vorzugsweise libinput.
Der Touch-Handler von „ evdev “ unterstützt die folgenden zusätzlichen Parameter:
| Parameter | Beschreibung |
|---|---|
/dev/input/... | Gibt den Namen des Eingabegeräts an. Wird kein Name angegeben, sucht Qt entweder über „ libudev “ oder durch Durchlaufen der verfügbaren Knoten nach einem geeigneten Gerät. |
rotate | Bei einigen Touchscreens müssen die Koordinaten gedreht werden, indem „ rotate “ auf 90, 180 oder 270 gesetzt wird. |
invertx und inverty | Legt die Parameter fest, um die X- oder Y-Koordinaten in den Eingabeereignissen umzukehren. |
Wenn Sie beispielsweise vor dem Start von Anwendungen die folgenden Werte an ` QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS ` übergeben, erhalten Sie ein explizit angegebenes Touch-Gerät mit gespiegelten Koordinaten. Dies ist nützlich, wenn die Ausrichtung des tatsächlichen Bildschirms und des Touchscreens nicht übereinstimmen.
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event5:rotate=180Stiftbasierte Tablets
Das Plugin „ evdevtablet “ bietet grundlegende Unterstützung für Wacom und ähnliche stiftbasierte Tablets. Es generiert ausschließlich „ QTabletEvent “-Ereignisse. Um es zu aktivieren, übergeben Sie „ QT_QPA_GENERIC_PLUGINS=evdevtablet “ in der Umgebungsvariable oder alternativ das Argument „ -plugin evdevtablet “ über die Befehlszeile.
Das Plugin kann einen Geräteknotenparameter wie z. B. „ QT_QPA_GENERIC_PLUGINS=evdevtablet:/dev/event1 “ entgegennehmen, falls die automatische Geräteerkennung von Qt (basierend entweder auf „ libudev “ oder dem Durchsuchen von „ /dev/input/event* “) nicht funktioniert oder fehlerhaft ist.
Debuggen von Eingabegeräten
Es ist möglich, bestimmte Informationen in die Debug-Ausgabe auszugeben, indem die Protokollierungsregel „ qt.qpa.input “ aktiviert wird, beispielsweise durch Setzen der Umgebungsvariablen „ QT_LOGGING_RULES “ auf „ qt.qpa.input=true “. Dies ist nützlich, um festzustellen, welches Gerät verwendet wird, oder zur Fehlerbehebung bei Problemen mit der Geräteerkennung.
Für eine detailliertere Protokollierung der Eingabesubsysteme (Maus, Tastatur, Touch) aktivieren Sie alle eingabebezogenen Protokollierungskategorien mit:
export QT_LOGGING_RULES="qt.qpa.input.*=true;qt.qpa.events=true"Benutzerdefinierte Mauszeigerbilder verwenden
eglfs verfügt über einen eigenen Satz von Mauszeigerbildern im Format 32x32. Sollten diese nicht ausreichen, können Sie einen benutzerdefinierten Cursor-Atlas bereitstellen, indem Sie die Umgebungsvariable ` QT_QPA_EGLFS_CURSOR ` auf den Namen einer JSON-Datei setzen. Diese Datei kann auch über das Qt-Ressourcensystem in die Anwendung eingebettet werden.
Beispielsweise lässt sich ein eingebetteter Cursor-Atlas mit 8 Cursor-Bildern pro Zeile wie folgt angeben:
{
"image": ":/cursor-atlas.png",
"cursorsPerRow": 8,
"hotSpots": [
[7, 2],
[12, 3],
[12, 12],
...
]
}Beachten Sie, dass die Bilder im Atlas dicht gepackt sein müssen; die Breite und Höhe der Cursor werden anhand der Gesamtbildgröße und der Einstellung „ cursorsPerRow “ bestimmt. Atlasdateien müssen außerdem ein Bild für alle unterstützten Cursor enthalten.
Hinweis: Wie bei anderen Konfigurationsdateien für „ eglfs “ gilt der Cursor-Atlas als vertrauenswürdiger Inhalt, der vollständig vom Hersteller des Geräts oder der Plattform kontrolliert und verwaltet wird. Es ist nicht vorgesehen, dass er den Endnutzern des Geräts zugänglich gemacht wird.
Die Schlüssel „ image “ und „ hotSpots “ sowie ein Wert für „ cursorsPerRow “, der ungleich Null ist, sind zwingend erforderlich, und „ hotSpots “ muss für jede unterstützte Cursorform einen Eintrag enthalten. Eine Datei, in der einer dieser Einträge fehlt, wird mit einer Warnung abgelehnt und der Cursor deaktiviert.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.