设置正在运行的应用程序的窗口尺寸

设置正在运行的应用程序的窗口尺寸

我正在尝试在 Ubuntu(xfce 或 gnome)中通过命令行启动一个应用程序,并且想知道是否有一种通用方法来设置当前正在运行的给定应用程序的给定窗口的尺寸?

答案1

如果你安装类似的东西,这会更容易做到xdotool。然后你可以这样做:

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

将“窗口名称”替换为窗口标题中出现的名称或 reg ex(您也可以按窗口类和各种其他内容进行搜索),窗口大小后出现的两个数字分别是宽度和高度。 (您也可以使用百分比等)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 窗口 ID(例如另一个答案中提到的 python-xlib 或 xdotools)的基于 X 的 API 与使用匹配窗口标题的字符串(例如 wmctrl)的其他 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

相关内容