はじめに
とあるドキュメントの作成の都合上、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
参考
wmctrlのWebサイト
gravityについて (ウィンドウメッセージ_NET_MOVERESIZE_WINDOWの仕様より)
gravityについて (ソースコードより抜粋)
- http://tripie.sweb.cz/utils/wmctrl/dist/wmctrl-1.07.tar.gz (GPLv2, Copyright (c) Tomas Styblo)
grflags
はコマンドラインのgravity
をもとに加工したもの。
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); } // 略