シェルスクリプトを介してキーストロークを挿入する方法は?

シェルスクリプトを介してキーストロークを挿入する方法は?

Bashスクリプトの入力をシミュレートするために、入力デーモンにキーストロークを挿入しようとしています。可能ですか?可能であれば、どのように実装できますか?

答え1

ドライバを使用してください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);

より完全な参考資料:

答え2

Gillesの質問のようにレベルXで作業している場合は、次のようにします。xdoツールこのように:

xdotool key KEYSTROKE_SPECIFIER

ここで KEYSTROKE_SPECIFIER は「a」、「F2」、または「control+j」です。

編集:申し訳ありません。 Gilesの質問に答えを逃しました。 Xケースの解決策として、この答えをここに残しておきます。

答え3

キーを送信できるウィンドウでXプログラムを使用していない場合は、次のものを参照できます。expect、ユーザー制御端末など、他の対話型シェルプログラムを実行するための便利で非常に構成可能なプログラムです。さまざまな入力とさまざまな出力に応答するようにプログラムによる応答を設定できます。

答え4

これを達成するためにPythonコードを書いた。私のオープンソースプロジェクトで見つけることができます。

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

rootとしてスクリプトでモジュールを実行すると、実行中のデモを見ることができます。

この基本機能は、組み込みシステム(Android)のより具体的な実装を提供する別のプロジェクトであるパワードロイド用に拡張されました。

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

関連情報