Estoy usando una Raspberry Pi en combinación con Chromium (modo quiosco) para mostrar algunas estadísticas. El Pi no tiene un teclado conectado, así que busqué una solución para enviar pulsaciones de teclas desde la terminal al proceso Chromium (pestaña). La entrada normal funciona, pero ¿cómo envío algo como F5
? (una tecla especial:actualización del navegador) a través de esta solución?
# pidof chromium
20809 20790 20788 20786 20783
# echo 'some text' > /proc/20809/fd/0
Respuesta aceptada:
Los programas GUI no leen de su entrada estándar, obtienen su entrada del servidor X. Hay herramientas para inyectar una pulsación de tecla en una ventana. xdotool es bastante común y conveniente.
Deberá encontrar el ID de la ventana a la que desea enviar la pulsación de tecla. Puedes hacerlo con xdotool. xdotool search --class Chrome
devuelve la lista de ID de ventana de todas las ventanas de Chrome. Si esto devuelve más de uno, debe elegir el que desee. Puedes usar xdotool search --name
para hacer coincidir el título en lugar de la clase. También puede analizar la salida de wmctrl y extraer la ID de ventana deseada.
Una vez que haya encontrado la ID de ventana correcta, puede llamar a xdotool
para inyectar una pulsación de tecla. Desafortunadamente, muchas aplicaciones rechazan los eventos sintéticos, es decir, las pulsaciones de teclas y los eventos del mouse enviados por otra aplicación. Este es el caso de las versiones actuales de Chrome. Es posible inyectar una pulsación de tecla desde otra aplicación mediante un mecanismo diferente, pero eso requiere que la ventana esté enfocada. Puede hacer todo eso con xdotool, pero hará que el foco se desplace rápidamente a la ventana de Chrome y viceversa. El siguiente fragmento envía F5 a la primera ventana de Chrome (en un orden algo arbitrario).
xdotool search --class Chrome windowactivate --sync %1 key F5 windowactivate $(xdotool getactivewindow)
O con versiones anteriores de xdotool:
xdotool windowactivate $(xdotool search --class Chrome) &&
xdotool key F5 &&
xdotool windowactivate $(xdotool getactivewindow)
Recuerde que esto envía F5 a esa ventana y depende del programa decidir qué hacer con ella. En Chrome, esto vuelve a cargar la pestaña actual.