Zentrieren Sie ein Fenster über die Befehlszeile


19

Gibt es eine Möglichkeit, ein Fenster nach dem Öffnen in der Mitte des Bildschirms zu platzieren oder in der Mitte des Bildschirms zu öffnen?

Dies muss über die Befehlszeile erfolgen.

Antworten:


33

Das Tool wmctrl bietet über die Befehlszeile Zugriff auf fast alle Funktionen, die in der EWMH-Spezifikation (Extended Window Manager Hints) definiert sind. Es kann zum Beispiel verwendet werden, um Informationen über den Fenstermanager abzurufen, eine detaillierte Liste von Desktops und verwalteten Fenstern abzurufen, Desktopszu wechseln und deren Größe zu ändern , Fenster als Vollbild anzuzeigen , immer über oder klebrig zu machen und zu aktivieren . Schließen , verschieben , skalieren , maximieren und minimieren Sie sie.

Sie können es von installieren

sudo apt-get install wmctrl

Mit können Sie Informationen zu Ihren virtuellen Desktops (Arbeitsbereichen) abrufen wmctrl -d

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

Und offene Fenster mit auflisten wmctrl -l. Die -GOption zeigt Ihnen die Geometrie der Fenster:

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

Sie können ein Fenster angeben, indem Sie nach -r auf dessen Titel oder Teiltitel verweisen. -e dient zum Verschieben und Ändern der Größ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.

Wenn Sie also ein Fenster in die obere linke Ecke verschieben und es 1000 Pixel breit und 700 Pixel hoch machen möchten, verwenden Sie 0,0,0,1000,700

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

Bildbeschreibung hier eingeben

Zum Verschieben / Ändern der Größe. Dafür habe ich zuerst die Problemumgehung "Unmaximizing" verwendet, indem ich die -bOption verwendet habe

wmctrl -r "Mozilla Firefox" -b add, maximized_vert, maximized_horz

wmctrl -r "Mozilla Firefox" -b remove, maximized_vert, maximized_horz

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

Bildbeschreibung hier eingeben

Die Dinge, die du verstehen musst

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

Bildbeschreibung hier eingeben

Das ist meine Bildschirmauflösung, also x = 1360 & y = 786

Ein Fenster an der linken Bildschirmhälfte ausrichten

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

Ein Fenster an der rechten Bildschirmhälfte ausrichten

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

Ein Fenster an center of screen1360/4 ausrichten = 340

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

Bildbeschreibung hier eingeben

Bearbeiten Sie es in Ihren Bildschirmeinstellungen

Weitere Hilfe 1 2 3 4


7

das funktioniert mit dem aktuell aktiven Fenster

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"

Das muss bashoder muss zshlaufen, schlicht shgeht nicht.
Wingedsubmariner

Funktioniert 👍, außer unter Unity für Fenster, die mit einem 1/2 oder 1/4 Bildschirm nebeneinander angeordnet sind (z. B. ziehen Sie ein Fenster nach rechts, es nimmt die rechte Hälfte Ihres Bildschirms ein). Diese Fenster scheinen etwas Besonderes zu sein, und ich weiß nicht, welche xdotoolAktion ich aufrufen soll, um sie vor dem Aufruf zu "normalen" Fenstern zu machen windowmove. Ideen?
Ronan Jouchet

Habe auf diesem askubuntu-Thread eine Lösung für mein Problem gefunden . Auch Anrufe wmctrlsind willkommen, bessere Lösungen. TL; DR: Anruf wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horzvor dem letzten xdotool getactivewindow windowmoveAnruf.
Ronan Jouchet

4

Wenn jemand ein Code-Snippet kopieren / einfügen möchte, ist hier eines:

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

Ersetzen fooSie dies natürlich durch den Namen des Fensters, das Sie in der ersten Zeile zentrieren möchten.


Erläuterung (Aufschlüsselung in Form einer Beispielkonsolensitzung):

Abrufen der Bildschirmabmessungen

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

Abrufen der Geometrieinformationen des Fensters

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

Das Fenster bewegen

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

Die meisten Anwendungen sollten den Parameter --geometry beim Start berücksichtigen (einige bevorzugen -geometry, versuchen Sie den zweiten, wenn der erste für Sie nicht funktioniert):

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

Der Geometrieparameter hat folgende Form:

WIDTHxHEIGHT+XOFF+YOFF

Sie können nicht benötigte Teile weglassen:

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

Für mehr Details:

man X

Drücken Sie dann "/" und suchen Sie nach GEOMETRIESPEZIFIKATIONEN

oder siehe hier: http://www.cotse.com/dlf/man/xwindows/geometry.htm

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.