アプリケーション起動時にX11ウィンドウクラスを設定する方法

アプリケーション起動時にX11ウィンドウクラスを設定する方法

独自の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 '.*'これを行う必要があります。xdotoolxdotool 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

関連情報