Entrées sur un dispositif Linux embarqué
Sur votre périphérique Linux embarqué, lorsqu'il n'y a pas de système de fenêtrage présent, la souris, le clavier et les entrées tactiles sont lus directement via evdev ou en utilisant des bibliothèques d'aide telles que libinput ou tslib. Cependant, ce comportement nécessite que les nœuds de périphérique /dev/input/event* soient lisibles par l'utilisateur. eglfs et linuxfb ont tout le code de gestion d'entrée compilé dedans.
Utiliser libinput
libinput est une bibliothèque de gestion des périphériques d'entrée qui offre une alternative à la prise en charge de l'entrée propre à Qt evdev. Pour permettre l'utilisation de libinput, lorsque vous configurez et compilez Qt, assurez-vous que les fichiers de développement pour libudev et libinput sont disponibles. Si vous avez besoin d'un support clavier, xkbcommon est également nécessaire. Avec eglfs et linuxfb, aucune autre action n'est nécessaire car ces plugins utilisent libinput par défaut. Si le support libinput n'est pas disponible ou si la variable d'environnement QT_QPA_EGLFS_NO_LIBINPUT est définie, les propres gestionnaires de Qt evdev sont utilisés à la place.
Les variables d'environnement suivantes sont disponibles lorsque les événements d'entrée sont reçus via libinput:
| Variable | Description de la variable |
|---|---|
QT_QPA_LIBINPUT_TOUCH_MATRIX | Spécifie les deux premières lignes de la matrice de transformation 3x3 à appliquer. Les valeurs doivent être séparées par des espaces. Voir la documentation de libinput pour plus de détails. |
Entrée sur eglfs et linuxfb sans libinput
Les paramètres tels que le nom du nœud du périphérique peuvent être définis dans les variables d'environnement QT_QPA_EVDEV_MOUSE_PARAMETERS, QT_QPA_EVDEV_KEYBOARD_PARAMETERS et QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS; séparez vos entrées par des deux-points. Ces paramètres sont une alternative à la transmission des paramètres dans l'argument de ligne de commande -plugin, et avec certains backends, ils sont essentiels. Mais eglfs et linuxfb utilisent des gestionnaires d'entrée intégrés, il n'y a donc pas d'argument -plugin séparé à utiliser.
De plus, les gestionnaires d'entrée intégrés peuvent être désactivés en configurant QT_QPA_EGLFS_DISABLE_INPUT (pour eglfs) ou QT_QPA_FB_DISABLE_INPUT (pour linuxfb) à 1.
Souris
Le curseur de la souris apparaît lorsque QT_QPA_EGLFS_HIDECURSOR (pour eglfs) ou QT_QPA_FB_HIDECURSOR (pour linuxfb) n'est pas défini et que la découverte de périphériques basée sur libudev de Qt signale qu'au moins une souris est disponible. Lorsque le support de libudev n'est pas présent, le curseur de la souris est toujours affiché, à moins qu'il ne soit explicitement désactivé via la variable d'environnement.
Si Qt XML a été configuré avec la prise en charge de libudev, la connexion ou la déconnexion d'un périphérique d'entrée pendant que l'application est en cours d'exécution (hot plugging) est prise en charge. Dans ce cas, les en-têtes de développement libudev sont présents dans le sysroot au moment de la configuration.
Le gestionnaire de souris evdev prend en charge les paramètres supplémentaires suivants :
| Paramètre | Description |
|---|---|
/dev/input/... | Spécifie le nom du périphérique d'entrée. S'il n'est pas spécifié, Qt XML recherche un périphérique approprié via libudev ou en parcourant les nœuds disponibles. |
nocompress | Par défaut, les événements d'entrée qui n'entraînent pas de modification de la position par rapport au dernier événement de souris Qt sont compressés. Un nouvel événement Qt Positioning n'est envoyé qu'après un changement de position ou d'état du bouton. Pour désactiver ce comportement, définissez le paramètre nocompress. |
dejitter | Spécifie une limite de gigue ; désactivé par défaut. |
grab | Lorsque le paramètre est défini sur 1, Qt s'empare du périphérique pour une utilisation exclusive. |
abs | Certains écrans tactiles indiquent des coordonnées absolues et ne peuvent être différenciés des pavés tactiles. Dans ce cas, passez abs pour indiquer que le périphérique utilise des événements absolus. |
Clavier
Le gestionnaire de clavier evdev prend en charge les paramètres supplémentaires suivants :
| Paramètre | Description |
|---|---|
/dev/input/... | Spécifie le nom du périphérique d'entrée. S'il n'est pas spécifié, Qt XML recherche un périphérique approprié via libudev ou en parcourant les nœuds disponibles. |
grab | Active la saisie du périphérique d'entrée. |
keymap | Spécifie le nom d'un fichier de clavier personnalisé. |
enable-compose | Active la composition. |
repeat-delay | Définit un délai de répétition des touches personnalisé. |
repeat-rate | Définit un taux de répétition des touches personnalisé. |
Sur les systèmes Linux embarqués dont les sessions de terminal ne sont pas désactivées, le comportement lors de l'appui sur une touche peut être déroutant, car l'événement d'entrée est traité par l'application Qt et le tty. Pour y remédier, les options suivantes sont disponibles :
- Au démarrage de l'application,
EGLFSetLinuxFBtentent de désactiver le clavier du terminal en définissant le mode clavier du tty surK_OFF, ce qui empêche l'envoi de frappes au terminal. Si le comportement standard est requis, définissez la variable d'environnementQT_QPA_ENABLE_TERMINAL_KEYBOARDà1. Notez que cela ne fonctionne que lorsque l'application est lancée à partir d'une console distante, viasshpar exemple, et que l'entrée au clavier du terminal reste activée. - Une autre approche consiste à utiliser le paramètre
grabdu gestionnaire de clavierevdeven passantgrab=1dansQT_QPA_EVDEV_KEYBOARD_PARAMETERS. Cela permet d'essayer d'obtenir une saisie sur le périphérique d'entrée. Si legrabréussit, aucun autre composant du système ne reçoit d'événements de sa part, tant que l'application Qt est en cours d'exécution. Cette approche convient mieux aux applications qui démarrent à distance, car elle ne nécessite pas d'accès au périphérique tty. - Enfin, pour de nombreuses images Linux embarquées spécialisées, il n'est pas utile d'activer les sessions de terminal standard. Pour plus de détails sur la façon de désactiver ces sessions de terminal, reportez-vous à la documentation de votre environnement de construction. Par exemple, lors de la génération d'images à l'aide du projet Yocto, la désactivation de
SYSVINIT_ENABLED_GETTYSa pour conséquence qu'aucun processusgettyne fonctionne. Cela signifie qu'il n'y a aucune entrée sur aucun des terminaux virtuels.
Si le keymap intégré par défaut n'est pas suffisant, vous pouvez en spécifier un autre via le paramètre keymap.
Remarque : comme pour les autres fichiers de configuration de eglfs, ces fichiers keymap hérités sont considérés comme du contenu de confiance entièrement contrôlé et géré par le créateur de l'appareil ou de la plate-forme. Ils ne sont pas censés être exposés aux utilisateurs finaux de l'appareil et ne sont pas destinés à permettre le chargement de fichiers de cartographie des touches fournis par l'utilisateur.
Remarque : les combinaisons de touches spéciales du système, telles que le changement de console (Ctrl+Alt+Fx) ou le zap (Ctrl+Alt+Backspace) ne sont pas prises en charge actuellement et sont ignorées.
Pour générer une keymap personnalisée, utilisez l'utilitaire kmap2qmap, qui se trouve dans le module qttools. Les fichiers sources doivent être au format standard Linux kmap, qui est compris par la commande loadkeys du noyau. Les fichiers qmap peuvent être générés de l'une des manières suivantes :
- Le projet Linux Console Tools (LCT).
- Les keymaps X.org X11 peuvent être convertis au format
kmapà l'aide de l'utilitaireckbcomp. - Les fichiers
kmapétant des fichiers de texte brut, ils peuvent également être créés à la main.
kmap2qmap L'utilitaire est un programme en ligne de commande qui a besoin d'au moins deux fichiers comme paramètres. Le dernier paramètre est le fichier .qmap généré, tandis que tous les autres sont analysés comme des fichiers d'entrée .kmap. Par exemple :
kmap2qmap i386/qwertz/de-latin1-nodeadkeys.kmap include/compose.latin1.inc de-latin1-nodeadkeys.qmap
Remarque : kmap2qmap ne prend pas en charge tous les (pseudo) symboles que le noyau Linux prend en charge. Par conséquent, lorsque vous convertissez une keymap standard, il y aura un certain nombre d'avertissements concernant Show_Registers, Hex_A, et ainsi de suite ; ces messages peuvent être ignorés.
Touche
Bien que cela ne soit pas nécessaire pour les écrans tactiles modernes, certains anciens écrans tactiles à résistance qui ne prennent en charge qu'une seule touche peuvent nécessiter l'utilisation de tslib, au lieu de s'appuyer sur le protocole multi-touch de Linux et les périphériques d'événement.
Pour activer la prise en charge de tslib, définissez la variable d'environnement QT_QPA_EGLFS_TSLIB (pour eglfs) ou QT_QPA_FB_TSLIB (pour linuxfb) sur 1. Pour changer de périphérique, définissez la variable d'environnement TSLIB_TSDEVICE ou transmettez le nom du périphérique sur la ligne de commande. Notez que le gestionnaire d'entrée tslib génère des événements de souris et ne prend en charge qu'un seul toucher, contrairement à evdevtouch qui génère de véritables événements multi-touch QTouchEvent.
Le gestionnaire d'entrée evdev prend en charge les paramètres supplémentaires suivants :
| Paramètre | Description |
|---|---|
/dev/input/... | Spécifie le nom du périphérique d'entrée. S'il n'est pas spécifié, Qt XML recherche un périphérique approprié via libudev ou en parcourant les nœuds disponibles. |
rotate | Sur certains écrans tactiles, les coordonnées doivent être tournées en réglant rotate sur 90, 180 ou 270. |
invertx et inverty | Spécifie les paramètres permettant d'inverser les coordonnées X ou Y dans les événements d'entrée. |
Par exemple, si vous transmettez les valeurs suivantes à QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS avant de lancer les applications, vous disposerez d'un dispositif tactile explicitement spécifié dont les coordonnées seront inversées. Cela est utile lorsque l'orientation de l'écran réel et celle de l'écran tactile ne correspondent pas.
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event5:rotate=180
Tablettes à stylet
Le plugin evdevtablet fournit un support de base pour les tablettes à stylet Wacom et similaires. Il génère uniquement les événements QTabletEvent. Pour l'activer, passez QT_QPA_GENERIC_PLUGINS=evdevtablet dans l'environnement ou, alternativement, passez l'argument -plugin evdevtablet sur la ligne de commande.
Le plugin peut prendre un paramètre de nœud de périphérique, tel que QT_QPA_GENERIC_PLUGINS=evdevtablet:/dev/event1, si la découverte automatique de périphérique de Qt (basée sur libudev ou traversant /dev/input/event*) n'est pas fonctionnelle ou se comporte mal.
Déboguer les périphériques d'entrée
Il est possible d'imprimer certaines informations sur la sortie de débogage en activant la règle de journalisation qt.qpa.input, par exemple en définissant la variable d'environnement QT_LOGGING_RULES à qt.qpa.input=true. Ceci est utile pour détecter quel périphérique est utilisé, ou pour résoudre les problèmes de découverte de périphérique.
Pour une journalisation plus détaillée des sous-systèmes d'entrée (souris, clavier, toucher), activez toutes les catégories de journalisation liées à l'entrée avec :
export QT_LOGGING_RULES="qt.qpa.input.*=true;qt.qpa.events=true"
Utiliser des images de curseur de souris personnalisées
eglfs est livré avec son propre jeu d'images de curseur de souris de taille 32x32. Si celles-ci sont insuffisantes, vous pouvez fournir un atlas de curseurs personnalisé en définissant la variable d'environnement QT_QPA_EGLFS_CURSOR avec le nom d'un fichier JSON. Ce fichier peut également être intégré dans l'application via le système de ressources Qt.
Par exemple, un atlas de curseur intégré avec 8 images de curseur par ligne peut être spécifié comme suit :
{
"image": ":/cursor-atlas.png",
"cursorsPerRow": 8,
"hotSpots": [
[7, 2],
[12, 3],
[12, 12],
...
]
}La largeur et la hauteur des curseurs sont déterminées en fonction de la taille totale de l'image et du paramètre cursorsPerRow. Les atlas doivent également fournir une image pour tous les curseurs pris en charge.
© 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.