Wyśrodkuj okno za pomocą wiersza polecenia

19

Czy istnieje sposób na umieszczenie okna na środku ekranu po jego otwarciu lub spowodowanie, że otworzy się ono na środku ekranu?

Należy to zrobić za pomocą wiersza polecenia.

EpsilonVector
źródło

Odpowiedzi:

33

Narzędzie wmctrl zapewnia dostęp z wiersza poleceń do prawie wszystkich funkcji zdefiniowanych w specyfikacji EWMH (Extended Window Manager Hints) . Można go użyć na przykład do uzyskania informacji o menedżerze okien, uzyskania szczegółowej listy pulpitów i zarządzanych okien, przełączania i zmiany rozmiaru pulpitów, aby okna były pełnoekranowe , zawsze nad lub lepkie , oraz do aktywacji , zamykaj , przesuwaj , zmieniaj rozmiar , maksymalizuj i minimalizuj je.

Możesz go zainstalować przez

sudo apt-get install wmctrl

Możesz uzyskać informacje o swoich wirtualnych pulpitach (obszarach roboczych) za pomocą wmctrl -d

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

I otwórz listę okien za pomocą wmctrl -l. Ta -Gopcja pokazuje geometrię okien:

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

Możesz określić okno, odwołując się do jego tytułu lub częściowego tytułu po -r. -e służy do przenoszenia i zmiany rozmiaru

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.

Tak więc, aby przenieść okno do lewego górnego rogu i ustawić je na 1000 pikseli szerokości na 700 wysokości, użyłbyś 0,0,0,1000,700

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

wprowadź opis zdjęcia tutaj

Aby przenieść / zmienić rozmiar. W tym celu skorzystałem z obejścia „maksymalizacji”, używając -bopcji

wmctrl -r „Mozilla Firefox” -b dodaj, maximized_vert, maximized_horz

wmctrl -r „Mozilla Firefox” -b usuń, maximized_vert, maximized_horz

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

wprowadź opis zdjęcia tutaj

Rzeczy, które musisz zrozumieć 1.

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

wprowadź opis zdjęcia tutaj

to jest rozdzielczość mojego ekranu, więc x = 1360 i y = 786

Wyrównanie okna do lewej połowy ekranu

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

Wyrównywanie okna do prawej połowy ekranu

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

Wyrównanie okna do center of screen1360/4 = 340

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

wprowadź opis zdjęcia tutaj

Manipuluj zgodnie z ustawieniami ekranu

Więcej pomocy 1 2 3 4

One Zero
źródło
7

który działa z aktualnie aktywnym oknem

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"
AB
źródło
To musi bashlub zshuruchomić, zwykły shnie będzie działać.
wingedsubmariner
Działa 👍, z wyjątkiem Unity dla okien, które mają kafelki 1/2 lub 1/4 ekranu (np. Przeciągnij okno na prawą stronę, zajmie ono prawą połowę ekranu). Te okna wydają się być wyjątkowe i nie wiem, którą xdotoolakcję wywołać, aby najpierw ustawić je jako „normalne” okna windowmove. Pomysły?
Ronan Jouchet,
Znalazłem rozwiązanie mojego problemu w tym wątku askubuntu . Obejmuje wmctrlrównież dzwonienie , mile widziane lepsze rozwiązania. TL; DR: połączenie wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horzprzed ostatnim xdotool getactivewindow windowmovepołączeniem.
Ronan Jouchet,
4

Jeśli ktoś chce, aby to zrobić, skopiuj / wklej fragment kodu, oto:

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

fooOczywiście zamień na nazwę okna, które chcesz wyśrodkować w pierwszym wierszu.


Objaśnienie (podział w formie przykładowej sesji konsoli):

Uzyskiwanie wymiarów ekranu

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

Uzyskiwanie informacji o geometrii okna

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

Przesuwanie okna

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
Klamka
źródło
0

Większość aplikacji powinna uwzględniać parametr --geometry podczas uruchamiania (niektórzy wolą -geometry, spróbuj drugiego, jeśli pierwszy nie działa dla Ciebie):

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

Parametr geometrii ma następującą postać:

WIDTHxHEIGHT+XOFF+YOFF

Możesz pominąć niepotrzebne części:

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

Po więcej szczegółów:

man X

następnie naciśnij „/” i wyszukaj SPECYFIKACJE GEOMETRYCZNE

lub zobacz tutaj: http://www.cotse.com/dlf/man/xwindows/geometry.htm

roadmr
źródło