Saya mencoba menyuntikkan penekanan tombol ke daemon input untuk mensimulasikan pengetikan dari skrip Bash. Apakah ini mungkin, dan jika demikian, bagaimana saya bisa mewujudkannya?
Saya mencoba menyuntikkan penekanan tombol ke daemon input untuk mensimulasikan pengetikan dari skrip Bash. Apakah ini mungkin, dan jika demikian, bagaimana saya bisa mewujudkannya?
Jawaban:
Jika Anda beroperasi di tingkat X (seperti dalam pertanyaan Gilles), maka gunakan xdotool seperti:
xdotool key KEYSTROKE_SPECIFIER
Di mana KEYSTROKE_SPECIFIER dapat berupa sesuatu seperti "a" atau "F2" atau "control + j"
EDIT: Saya melewatkan jawaban Anda untuk pertanyaan Gilles, maaf. Saya akan meninggalkan respons ini di sini sebagai solusi untuk kasus-X.
xte
beroperasi pada level yang sama.
Gunakan uinput
drivernya. Saya tidak berpikir ada kegunaan untuk itu; Anda harus menulis atau mengadaptasi sedikit kode C. Pendeknya:
#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);
Referensi yang lebih lengkap:
Jika Anda TIDAK bekerja dengan program X dengan windows yang dapat mengirim kunci, Anda mungkin mencari expect
, program yang praktis dan sangat dapat dikonfigurasi untuk menjalankan program shell interaktif lainnya seolah-olah pengguna mengendalikan terminal. Anda dapat mengatur respons terprogram untuk merespons berbagai output dengan input berbeda.
Saya menulis beberapa kode Python yang melakukan itu. Anda dapat menemukannya di proyek open source saya.
http://code.google.com/p/pycopia/source/browse/trunk/core/pycopia/OS/Linux/event.py
Jika Anda menjalankan modul itu sebagai skrip sebagai root, Anda dapat melihat demo dalam aksi.
Fungsionalitas dasar ini diperluas untuk proyek lain, powerdroid, yang menyediakan implementasi lebih konkret untuk sistem tertanam (Android).
http://code.google.com/p/powerdroid/source/browse/trunk/src/droid/devices.py