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


28

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

Answers:


18

如果您安装类似之类的东西,这样做会更容易xdotool。然后,您可以执行以下操作:

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

用出现在窗口标题中的名称或正则表达式替换“窗口名称”(您也可以按窗口类和其他多种方式搜索),并且在windowsize之后出现的两个数字分别是宽度和高度。(您也可以使用百分比等。)man xdotool安装后请参阅。

如果您使用的是Lucid或更早的版本,建议您访问xdotool网站以获得较新的版本。

要调整Firefox的大小,例如:

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

3
有什么办法可以在没有装饰的情况下调整全屏窗口的大小(标题栏)?并在屏幕上设置确切位置(例如x = 0,y = 0)?我正在尝试将此设置为最大化的mplayer,使其达到800x600 x = 0 y = 0,然后在几分钟后进入相同的全屏模式。谢谢
彼得2016年

15

如果窗口管理器支持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


我什么时候print pid得到<Xlib.protocol.request.GetProperty serial = 15, data = {'bytes_after': 0, 'property_type': 6, 'value': (32, array('I', [5810L])), 'sequence_number': 15}, error = None>...任何建议来隔离实际的PID?
khaverim'3

Nvm。似乎没有可能,但我可以通过解决此问题name
khaverim

1
@khaverim嗯。我认为该API自上次编写以来就发生了变化,以前只是PID。我更新了答案,您想获取由get_full_propertydo和返回的值.value[0]value是一个数组
Michael Mrozek

1
可以通过以下方式安装python Xlib:sudo apt-get install python-xlib(在Ubuntu上)
Tom

4

特定于XFCE的是pyxfce,它将允许您使用python语言来完成此操作。Pyxfce是一个API,除其他功能外,它还使您可以与窗口管理器进行通信。要从命令行使用此功能,需要先准备一个脚本。

根据您的使用情况,使用使用X窗口ID(例如另一个答案中提到的python-xlib或xdotools)的基于X的API与使用匹配窗口标题的字符串(例如wmctrl)的其他API的重要性在于,窗口之间的混淆,它们各自标题中的关键字可能相同。



0

我发现wmctrl最适合我。它以较小的软件包提供,适用于Ubuntu和Raspbian,也可能适用于其他发行版。


我们有一个提到wmctrl的答案,但是没有一个显示如何使用它的答案。您能否通过演示来扩展答案,以便人们可以接受并对其进行调整以适合其特定用途?谢谢!
杰夫·谢勒

如果我手头有一个例子,我肯定已经添加了。不过,这不是手册页的目的吗?
卡雷尔·亚当斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.