web-dev-qa-db-ja.com

xvfbを使用してXプログラムを自動化する

私はもともとこの質問を投稿しました ここ ですが、考え直して、ここがこれに適した場所であると判断しました。

悲しいことに、カメラドライバーをバンドルしたこの独自のプログラムを使用する必要があります。いくつかのボタンをクリックするなど、特定のアクションを実行したいと思います。そして、CLIはありません。

では、これを自動化する最も簡単な方法は何ですか? xvfbを使用して偽のX環境でプログラムを開くことを考えましたが、入力操作を実行するにはどうすればよいですか? (x、y)のクリックピクセルかもしれませんが、ボタンやメニュー項目を参照できればさらに便利です。

もっと簡単な方法があれば教えてください! xvfbが正しい方法かどうかはわかりません。自分がやろうとしていることの実際の名前すら知らないので、検索は非常に難しいです...

5
Luan Nico

xdotool を使用できます。これにより、キーボード/マウス入力、ウィンドウ管理などを偽造できます。

キャプチャ結果の画像を表示するには、example.shxcalc "4*9="スクリプトを参照してください。

#!/usr/bin/env bash

save="$DISPLAY"                          # save original X display number
export DISPLAY=:44                       # set random choosen display for xvfb
case "$1" in                             #         and x-programs called below
  start) Xvfb $DISPLAY &   ;;            # starting xvfb server on :44
   calc) xcalc &           ;;            # run x-calculator
    xdo) xdotool mousemove 1 1 click 1   # focus with click on x:y=1:1
         xdotool key 4 asterisk 9        # calc 4*9
         xdotool key equal ;;            #         =
   show) #capture root window ('36' result image) and display it to saved Xno
         xwd -root | xwud -display $save &                                   ;;
   stop) ps auxww | grep "Xvfb $DISPLAY" | awk '{print $2}' | xargs kill     ;;
    all) DISPLAY=$save; $0 start; $0 calc; sleep 1; $0 xdo; $0 show; $0 stop ;;
esac

注:個々のオプションはテストに使用することも、すべて./example.sh allで実行することもできます。

8
Asain Kujovic