Estou tentando inserir as teclas digitadas no daemon de entrada para simular a digitação de um script Bash. Isso é possível? Em caso afirmativo, como posso fazer isso acontecer?
Estou tentando inserir as teclas digitadas no daemon de entrada para simular a digitação de um script Bash. Isso é possível? Em caso afirmativo, como posso fazer isso acontecer?
Respostas:
Se você estiver operando no nível X (como na pergunta de Gilles), use o xdotool da seguinte forma:
xdotool key KEYSTROKE_SPECIFIER
Onde KEYSTROKE_SPECIFIER pode ser algo como "a" ou "F2" ou "control + j"
EDIT: Perdi sua resposta à pergunta de Gilles, desculpe. Deixarei essa resposta aqui como uma solução para o caso X.
xte
opera no mesmo nível.
Use o uinput
driver. Não acho que exista utilidade para isso; você precisará escrever ou adaptar um pouco de código C. Em poucas palavras:
#include <fcntl.h>
#include <ioctl.h>
#include <unistd.h>
#include <linux/input.h>
#include <linux/uinput.h>
/* Set up a fake keyboard device */
fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK); // or /dev/input/uinput
ioctl(fd, UI_SET_EVBIT, EV_KEY);
struct uinput_user_dev uidev = …;
write(fd, &uidev, sizeof(uidev));
ioctl(fd, UI_DEV_CREATE);
/* Send an event */
struct input_event ev = …;
write(fd, &ev, sizeof(ev));
/* Clean up */
ioctl(fd, UI_DEV_DESTROY);
close(fd);
Referências mais completas:
Se você NÃO está trabalhando com programas X com janelas que podem receber chaves, provavelmente está procurando expect
um programa prático e muito configurável para executar outros programas shell interativos, como se um usuário estivesse controlando o terminal. Você pode configurar respostas programáticas para responder a várias saídas com entradas diferentes.
Eu escrevi algum código Python que faz isso. Você pode encontrá-lo no meu projeto de código aberto.
http://code.google.com/p/pycopia/source/browse/trunk/core/pycopia/OS/Linux/event.py
Se você executar esse módulo como um script como root, poderá ver uma demonstração em ação.
Essa funcionalidade básica foi estendida para outro projeto, o powerdroid, que fornece uma implementação mais concreta para um sistema incorporado (Android).
http://code.google.com/p/powerdroid/source/browse/trunk/src/droid/devices.py