web-dev-qa-db-ja.com

bashからwmctrlを実行する

wmctrlを使用して端末から少し遊んだ後、次のステップに進みます。 bashスクリプトからwmctrlを実行します。

完全に単独である場合、bashでwmctrlを実行します。

例:

#!/bin/bash

 SOUDIR=/usr/bin
 echo "$SOUDIR"
 $SOUDIR/wmctrl -i -r 0x040000b3 -e 0,0,0,500,800

しかし、Firefoxの行コードを追加しても機能しません。睡眠時間を追加してもうまくいくと思いますが、私は間違っていました。

これは現在のコードです:

#!/bin/bash

firefox http://www.google.de
sleep 30s
SOUDIR=/usr/bin
echo "$SOUDIR"
$SOUDIR/wmctrl -i -r 0x040000b3 -e 0,0,0,500,800

このbashコードを使用してWebブラウザーのサイズを変更する方法は?

私はbashとubuntuが初めてです。

3
kaka

いくつかの点でOK:

  • /usr/binを追加する必要はありません。シェルはそれ自体でwmctrlを見つけます。これは、移植性を伴う可能性のある非常に特殊なケースです。
  • firefoxコマンドの最後にアンパサンドを追加します。スクリプトは、前のコマンドが終了した場合にのみ続行します。 firefoxは終了しないため、スクリプトはそれを待ちます。
  • Oliが指摘したように、より良い方法はクラス名を使用することです。クラス名を参照してウィンドウの16進IDを見つけるwmctrlで複数のスクリプトを実行しました。

個人的に私はこのようにします:

#!/bin/bash
firefox http://www.google.de &
sleep 3
WM_ID=$(wmctrl -lx | awk '$3~/Navigator.Firefox/ {print $1}')
wmctrl -i -r $WM_ID -e 0,0,0,500,800

ここでfirefoxを開き、バックグラウンドで実行させてから、クラスNavigator.Firefoxに一致するウィンドウの16進IDを抽出します。 wmctrl -lxでは、フィールド3はwm_classで、フィールド1は16進IDです。 awkは、ここでフィールド1を抽出するのに役立ちます。最後に、最後のwmctrlステートメント内でその数値IDを参照します

1

firefoxコマンドは、終了するまでスクリプトの進行をブロックする可能性があります。バックグラウンドにプッシュするだけで、スクリプトが進行します。

firefox http://www.google.de &

接線上の注意として、Firefoxの -no-remote もご覧ください。これにより、DISPLAY内の既存のFirefoxインスタンスとやり取りするコマンドが停止します。

接線について説明している間、firefoxコマンドには いくつかのヘルパー引数 があり、-no-remoteとともに、新しいウィンドウをターゲットにできます。

たとえば、特定のクラス名を設定してから Compizに自動的にサイズ変更を処理させる にすることができます。 _wmctrl -x <WM_CLASS>を使用すると、IDではなくクラスをターゲットにできます。 おそらくウィンドウ名やIDをターゲットにするよりも堅牢です。

0
Oli