2

bashスクリプトに次のようなものがある場合:

audacity &
pid=$!

wmctrl -r "Audacity" -e 0,0,0,800,600

audacity &... プロセスの起動 ( ) は、Audacity ウィンドウが完全に表示される (および によって制御できる) 時点よりもはるかに早く終了/戻るため、通常は失敗しますwmctrl。それ以外の場合は数秒かかる場合があります。

スクリプトに進む前に、GUI アプリケーションが完全に起動する (つまり、ウィンドウが完全にレンダリングされる) のを「同期」または「待機」する簡単な方法はありますか? (私が見つけた方法があり、それを回答として投稿していますが、より簡単でコンパクトな方法がある場合はさまよっていました

4

1 に答える 1

2

編集:これはウィンドウがいつ表示されるかを検出します。ただし、その中のすべてのメニュー/ウィジェットが配置/レイアウトで終了したことを検出しません

では、まず次のスクリプトを実行します。

audacity &
pid=$!

while [ "1" ] ; do
  xwininfo -name 'Audacity'
  sleep 0.1
done

...完全なログを取得するには、次のように実行する必要があります。

bash testscript.sh 2>&1 | tee testscript.log

xwininfo...そして、いわば「遷移」からのダンプがあるポイントを見ることができます:

xwininfo: Window id: 0x3a000b5 (has no name)

  Absolute upper-left X:  0
  Absolute upper-left Y:  0
  Relative upper-left X:  0
  Relative upper-left Y:  0
  Width: 200
  Height: 200
  Depth: 24
  Visual: 0x21
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x20 (installed)
  Bit Gravity State: NorthWestGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsUnMapped
  Override Redirect State: no
  Corners:  +0+0  -824+0  -824-400  +0-400
  -geometry 200x200+0+0

xwininfo: Window id: 0x4c00587 "Audacity"

  Absolute upper-left X:  50
  Absolute upper-left Y:  59
  Relative upper-left X:  0
  Relative upper-left Y:  18
  Width: 830
  Height: 540
  Depth: 24
  Visual: 0x21
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x20 (installed)
  Bit Gravity State: NorthWestGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: no
  Corners:  +50+59  -144+59  -144-1  +50-1
  -geometry 830x540+50-1

したがって、基本的grepxwininfo「名前がありません」を含まない出力、または「Map State: IsViewable」を含む出力を作成できます...

だから、私はついにこれを試してみました-そしてそれはうまくいくようです:

audacity &
pid=$!

WINREP=""
while [[ ! "`echo $WINREP | grep -l 'Map State: IsViewable'`" ]] ; do
  WINREP=$(xwininfo -name 'Audacity')
  #echo $WINREP
  sleep 0.1
done

echo Exited

# must use -F here for case-insensitive, to ensure proper window targetting
wmctrl -v -F -r "Audacity" -e 0,0,0,800,600
于 2013-10-18T04:03:23.263 に答える