Entradas en un dispositivo Linux embebido
En su dispositivo Linux embebido, cuando no hay un sistema de ventanas presente, el ratón, el teclado y la entrada táctil se leen directamente a través de evdev o utilizando bibliotecas de ayuda como libinput o tslib. Sin embargo, este comportamiento requiere que los nodos de dispositivo /dev/input/event* sean legibles por el usuario. eglfs y linuxfb tienen todo el código de manejo de entrada compilado.
Utilizar libinput
libinput es una biblioteca para manejar dispositivos de entrada que ofrece una alternativa al propio soporte de entrada evdev de Qt. Para habilitar el uso de libinput, cuando configures y compiles Qt, asegúrate de que los archivos de desarrollo para libudev y libinput están disponibles. Si necesitas soporte de teclado, entonces xkbcommon también es necesario. Con eglfs y linuxfb, no son necesarias más acciones ya que estos plugins utilizan libinput por defecto. Si el soporte de libinput no está disponible o la variable de entorno QT_QPA_EGLFS_NO_LIBINPUT está activada, entonces se utilizan los propios manejadores de Qt evdev en su lugar.
Las siguientes variables de entorno están disponibles cuando se reciben eventos de entrada a través de libinput:
| Variable | Descripción |
|---|---|
QT_QPA_LIBINPUT_TOUCH_MATRIX | Especifica las dos primeras filas de la matriz de transformación 3x3 a aplicar. Se espera que los valores estén separados por espacios. Consulte la documentación de libinput para más detalles. |
Entrada en eglfs y linuxfb sin libinput
Parámetros como el nombre del nodo del dispositivo pueden establecerse en las variables de entorno QT_QPA_EVDEV_MOUSE_PARAMETERS, QT_QPA_EVDEV_KEYBOARD_PARAMETERS y QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS; separe sus entradas con dos puntos. Estos parámetros son una alternativa a pasar los ajustes en el argumento de línea de comandos -plugin, y con algunos backends son esenciales. Pero eglfs y linuxfb utilizan manejadores de entrada incorporados, por lo que no hay un argumento -plugin separado en uso.
Además, los manejadores de entrada incorporados pueden desactivarse configurando QT_QPA_EGLFS_DISABLE_INPUT (para eglfs) o QT_QPA_FB_DISABLE_INPUT (para linuxfb) a 1.
Ratón
El cursor del ratón aparece siempre que QT_QPA_EGLFS_HIDECURSOR (para eglfs) o QT_QPA_FB_HIDECURSOR (para linuxfb) no estén configurados y el descubrimiento de dispositivos basado en libudev de Qt informe de que hay al menos un ratón disponible. Cuando el soporte libudev no está presente, el cursor del ratón se muestra siempre; a menos que se desactive explícitamente a través de la variable de entorno.
Si Qt se ha configurado con soporte para libudev, se puede conectar o desconectar un dispositivo de entrada mientras la aplicación se está ejecutando (conexión en caliente). Entonces las cabeceras de desarrollo de libudev están presentes en el sysroot en el momento de la configuración.
El manejador de ratón evdev soporta los siguientes parámetros extra:
| Parámetro | Descripción |
|---|---|
/dev/input/... | Especifica el nombre del dispositivo de entrada. Si no se especifica, Qt busca un dispositivo adecuado a través de libudev o recorriendo los nodos disponibles. |
nocompress | Por defecto, los eventos de entrada que no conducen a cambiar la posición en comparación con el último evento de ratón Qt se comprimen. Sólo se envía un nuevo evento de ratón Qt tras un cambio en la posición o en el estado del botón. Para desactivar este comportamiento, establezca el parámetro nocompress. |
dejitter | Especifica un límite de jitter; desactivado por defecto. |
grab | Cuando se establece en 1, Qt toma el dispositivo para uso exclusivo. |
abs | Algunas pantallas táctiles reportan coordenadas absolutas y no pueden diferenciarse de los touch pads. En este caso, pasa abs para indicar que el dispositivo está usando eventos absolutos. |
Teclado
El manejador de teclado evdev soporta los siguientes parámetros extra:
| Parámetro | Descripción |
|---|---|
/dev/input/... | Especifica el nombre del dispositivo de entrada. Si no se especifica, Qt busca un dispositivo adecuado a través de libudev o recorriendo los nodos disponibles. |
grab | Activa la captura del dispositivo de entrada. |
keymap | Especifica el nombre de un archivo de asignación de teclado personalizado. |
enable-compose | Activa la composición. |
repeat-delay | Establece un retardo de repetición de teclas personalizado. |
repeat-rate | Establece una frecuencia de repetición de teclas personalizada. |
En sistemas Embedded Linux que no tienen sus sesiones de terminal deshabilitadas, el comportamiento al pulsar una tecla puede ser confuso, ya que el evento de entrada es procesado por la aplicación Qt y el tty. Para superar esto, las siguientes opciones están disponibles:
- Al iniciar la aplicación,
EGLFSyLinuxFBintentan deshabilitar el teclado del terminal estableciendo el modo de teclado del tty enK_OFF. Esto evita que se envíen pulsaciones de teclas al terminal. Si se requiere el comportamiento estándar, establezca la variable de entornoQT_QPA_ENABLE_TERMINAL_KEYBOARDen1. Tenga en cuenta que esto sólo funciona cuando la aplicación se inicia desde una consola remota, a través desshpor ejemplo, y la entrada del teclado del terminal permanece habilitada. - Un enfoque alternativo es utilizar el parámetro
grabdel controlador de tecladoevdevpasandograb=1enQT_QPA_EVDEV_KEYBOARD_PARAMETERS. El resultado es que se intenta obtener una captura en el dispositivo de entrada. Sigrabtiene éxito, ningún otro componente del sistema recibe eventos de él, mientras la aplicación Qt esté en ejecución. Este enfoque es más adecuado para aplicaciones que se inician remotamente, ya que no necesita acceso al dispositivo tty. - Finalmente, para muchas imágenes especializadas de Embedded Linux no tiene sentido tener las sesiones de terminal estándar habilitadas en primer lugar. Para más detalles sobre cómo deshabilitar estas sesiones de terminal, consulte la Documentación de su entorno de compilación. Por ejemplo, cuando se generan imágenes utilizando el Proyecto Yocto, al deshabilitar
SYSVINIT_ENABLED_GETTYSno se ejecuta el procesogetty. Esto significa que no hay entrada en ninguna de las terminales virtuales.
Si el mapa de teclado incorporado por defecto no es suficiente, puedes especificar uno diferente a través del parámetro keymap.
Nota: Al igual que con otros archivos de configuración para eglfs, estos archivos keymap heredados se consideran contenido de confianza totalmente controlado y gestionado por el creador del dispositivo o plataforma. No se espera que estén expuestos a los usuarios finales del dispositivo, y no están pensados para permitir la carga de archivos keymap proporcionados por el usuario.
Nota: Las combinaciones de teclas especiales del sistema, como el cambio de consola (Ctrl+Alt+Fx) o zap (Ctrl+Alt+Backspace) no se admiten actualmente y se ignoran.
Para generar un mapa de teclado personalizado, utilice la utilidad kmap2qmap, que se encuentra en el módulo qttools. Los archivos fuente tienen que estar en el formato estándar de Linux kmap, el cual es entendido por el comando loadkeys del kernel. Los archivos qmap pueden ser generados de una de las siguientes maneras:
- El proyecto Linux Console Tools (LCT).
- Los mapas de teclado X.org X11 pueden convertirse al formato
kmapcon la utilidadckbcomp. - Como los archivos
kmapson archivos de texto plano, también se pueden crear a mano.
kmap2qmap es un programa de línea de comandos, que necesita al menos 2 archivos como parámetros. El último parámetro es el archivo .qmap generado, mientras que todos los demás se analizan como archivos de entrada .kmap. Por ejemplo:
kmap2qmap i386/qwertz/de-latin1-nodeadkeys.kmap include/compose.latin1.inc de-latin1-nodeadkeys.qmap
Nota: kmap2qmap no soporta todos los (pseudo) símbolos que soporta el kernel de Linux. En consecuencia, cuando convierta un mapa de teclado estándar, habrá una serie de advertencias relativas a Show_Registers, Hex_A, etc.; estos mensajes pueden ser ignorados.
Toque
Aunque no es necesario para las pantallas táctiles modernas, algunas pantallas táctiles de resistencia antigua que sólo soportan single-touch pueden requerir que vuelvas a utilizar tslib, en lugar de confiar en el protocolo multitáctil de Linux y los dispositivos de eventos.
Para habilitar la compatibilidad con tslib, establezca la variable de entorno QT_QPA_EGLFS_TSLIB (para eglfs) o QT_QPA_FB_TSLIB (para linuxfb) en 1. Para cambiar el dispositivo, establezca la variable de entorno TSLIB_TSDEVICE o pase el nombre del dispositivo en la línea de comandos. Tenga en cuenta que el controlador de entrada tslib genera eventos de ratón y sólo admite toques simples, a diferencia de evdevtouch, que también genera eventos multitáctiles QTouchEvent.
El controlador táctil evdev admite los siguientes parámetros adicionales:
| Parámetro | Descripción |
|---|---|
/dev/input/... | Especifica el nombre del dispositivo de entrada. Si no se especifica, Qt busca un dispositivo adecuado a través de libudev o recorriendo los nodos disponibles. |
rotate | En algunas pantallas táctiles las coordenadas deben rotarse configurando rotate a 90, 180, o 270. |
invertx y inverty | Especifica los parámetros para invertir las coordenadas X o Y en los eventos de entrada. |
Por ejemplo, si pasas los siguientes valores a QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS antes de lanzar las aplicaciones, tendrás un dispositivo táctil especificado explícitamente con las coordenadas invertidas. Esto es útil cuando la orientación de la pantalla real y la pantalla táctil no coinciden.
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event5:rotate=180
Tabletas con lápiz
El plugin evdevtablet proporciona soporte básico para Wacom y tabletas similares basadas en lápiz. Sólo genera eventos QTabletEvent. Para activarlo, introduzca QT_QPA_GENERIC_PLUGINS=evdevtablet en el entorno o, alternativamente, introduzca el argumento -plugin evdevtablet en la línea de comandos.
El complemento puede tomar un parámetro de nodo de dispositivo, como QT_QPA_GENERIC_PLUGINS=evdevtablet:/dev/event1, si el descubrimiento automático de dispositivos de Qt (basado en libudev o recorriendo /dev/input/event*) no funciona o se comporta mal.
Depurar dispositivos de entrada
Es posible imprimir alguna información en la salida de depuración activando la regla de registro qt.qpa.input, por ejemplo estableciendo la variable de entorno QT_LOGGING_RULES en qt.qpa.input=true. Esto es útil para detectar qué dispositivo se está utilizando, o para solucionar problemas de descubrimiento de dispositivos.
Para un registro más detallado de los subsistemas de entrada (ratón, teclado, táctil), active todas las categorías de registro relacionadas con la entrada con:
export QT_LOGGING_RULES="qt.qpa.input.*=true;qt.qpa.events=true"
Usar imágenes de cursor de ratón personalizadas
eglfs viene con su propio conjunto de imágenes de cursor de ratón de 32x32. Si éstas son insuficientes, puede proporcionar un atlas de cursor personalizado estableciendo la variable de entorno QT_QPA_EGLFS_CURSOR con el nombre de un archivo JSON. Este archivo también se puede incrustar en la aplicación a través del Sistema de Recursos Qt.
Por ejemplo, un atlas de cursor incrustado con 8 imágenes de cursor por fila puede especificarse como sigue:
{
"image": ":/cursor-atlas.png",
"cursorsPerRow": 8,
"hotSpots": [
[7, 2],
[12, 3],
[12, 12],
...
]
}Tenga en cuenta que se espera que las imágenes estén apretadas en el atlas; la anchura y la altura de los cursores se determinan en función del tamaño total de la imagen y de la configuración de cursorsPerRow. Los atlas también deben proporcionar una imagen para todos los cursores compatibles.
© 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.