Căn giữa một cửa sổ thông qua dòng lệnh


19

Có cách nào để đặt một cửa sổ ở giữa màn hình sau khi mở hay khiến nó mở ở giữa màn hình không?

Điều này cần phải được thực hiện bằng cách sử dụng dòng lệnh.

Câu trả lời:


33

Công cụ wmctrl cung cấp quyền truy cập dòng lệnh vào hầu hết tất cả các tính năng được xác định trong đặc tả EWMH (Gợi ý quản lý cửa sổ mở rộng) . Ví dụ, nó có thể được sử dụng để lấy thông tin về trình quản lý cửa sổ, để có danh sách chi tiết về máy tính để bàn và cửa sổ được quản lý, để chuyển đổi thay đổi kích thước máy tính để bàn, để làm cho cửa sổ toàn màn hình , luôn ở trên hoặc dính và để kích hoạt , đóng , di chuyển , thay đổi kích thước , tối đa hóa tối thiểu hóa chúng.

Bạn có thể cài đặt nó bằng cách

sudo apt-get install wmctrl

Bạn có thể nhận thông tin về máy tính để bàn ảo (không gian làm việc) với wmctrl -d

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

Và liệt kê các cửa sổ mở với wmctrl -l. Các -Gtùy chọn hiển thị cho bạn những hình học của các cửa sổ:

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

Bạn có thể chỉ định một cửa sổ bằng cách tham chiếu tiêu đề của nó hoặc tiêu đề một phần sau -r. -e là để di chuyển và thay đổi kích thước

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.

Vì vậy, để di chuyển một cửa sổ sang góc trên bên trái và làm cho nó rộng 1000 pixel, cao 700, bạn sẽ sử dụng 0,0,0,1000,700

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

nhập mô tả hình ảnh ở đây

Để di chuyển / thay đổi kích thước nó. Vì thế, trước tiên tôi đã sử dụng cách giải quyết của un unimimizing của nó, sử dụng -btùy chọn

wmctrl -r "Mozilla Firefox" -b thêm, maximized_vert, maximized_horz

wmctrl -r "Mozilla Firefox" -b xóa, maximized_vert, maximized_horz

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

nhập mô tả hình ảnh ở đây

Những điều bạn cần hiểu 1

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

nhập mô tả hình ảnh ở đây

đó là độ phân giải màn hình của tôi nên x = 1360 & y = 786

Căn chỉnh một cửa sổ ở nửa bên trái của màn hình

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

Căn chỉnh một cửa sổ ở nửa bên phải của màn hình

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

Căn chỉnh cửa sổ thành center of screen1360/4 = 340

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

nhập mô tả hình ảnh ở đây

Thao tác với cài đặt màn hình của bạn

Để được trợ giúp thêm 1 2 3 4


7

hoạt động với cửa sổ hiện đang hoạt động

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"

Điều này cần bashhoặc zshđể chạy, đồng bằng shsẽ không hoạt động.
wingbedubmariner

Hoạt động, ngoại trừ trong Unity cho các cửa sổ được lát 1/2 hoặc 1/4 màn hình (ví dụ: kéo một cửa sổ sang bên phải, nó sẽ chiếm một nửa màn hình bên phải của bạn). Các cửa sổ này có vẻ đặc biệt và tôi không biết xdotoolnên gọi hành động nào trước tiên để biến chúng thành cửa sổ "bình thường" trước khi gọi windowmove. Ý tưởng?
Ronan Jouchet

Tìm thấy một giải pháp cho vấn đề của tôi trên chủ đề Askubfox này . Liên quan đến việc gọi wmctrlquá, giải pháp tốt hơn chào mừng. TL; DR: gọi wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horztrước xdotool getactivewindow windowmovecuộc gọi cuối cùng .
Ronan Jouchet

4

Nếu bất cứ ai muốn một đoạn mã để sao chép / dán để làm điều này, thì đây là:

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

Tất nhiên, thay thế foobằng tên của cửa sổ bạn muốn đặt ở giữa dòng đầu tiên.


Giải thích (phân tích dưới dạng phiên bảng điều khiển mẫu):

Lấy kích thước màn hình

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

Lấy thông tin hình học của cửa sổ

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

Di chuyển cửa sổ

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

Hầu hết các ứng dụng nên tôn trọng tham số --geometry khi khởi động (một số thích -geometry, hãy thử lần thứ hai nếu lần đầu tiên không phù hợp với bạn):

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

Tham số hình học có dạng này:

WIDTHxHEIGHT+XOFF+YOFF

Bạn có thể bỏ những phần không cần thiết ra:

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

Để biết thêm chi tiết:

man X

sau đó nhấn "/" và tìm kiếm THÔNG SỐ KỸ THUẬT GEOMETRY

hoặc xem tại đây: http://www.cotse.com/dlf/man/xwindows/geometry.htmlm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.