web-dev-qa-db-ja.com

X11転送アプリをプログラムで制御するにはどうすればよいですか?

サーバー上でリモートXアプリケーションを実行するようにX11転送を設定したいのですが、X11クライアントはUXの相互作用を処理できます。

ただし、X11クライアントを構成するか、プログラムで(スクリプトから)ユーザーとの対話を実際に行うように偽造したいと思います。

たとえば、マウスのクリックやキーボードの操作が必要なアプリ(インストーラーなど)を実行したいので、スクリプトからアプリが終了するまで、これらのクリックやキーボードのキー押下信号をプログラムで送信できます。

それは何か可能ですか?これをどのように達成できるか、またはどこから始めればよいですか?または、X11プロトコルを再利用/ハイジャックして自分の非ユーザーインタラクションを注入するにはどうすればよいですか?

4
kenorb

これまでのところ、マウスとキーボードからの入力を非常に簡単に偽造できるツールを見つけました xdotool

単純なキーボード操作の例:

xdotool key a
xdotool key Down
xdotool key Tab
xdotool key "Return"
xdotool key "Control_L+t"
xdotool key Alt+1
xdotool key ctrl+v
xdotool key Super
xdotool key KP_Enter
xdotool key ctrl+Page_Up
xdotool key ctrl+U005C
xdotool key ctrl+shift+e
xdotool key --delay 1000  shift+minus # for underscore
xdotool key --clearmodifiers shift+Insert
xdotool key --clearmodifiers --window 0x2600006 alt+1 0 9 8 7 6 5 4 3

マウス操作を使用したスクリプトの例:

WINDOWID=$(xdotool selectwindow)

xdotool set_window --overrideredirect 1 $WINDOWID windowunmap $WINDOWID windowmap $WINDOWID
xdotool windowsize $WINDOWID 10 100%

# Set behaviors
xdotool behave $WINDOWID mouse-enter windowfocus windowsize --usehints 80 100% &
xdotool behave $WINDOWID mouse-leave windowsize 4 100% &

別の例: F5キーストロークを最初のChromeウィンドウ に送信する方法。

その他のスクリプト例は、 GitHub または 公式ページ で見つけてください。

Sudo apt-get install xdotoolのようなaptリポジトリからインストールするか、 sources からコンパイルできます。


ワイン

X11アプリがWineで実行されている場合は、 Winetricks を使用することもできます。 AutoHotkeyツールを使用してアプリを制御する方法のガイダンスについては、 ソースファイル (シェルスクリプトです)を確認してください。

より高度な方法には、winedbgデバッガーの使用とプロセスへのアタッチが含まれます。

$ winedbg
Wine-dbg>info process
 00000008 3        'terminal.exe'
Wine-dbg>attach 8
0xf7709c0e __kernel_vsyscall+0xe in [vdso].so: int  $0x80

次に、デバッガーを使用して直接対話できます(ヘルプについては、man winedbgを参照してください)。

3
kenorb