通过命令行将窗口居中


19

有没有办法在打开窗口后将窗口放置在屏幕中央,或使其在屏幕中央打开?

这需要使用命令行来完成。

Answers:


33

wmctrl工具提供了对 EWMH(扩展窗口管理器提示)规范中定义的几乎所有功能的命令行访问。例如,它可用于获取有关窗口管理器的信息,获取桌面和托管窗口的详细列表,切换调整桌面大小,使窗口全屏显示始终位于上方粘滞状态以及激活关闭移动调整大小最大化最小化它们。

您可以通过安装

sudo apt-get install wmctrl

您可以通过以下方式获取有关虚拟桌面(工作区)的信息: wmctrl -d

one@onezero:~$ wmctrl -d
0  * DG: 2720x1536  VP: 0,0  WA: 0,24 1360x744  N/A

并使用列出打开的窗口wmctrl -l。该-G选项显示窗口的几何形状:

one@onezero:~$ wmctrl -l
0x02000004  0 onezero Desktop
0x02e00002  0     N/A DNDCollectionWindow
0x02e00003  0     N/A launcher
0x01e00004  0 onezero cairo-dock
0x02e00004  0     N/A panel
0x04800061  0 onezero Transmission
0x02e0000a  0     N/A Dash
0x03a00044  0 onezero arranging windows from the gnu/linux command line with wmctrl ~ Moving to Freedom - Chromium
0x04400006  0 onezero one@onezero: ~
0x04c000e9  0 onezero Google - Mozilla Firefox

wmctrl -lG

one@onezero:~$ wmctrl -lG
0x02000004  0 0    0    1360 768  onezero Desktop
0x02e00002  0 -1460 -868 1360 768      N/A DNDCollectionWindow
0x02e00003  0 0    24   58   744      N/A launcher
0x01e00004  0 290  653  780  115  onezero cairo-dock
0x02e00004  0 0    0    1360 24       N/A panel
0x04800061  0 408  95   732  500  onezero Transmission
0x02e0000a  0 -1402 -844 1302 744      N/A Dash
0x03a00044  0 0    24   1360 744  onezero Center a window via command line - Ask Ubuntu - Stack Exchange - Chromium
0x04400006  0 127  94   983  434  onezero one@onezero: ~
0x04c000e9  0 5    47   1349 715  onezero Google - Mozilla Firefox

您可以通过在-r之后引用其标题或部分标题来指定窗口。-e用于移动和调整大小

wmctrl -r "Mozilla Firefox" -e <G>,<X>,<Y>,<W>,<H>

<G>: Gravity specified as a number. The numbers are defined in the EWMH specification. The value of zero is particularly
     useful, it means "use the default gravity of the window".
<X>,<Y>: Coordinates of new position of the window.
<W>,<H>: New width and height of the window.

因此,要将窗口移到左上角并使其宽1000像素乘以700高,您将使用0,0,0,1000,700

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 0,0,0,1000,700

在此处输入图片说明

移动/调整大小。为此,我用它第一次的“unmaximizing”的解决方法,使用-b选项

wmctrl -r“ Mozilla Firefox” -b add,maximized_vert,maximized_horz

wmctrl -r“ Mozilla Firefox” -b删除,maximized_vert,maximized_horz

one@onezero:~$ wmctrl -r "Mozilla Firefox" -b add,maximized_vert,maximized_horz

在此处输入图片说明

您需要了解的第一件事

The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"

在此处输入图片说明

那就是我的屏幕分辨率,所以x = 1360&y = 786

将窗口对准屏幕的左半部分

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,0,0,680,768

将窗口对准屏幕的右半部分

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,680,0,680,768

将窗口center of screen对准1360/4 = 340

one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,340,0,680,768

在此处输入图片说明

根据屏幕设置进行操作

如需更多帮助1 2 3 4


7

与当前活动窗口一起使用

IFS='x' read screenWidth screenHeight < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)

width=$(xdotool getactivewindow getwindowgeometry --shell | head -4 | tail -1 | sed 's/[^0-9]*//')
height=$(xdotool getactivewindow getwindowgeometry --shell | head -5 | tail -1 | sed 's/[^0-9]*//')

newPosX=$((screenWidth/2-width/2))
newPosY=$((screenHeight/2-height/2))

xdotool getactivewindow windowmove "$newPosX" "$newPosY"

这需要bashzsh要运行,普通sh将不起作用。
wingedsubmariner's

适用于👍,但在Unity下对于1/2或1/4屏幕平铺的窗口除外(例如,将窗口拖动到右侧,它将占据屏幕的右半部分)。这些窗口似乎很特殊,我不知道xdotool在调用之前要先执行哪个操作才能使其成为“正常”窗口windowmove。有想法吗?
罗南·乔谢

这个askubuntu线程上找到了解决我的问题的解决方案。也涉及电话wmctrl,欢迎更好的解决方案。TL; DR:wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horz在最终xdotool getactivewindow windowmove呼叫之前呼叫。
罗南·乔谢

4

如果有人想复制/粘贴此代码段,请执行以下操作:

winname='foo'
IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
read wx wy ww wh < <(wmctrl -lG | grep $winname | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
wmctrl -r $winname -e 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh

更换 foo为要在第一行中居中的窗口的名称。


说明(以示例控制台会话的形式进行的分解):

获取屏幕尺寸

llama@llama:~$ xdpyinfo | grep dimensions
  dimensions:    1920x1080 pixels (508x285 millimeters)
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*'
1920x1080
x
508x285
llama@llama:~$ xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1
1920x1080
llama@llama:~$ IFS='x' read sw sh < <(xdpyinfo | grep dimensions | grep -o '[0-9x]*' | head -n1)
llama@llama:~$ echo $sw $sh
1920 1080

获取窗口的几何信息

llama@llama:~$ wmctrl -lG | grep foo
0x00a0000c  0 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]*//;'
  0 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]*//;'
 1113 510  722  475  llama foo
llama@llama:~$ wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;'
1143 505  722  475  
llama@llama:~$ read wx wy ww wh < <(wmctrl -lG | grep foo | sed 's/^[^ ]* *[^ ]* //;s/[^0-9 ].*//;')
llama@llama:~$ echo $wx $wy $ww $wh
1143 505 722 475

移动窗户

llama@llama:~$ echo 0,foo,bar,$ww,$wh
0,foo,bar,722,475
llama@llama:~$ echo 0,$(($sw/2)),bar,$ww,$wh                                    
0,960,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),bar,$ww,$wh
0,599,bar,722,475
llama@llama:~$ echo 0,$(($sw/2-$ww/2)),$(($sh/2-$wh/2)),$ww,$wh
0,599,303,722,475

0

大多数应用程序在启动时应使用--geometry参数(某些应用程序更喜欢-geometry,如果第一个不适用于您,请尝试第二个):

gnome-terminal --geometry 80x25+100+100

geometry参数具有以下形式:

WIDTHxHEIGHT+XOFF+YOFF

您可以删除不需要的部分:

gnome-terminal --geometry +20+50 #No size, just offsets

更多细节:

man X

然后按“ /”并搜索“几何规格”

或参见此处:http : //www.cotse.com/dlf/man/xwindows/geometry.htm

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.