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.
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:
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' -G
opzione 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
Per spostarlo / ridimensionarlo. Per questo, ho usato la soluzione alternativa di "non-ingrandimento" prima, usando l' -b
opzione
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
Le cose che devi capire 1
The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"
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 screen
1360/4 = 340
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,340,0,680,768
Manipolarlo a partire dalle impostazioni dello schermo
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"
xdotool
azione chiamare per renderle finestre "normali" prima di chiamare windowmove
. Idee?
wmctrl
, sono benvenute soluzioni migliori. TL; DR: chiama wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horz
prima dell'ultima xdotool getactivewindow windowmove
chiamata.
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 foo
con 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
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
bash
ozsh
per funzionare, semplicementesh
non funziona.