我正在尝试在 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
答案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