Centra una finestra dalla riga di comando


19

C'è un modo per posizionare una finestra al centro dello schermo dopo che è stata aperta o farla aprire al centro dello schermo?

Questo deve essere fatto usando la riga di comando.

Risposte:


33

Lo strumento wmctrl fornisce l'accesso alla riga di comando a quasi tutte le funzionalità definite nella specifica EWMH (Extended Window Manager Hints) . Può essere utilizzato, ad esempio, per ottenere informazioni sul gestore delle finestre, per ottenere un elenco dettagliato di desktop e finestre gestite, per cambiare e ridimensionare i desktop, per rendere Windows a schermo intero , sempre sopra o appiccicoso e per attivare , chiuderli , spostarli , ridimensionarli , ingrandirli e ridurli al minimo .

Puoi installarlo da

sudo apt-get install wmctrl

È possibile ottenere informazioni sui desktop virtuali (aree di lavoro) con wmctrl -d

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

Ed elenca le finestre aperte con wmctrl -l. L' -Gopzione mostra la geometria delle finestre:

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

È possibile specificare una finestra facendo riferimento al suo titolo o titolo parziale dopo -r. -e è per lo spostamento e il ridimensionamento

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.

Quindi, per spostare una finestra nell'angolo in alto a sinistra e renderla larga 1000 pixel per un'altezza di 700, dovresti usare 0,0,0,1000,700

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

inserisci qui la descrizione dell'immagine

Per spostarlo / ridimensionarlo. Per questo, ho usato la soluzione alternativa di "non-ingrandimento" prima, usando l' -bopzione

wmctrl -r "Mozilla Firefox" -b aggiungi, 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

inserisci qui la descrizione dell'immagine

Le cose che devi capire 1

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

inserisci qui la descrizione dell'immagine

questa è la risoluzione del mio schermo, quindi x = 1360 & y = 786

Allineamento di una finestra alla metà sinistra dello schermo

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

Allineamento di una finestra alla metà destra dello schermo

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

Allineare una finestra a center of screen1360/4 = 340

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

inserisci qui la descrizione dell'immagine

Manipolarlo a partire dalle impostazioni dello schermo

Per ulteriori informazioni 1 2 3 4


7

che funziona con la finestra attualmente attiva

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"

Questo ha bisogno basho zshper funzionare, semplicemente shnon funziona.
wingedsubmariner

Funziona 👍, ad eccezione di Unity per le finestre che sono piastrellate di 1/2 o 1/4 di schermo (ad esempio trascinare una finestra sul lato destro, occuperà la metà destra dello schermo). Queste finestre sembrano essere speciali e non so quale xdotoolazione chiamare per renderle finestre "normali" prima di chiamare windowmove. Idee?
Ronan Jouchet

Ho trovato una soluzione al mio problema su questo thread askubuntu . Coinvolge anche le chiamate wmctrl, sono benvenute soluzioni migliori. TL; DR: chiama wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horzprima dell'ultima xdotool getactivewindow windowmovechiamata.
Ronan Jouchet,

4

Se qualcuno desidera copiare / incollare uno snippet di codice per farlo, eccone uno:

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

Sostituisci foocon il nome della finestra che vuoi centrare nella prima riga, ovviamente.


Spiegazione (suddivisione sotto forma di una sessione di console di esempio):

Ottenere le dimensioni dello schermo

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

Ottenere le informazioni sulla geometria della finestra

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

Spostare la finestra

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

La maggior parte delle applicazioni dovrebbe rispettare il parametro --geometry all'avvio (alcuni preferiscono -geometry, prova il secondo se il primo non funziona per te):

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

Il parametro geometria ha questa forma:

WIDTHxHEIGHT+XOFF+YOFF

È possibile lasciare parti non necessarie:

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

Per ulteriori dettagli:

man X

quindi premere "/" e cercare SPECIFICHE GEOMETRICHE

oppure vedi qui: http://www.cotse.com/dlf/man/xwindows/geometry.htm

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.