शेल स्क्रिप्ट के माध्यम से कीस्ट्रोक्स इंजेक्ट कैसे करें?


27

मैं इनपुट डेमॉन में कीस्ट्रोक्स इंजेक्ट करने की कोशिश कर रहा हूं ताकि बैश स्क्रिप्ट से टाइपिंग अनुकरण कर सके। क्या यह संभव है, और यदि ऐसा है, तो मैं इसे कैसे कर सकता हूं?


क्या आप एक टर्मिनल में एक्स स्तर पर, कर्नेल स्तर पर इनपुट का अनुकरण करना चाहते हैं (यदि हां, तो OS पर क्या है)?
गिल्स एसओ- बुराई को रोकें '

कर्नेल स्तर पर, मैं इसे अनिवार्य रूप से प्रकट करना चाहूंगा जैसे कि मैं एक वास्तविक कीबोर्ड पर वास्तविक कुंजी मारता हूं।
नातुल्ली काय

@TKKocheran: तो, AIX के तहत? FreeBSD? लिनक्स? OSX? … उत्तर प्रत्येक संस्करण पर पूरी तरह से अलग होने की संभावना है।
गिल्स एसओ- बुराई को रोकें '

1
आपको इसके लिए क्या चाहिए?
Starblue

2
शायद मैं एक स्क्रिप्ट लिखना चाहूंगा जो यादृच्छिक अंतराल पर मुख्य रूप से कुंजीपट सम्मिलित करता है।
नातुल्ली काय

जवाबों:


23

यदि आप एक्स स्तर पर काम कर रहे हैं (गाइल्स के प्रश्न के अनुसार), तो xdotool का उपयोग करें जैसे:

xdotool key KEYSTROKE_SPECIFIER

जहां KEYSTROKE_SPECIFIER "a" या "F2" या "कंट्रोल + जे" जैसा कुछ हो सकता है

संपादित करें: मुझे खेद है कि गिल्स के सवाल पर आपकी प्रतिक्रिया याद आई। मैं इस प्रतिक्रिया को एक्स-केस के समाधान के रूप में यहाँ छोड़ दूँगा।


3
मुझे लगता है कि xteएक ही स्तर पर चल रही है।
कैस्केबेल

24

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);

अधिक संपूर्ण संदर्भ:


Einfochips.com का लिंक टूट गया था। मैंने इसे आर्काइव.ओआरजी से स्नैपशॉट के साथ बदल दिया।
फुनेहे

क्या आपको लगता है कि यह इस प्रश्न को हल करने में मदद कर सकता है? unix.stackexchange.com/questions/156985/… , मैंने सोचा, जब मैं एक कुंजी दबाता हूं, तो यह प्रोग्राम एक और कुंजी भेजेगा जो समस्याग्रस्त अनुप्रयोग वास्तव में पहचानता है (भले ही एक ही समय में)?
कुंभ पावर

माउस के काम करने और उसके चारों ओर घूमने के लिए थिएमोंगे का नमूना कोड यह पता नहीं लगा सकता है कि इससे कीस्ट्रोक्स कैसे बनाया जा सकता है, भले ही यह माना जाता है कि यह सिखाता है।
सेस्टरियन

@Cestarian यह स्टैक ओवरफ्लो के लिए एक प्रश्न जैसा लगता है । अपना कोड पोस्ट करें, बताएं कि आपको क्या अपेक्षा थी और आप इसके बजाय क्या देखते हैं, और कोई प्रासंगिक त्रुटि संदेश, लॉग प्रविष्टियाँ आदि प्रदान करते हैं
गाइल्स का SO- बुराई होना बंद करें '

@ अच्छी तरह से मुझे अच्छा लगेगा, लेकिन यह कहता है कि मैं अपनी प्रश्न सीमा पर पहुँच गया हूँ ... 2 प्रश्नों पर बहुत अधिक डाउनवोट प्राप्त करने के लिए मैंने कुछ समय पहले पूछा था; और शायद कुछ अधिक पुराने प्रश्नों पर मैंने हटा दिया। नरक, मुझे यह भी पता नहीं है कि मुझे यहां ढेर सारे डाउनवोट क्यों मिले हैं stackoverflow.com/questions/20619023/… (हालांकि एक बहुत अच्छा जवाब मिला), क्या यह इसलिए था क्योंकि मैंने जो त्रुटि प्राप्त की थी, उसे पोस्ट नहीं किया था? किसी भी तरह, विषय से दूर। मूल रूप से मैं, लेकिन नहीं कर सकता। :(
Cestarian

9

यदि आप X प्रोग्राम्स के साथ काम नहीं कर रहे हैं, जिसमें कुंजियों को भेजा जा सकता है, तो आप संभवतः expectअन्य इंटरैक्टिव शेल प्रोग्राम चलाने के लिए एक आसान और बहुत ही विन्यास योग्य प्रोग्राम की तलाश कर रहे हैं जैसे कि कोई उपयोगकर्ता टर्मिनल को नियंत्रित कर रहा था। आप विभिन्न इनपुट के साथ विभिन्न आउटपुट पर प्रतिक्रिया करने के लिए प्रोग्रामेटिक प्रतिक्रियाओं को सेटअप कर सकते हैं।


7

मैंने कुछ पायथन कोड लिखे जो ऐसा करता है। आप इसे मेरे ओपन सोर्स प्रोजेक्ट में पा सकते हैं।

http://code.google.com/p/pycopia/source/browse/trunk/core/pycopia/OS/Linux/event.py

यदि आप उस मॉड्यूल को स्क्रिप्ट के रूप में रूट करते हैं, तो आप कार्रवाई में एक डेमो देख सकते हैं।

यह मूल कार्यक्षमता किसी अन्य प्रोजेक्ट, पॉवरड्रोइड के लिए विस्तारित की गई थी, जो कि एम्बेडेड सिस्टम (Android) के लिए अधिक ठोस कार्यान्वयन प्रदान करता है।

http://code.google.com/p/powerdroid/source/browse/trunk/src/droid/devices.py

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.