wmctrlを利用したウィンドウのリサイズ

はじめに

とあるドキュメントの作成の都合上、Linuxでウィンドウのスクリーンショットを取る必要に迫られた。 ドキュメントのレイアウトの崩れを防ぐために、ウィンドウのサイズは統一しておきたかった。 そのためウィンドウを思い通りにリサイズできるコマンドを探してみた。 どうもwmctrlを使えばよいらしい。

使い方

まずウィンドウのリストを表示する。

$ wmctrl -l
0x0140000a  0 devpc デスクトップ
0x02800001  0 devpc Google - Google Chrome
0x02200003  0 devpc Mozilla Firefox
0x03a00006  0 devpc redj@devpc: ~
0x03c00001  0 devpc Untitled-1 - Visual Studio Code

表示される行のフォーマットは以下。

[ウィンドウID] [デスクトップ番号] [Xクライアントのホスト名] [ウィンドウタイトル]

例えば、座標(100, 100)を起点に、幅1280、高さ800でリサイズする場合は以下のようにする。 ここでは、対象のウィンドウはウィンドウタイトルで指定する。オプション-eのフォーマットはgravity,起点x,起点y,幅,高さで、gravityには通常は0を指定しておく。

wmctrl -r "Google - Google Chrome" -e 0,100,100,1280,800

また、ウィンドウIDを指定してリサイズする場合は、上記のコマンドラインのオプションに-iを加えて、以下のようにする。

wmctrl -i -r 0x02800001 -e 0,100,100,1280,800

参考

static int window_move_resize (Display *disp, Window win, char *arg) {
    // (略)

    if (wm_supports(disp, "_NET_MOVERESIZE_WINDOW")){
        return client_msg(disp, win, "_NET_MOVERESIZE_WINDOW", 
            grflags, (unsigned long)x, (unsigned long)y, (unsigned long)w, (unsigned long)h);
    }

    // 略