ฉันพยายามกดแป้นพิมพ์ลงในภูตอินพุตเพื่อจำลองการพิมพ์จากสคริปต์ Bash เป็นไปได้และถ้าเป็นเช่นนั้นฉันจะทำให้มันเกิดขึ้นได้อย่างไร
ฉันพยายามกดแป้นพิมพ์ลงในภูตอินพุตเพื่อจำลองการพิมพ์จากสคริปต์ Bash เป็นไปได้และถ้าเป็นเช่นนั้นฉันจะทำให้มันเกิดขึ้นได้อย่างไร
คำตอบ:
หากคุณทำงานที่ระดับ X (เช่นในคำถามของ Gilles) ให้ใช้xdotoolดังนี้:
xdotool key KEYSTROKE_SPECIFIER
โดยที่ KEYSTROKE_SPECIFIER สามารถเป็นได้เช่น "a" หรือ "F2" หรือ "control + j"
แก้ไข: ฉันไม่ได้รับการตอบคำถาม Gilles ของคุณขอโทษ ฉันจะปล่อยให้การตอบสนองนี้ที่นี่เป็นทางออกสำหรับกรณี X-
xte
ทำงานในระดับเดียวกัน
ใช้uinput
ไดรเวอร์ ฉันไม่คิดว่าจะมีประโยชน์สำหรับสิ่งนั้น คุณจะต้องเขียนหรือปรับรหัส C เล็กน้อย โดยสังเขป:
#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);
การอ้างอิงที่สมบูรณ์เพิ่มเติม:
หากคุณไม่ได้ทำงานกับโปรแกรม X ที่มีหน้าต่างที่สามารถส่งคีย์ได้คุณอาจกำลังมองหาexpect
โปรแกรมที่มีประโยชน์และกำหนดค่าได้มากสำหรับการเรียกใช้โปรแกรมเชลล์เชิงโต้ตอบอื่น ๆ ราวกับว่าผู้ใช้ควบคุมเทอร์มินัล คุณสามารถตั้งค่าการตอบสนองเชิงโปรแกรมเพื่อตอบสนองเอาต์พุตต่างๆด้วยอินพุตที่แตกต่างกัน
ฉันเขียนรหัส Python ที่ทำเช่นนั้น คุณสามารถค้นหาได้ในโครงการโอเพนซอร์สของฉัน
http://code.google.com/p/pycopia/source/browse/trunk/core/pycopia/OS/Linux/event.py
หากคุณเรียกใช้โมดูลนั้นเป็นสคริปต์ในฐานะรูทคุณสามารถดูตัวอย่างการทำงานได้
ฟังก์ชั่นพื้นฐานนี้ถูกขยายออกไปสำหรับโครงการอื่นคือ powerdroid ที่ให้การใช้งานที่เป็นรูปธรรมมากขึ้นสำหรับระบบสมองกลฝังตัว (Android)
http://code.google.com/p/powerdroid/source/browse/trunk/src/droid/devices.py