¿Hay alguna forma de colocar una ventana en el centro de la pantalla después de abrirla o hacer que se abra en el centro de la pantalla?
Esto debe hacerse usando la línea de comando.
¿Hay alguna forma de colocar una ventana en el centro de la pantalla después de abrirla o hacer que se abra en el centro de la pantalla?
Esto debe hacerse usando la línea de comando.
Respuestas:
La herramienta wmctrl proporciona acceso a la línea de comandos a casi todas las características definidas en la especificación EWMH (Extended Window Manager Hints) . Se puede usar, por ejemplo, para obtener información sobre el administrador de ventanas, para obtener una lista detallada de escritorios y ventanas administradas, para cambiar y cambiar el tamaño de los escritorios, para hacer que las ventanas sean de pantalla completa , siempre por encima o pegajosas , y para activar , cerrarlos , moverlos , redimensionarlos , maximizarlos y minimizarlos .
Puedes instalarlo por
sudo apt-get install wmctrl
Puede obtener información sobre sus escritorios virtuales (espacios de trabajo) con
wmctrl -d
one@onezero:~$ wmctrl -d
0 * DG: 2720x1536 VP: 0,0 WA: 0,24 1360x744 N/A
Y enumere las ventanas abiertas con wmctrl -l
. La -G
opción le muestra la geometría de las ventanas:
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
Puede especificar una ventana haciendo referencia a su título o título parcial después de -r. -e es para mover y cambiar el tamaño
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.
Entonces, para mover una ventana a la esquina superior izquierda y hacerla 1000 píxeles de ancho por 700 de alto, usaría 0,0,0,1000,700
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 0,0,0,1000,700
Para moverlo / cambiar su tamaño. Para eso, utilicé la solución de "no maximizar" primero, usando la -b
opción
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
Las cosas que necesitas entender primero
The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"
esa es la resolución de mi pantalla, así que x = 1360 & y = 786
Alinear una ventana a la mitad izquierda de la pantalla.
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,0,0,680,768
Alinear una ventana a la mitad derecha de la pantalla
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,680,0,680,768
Alinear una ventana a center of screen
1360/4 = 340
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,340,0,680,768
Manipularlo a partir de la configuración de su pantalla
que funciona con la ventana activa actualmente
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
acción llamar primero para hacerlas ventanas "normales" antes de llamar windowmove
. Ideas?
wmctrl
también, mejores soluciones son bienvenidas. TL; DR: llamada wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horz
antes de la xdotool getactivewindow windowmove
llamada final .
Si alguien quiere un fragmento de código para copiar / pegar para hacer esto, aquí hay 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
Reemplace foo
con el nombre de la ventana que desea centrar en la primera línea, por supuesto.
Explicación (desglose en forma de una sesión de consola de ejemplo):
Obteniendo las dimensiones de la pantalla
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
Obtener la información de geometría de la ventana
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
Moviendo la ventana
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 mayoría de las aplicaciones deberían respetar el parámetro --geometry al iniciar (algunas prefieren -geometry, pruebe el segundo si el primero no funciona para usted):
gnome-terminal --geometry 80x25+100+100
El parámetro de geometría tiene esta forma:
WIDTHxHEIGHT+XOFF+YOFF
Puede dejar partes innecesarias:
gnome-terminal --geometry +20+50 #No size, just offsets
Para más detalles:
man X
luego presione "/" y busque ESPECIFICACIONES DE GEOMETRÍA
o vea aquí: http://www.cotse.com/dlf/man/xwindows/geometry.htm
bash
ozsh
para ejecutarse, simplementesh
no funcionará.