如何通过命令行设置窗口大小和应用程序在屏幕上的位置?


33

我希望使用shell命令以特定的大小和屏幕上的位置打开Firefox窗口,例如:

firefox myfile.html size 800x600 location bottom-left

有这样的命令吗?


我成功地做到这一点(与本论坛的帮助),但如果你发现任何其他的解决办法,请告诉我,因为它可能会更加强劲:unix.stackexchange.com/questions/40209/...
伊曼纽尔·伯格

Answers:


20

这是Yokai回答的社区版本,其中包含Rudolf Olah提供的示例。


您可以使用称为的工具xdotool来控制窗口的大小和位置。不仅如此,您使用编写的bash使用编写的任何脚本xdotool都可以设置为与完全最大化的窗口一起使用,并且可以通过操纵mousemoveand click命令来编写脚本以设置窗口大小和x:y坐标。

  1. 查找窗口ID:

    xdotool search --onlyvisible --name firefox
  2. 设定视窗大小

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
  3. 移动视窗

    xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y

例如,如果firefox的窗口ID为123,则可以这样做:

xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080

必须根据您的屏幕分辨率确定左下角的位置。


1
有一个错误xdotoolwmctrl等等。和Ubuntu,XFCE(我有):如果窗口在全屏模式下已经启动,你不能再动它:bugs.launchpad.net/ubuntu/+source/unity/ + bug / 971147
ThePhi

19

据我所知,这是不可能的,因为Firefox不接受控制窗口的命令。(多数情况下)这也是窗口管理器的责任,所以我怀疑是否会有参数来做到这一点。但是,您可以使用wmctrl控制窗口,但这会有些困难:

#!/bin/sh

firefox -new-instance -new-window "http://www.reddit.org" &

# Process ID of the process we just launched
PID=$!

# Window ID of the process...pray that there's     
# only one window! Otherwise this might break.
# We also need to wait for the process to spawn
# a window.
while [ "$WID" == "" ]; do
        WID=$(wmctrl -lp | grep $PID | cut "-d " -f1)
done
# Set the size and location of the window
# See man wmctrl for more info
wmctrl -i -r $WID -e 0,50,50,250,250

可能有更聪明的方法来实现,并且Firefox存在一些互操作性问题(例如,没有其他实例在运行),但它应该可以助您一臂之力。


1
只是一点笔记。如果窗口最大化,则无法调整大小。因此,您必须首先通过以下方式停用此属性:wmctrl -i -r $ WID -b remove,maximized_vert; wmctrl -i -r $ WID -b remove,maximized_horz; 之后,我可以调整Firefox窗口的大小。
ka3ak '18

3

过去,我创建了一个HTML文档,该文档将使用Javascript设置窗口大小,然后重定向到所需的页面。这是一个愚蠢的骇客,但是,它确实有效。


看起来这不再起作用了。显然,仅当窗口是通过window.open创建的弹出窗口时,window.resizeTo才有效。
hugomg 2014年

2

我认为这仅靠shell命令是不可能的,因为它与您的windowmanager无关。
我听说过wmctrldevilspie可能会影响此效果。但是我怀疑有没有一种方法可以像您在示例中所写的那样简单。


1

我一直都这样做。但是,我使用DevilsPie2,因为它更强大。它使用LUA脚本语言,这不是很困难。

这是我为Thunderbird编写的lua脚本,我想在它打开时在最左侧的监视器(笔记本电脑屏幕)上打开它:

if (get_window_name()=="Mozilla Thunderbird") then
   pin_window()
   set_window_geometry( 50, 10, 1220, 780 )
end

where 50 = X coordinate (for upper-left corner of the window)
      10 = Y coordinate ( " " )
    1220 = window width
     780 = window height

要进行此设置,请在家庭配置中(类似于Ubuntu的发行版)创建一个名为devilspie2的目录,例如/home/$USERNAME/.config/devilspie2。

对于Thunderbird,我创建了thunderbird.lua,尽管文件名无关紧要。尽管每个应用程序都可以将所有文件放入一个脚本文件,但我对每个应用程序都有不同的文件名。将devilspie2设置为在登录时自动启动,例如/home/$USERNAME/.config/autostart/devilspie2.desktop

这是指向有关lua脚本可用的各种选项的好页面的链接:https : //github.com/gusnan/devilspie2/blob/master/README

注意事项:脚本不必是可执行的。我的是664,工作正常。我控制的其他一些程序是openconnect,pidgin,RecordMyDesktop,timeshift,xeyes,xload和yad。我在它们上使用pin_window,以便它们出现在所有桌面上,以及其他命令,具体取决于应用程序。


似乎不适用于LXDE。绝对不会识别任何窗口事件(运行时不打印任何内容devilspie2 --debug
John Smith可选

0

这不能解决位置问题,但至少可以设置尺寸:

firefox -width 200 -height 500
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.