実行中のアプリケーションのウィンドウサイズの設定

実行中のアプリケーションのウィンドウサイズの設定

Ubuntu(xfceまたはgnome)でコマンドラインを介してアプリケーションを起動しようとしていますが、現在実行中の特定のアプリケーションに対して特定のウィンドウのサイズを設定する普遍的な方法があるかどうか疑問に思います。

答え1

次のようなものをインストールすると簡単になります。xdotool。これにより、次のことができます。

xdotool search --name "window name" windowsize 300 400

「ウィンドウ名」をウィンドウタイトルに表示される名前または正規表現に変更します(ウィンドウクラスやその他のさまざまな項目で検索することもできます)。ウィンドウサイズの後に表示される2つの数字は幅と高さです。 (パーセントなどを使用することもできます。)man xdotoolインストール後に確認してください。

Lucid以前のバージョンをお使いの場合は、訪問をお勧めします。xdotoolウェブサイトしかし、最新バージョンを入手してください。

たとえば、Firefox のサイズを変更するには:

xdotool search --name "Mozilla Firefox" windowsize 1024 768

答え2

ウィンドウマネージャがXlibをサポートしている場合。ここでPythonはウィンドウサイズを500x300に設定するために使用されます。

WIDTH, HEIGHT = 500, 300
import Xlib
import Xlib.display

display = Xlib.display.Display()
root = display.screen().root
windowID = root.get_full_property(display.intern_atom('_NET_ACTIVE_WINDOW'), Xlib.X.AnyPropertyType).value[0]
window = display.create_resource_object('window', windowID)
window.configure(width = WIDTH, height = HEIGHT)
display.sync()

難しいのは、上記のコードからウィンドウIDを取得することです。アクティブウィンドウのIDを取得します。別のIDが必要な場合は、次の方法を使用して各ウィンドウのタイトルと制御PIDを取得し、それに基づいて正しいIDを選択できます。

windowIDs = root.get_full_property(display.intern_atom('_NET_CLIENT_LIST'), Xlib.X.AnyPropertyType).value
for windowID in windowIDs:
    window = display.create_resource_object('window', windowID)
    name = window.get_wm_name() # Title
    prop = window.get_full_property(display.intern_atom('_NET_WM_PID'), Xlib.X.AnyPropertyType)
    pid = prop.value[0] # PID

答え3

特にXFCE用pyxfceこれにより、次のことが可能になります。Python言語。 Pyxfceは、何よりも次のことを可能にするAPIです。ウィンドウマネージャとの通信。コマンドラインで使用するには、まずスクリプトを準備する必要があります。

ユースケースに応じて、XベースのAPIを使用することが重要です。各タイトルに同じキーワードがある可能性があるウィンドウ間に混乱はありません。

答え4

xwindowinfoここのいくつかのヒントと他の質問に基づいて、次のようにしてこのBashスクリプトを考えましたxdotool

  • コマンドラインで寸法を定義する
  • ウィンドウを選択してください
  • 選択したウィンドウに関する関連情報を要約します。
  • ターゲットウィンドウのサイズ変更
#!/bin/bash

# Use xwininfo to get the id (and name) of a window (click to select)
# Use xdotool to resize the window to a specific size

if [[ $# -ne 2 ]]; then
    echo "Usage $0 width height"
    exit 0
fi

w=$1
h=$2

echo "Click on the target window"

info=$(xwininfo)

info_id=`echo "$info" | grep 'Window id:'`
info_w=`echo "$info" | grep 'Width:'`
info_h=`echo "$info" | grep 'Height:'`

if [[ "$info_id" =~ ^.+"Window id: "([^[:space:]]+?)" \""(.+)"\""$ ]]; then
    id="${BASH_REMATCH[1]}"
    title="${BASH_REMATCH[2]}"
fi

if [[ "$info_w" =~ "Width: "(.+) ]]; then
    window_w=${BASH_REMATCH[1]}
fi
if [[ "$info_h" =~ "Height: "(.+) ]]; then
    window_h=${BASH_REMATCH[1]}
fi

read -p "Resize \"$title\" ($window_w x $window_h) to $w x $h? [Y / n] " answer

if ! [[ "$answer" == "" || "${answer,,}" == "y" ]]; then
    exit 0
fi

xdotool windowsize $id $w $h

関連情報