独自のx11ウィンドウクラスを設定しないアプリケーションがあります。コマンドラインでこれを簡単に行う方法はありますか?これを行うためにx11コマンドを検索しましたが、何も見つかりませんでした。
例:
some_command --window-class 'NewWindowClass' --run MY_PROGRAM
答え1
アプリケーションは、ウィンドウの作成時にクラスを設定します。
これは、最終的にアプリケーションがクラスを設定できるかどうか、そうであれば使用するコマンドラインオプションを決定することを意味します。普遍的な選択はありません。
特に、他のアプリケーションではこれを行うことはできません(ライブラリをプリロードしてXCreateWindow呼び出しなどを傍受するなど、トリッキーな操作を開始しない限り)。
ただし、アプリケーションがXtコマンドライン解析を使用している場合、このオプションは-class
通常機能します(アプリケーションで無効にしない限り)。
答え2
私にもこの機能が必要です。どうですか?
xclock &
PID=$!
xdotool search --sync --all --pid ${PID} --name '.*' set_window --classname "A" set_window --class "B"
仕組みは次のとおりです。
MY_PROGRAM
バックグラウンドでXアプリケーションを起動する(あなたの場合)- 実行されたアプリケーションのプロセスID(PID)を変数に保存します。
- PIDでXウィンドウIDを見つけるために使用されます
xdotool
(このオプションを使用するには、ウィンドウが最初に表示されるのを待ちますsync
)。 xdotool
ウィンドウclassname
の合計を設定するために使用されます。class
注:PIDのみに基づく検索などの短い呼び出しはサポートされていないようですので、xdotool search --sync --all --pid ${PID} --name '.*'
これを行う必要があります。xdotool
xdotool search --sync --pid ${PID}
また、文書に記載されているとおりに機能しない場合がありますxdotool
。
これは、ウィンドウにこのメタデータを設定していない一部のXアプリケーションでは機能しない可能性があります。
XウィンドウIDを直接取得するための安定した方法がある場合は、次のようにします(0x0620000a
自分のXウィンドウIDに変更)。
xdotool set_window --classname "A" 0x0620000a set_window --class "B" 0x0620000a
動作していることを確認するには:
wmctrl -l -x -p | grep xclock
以下を出力する必要があります。
0x0640000a 0 993355 A.B pc xclock