Existe-t-il un moyen de placer une fenêtre au centre de l'écran après son ouverture ou de la faire s'ouvrir au centre de l'écran?
Cela doit être fait en utilisant la ligne de commande.
Existe-t-il un moyen de placer une fenêtre au centre de l'écran après son ouverture ou de la faire s'ouvrir au centre de l'écran?
Cela doit être fait en utilisant la ligne de commande.
Réponses:
L' outil wmctrl fournit un accès en ligne de commande à presque toutes les fonctionnalités définies dans laspécification EWMH (Extended Window Manager Hints) . Il peut être utilisé, par exemple, pour obtenir des informations sur le gestionnaire de fenêtres, pour obtenir une liste détaillée des bureaux et des fenêtres gérées, pour basculer et redimensionner les bureaux, pour rendre les fenêtres en plein écran , toujours au-dessus ou collantes , et pour activer , les fermer , les déplacer , les redimensionner , les maximiser et les minimiser .
Vous pouvez l'installer en
sudo apt-get install wmctrl
Vous pouvez obtenir des informations sur vos bureaux virtuels (espaces de travail) avec
wmctrl -d
one@onezero:~$ wmctrl -d
0 * DG: 2720x1536 VP: 0,0 WA: 0,24 1360x744 N/A
Et listez les fenêtres ouvertes avec wmctrl -l
. L' -G
option vous montre la géométrie des fenêtres:
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
Vous pouvez spécifier une fenêtre en référençant son titre ou un titre partiel après -r. -e est pour déplacer et redimensionner
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.
Donc, pour déplacer une fenêtre dans le coin supérieur gauche et la faire 1000 pixels de large par 700 de haut, vous utiliseriez 0,0,0,1000,700
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 0,0,0,1000,700
Pour le déplacer / le redimensionner. Pour cela, j'ai utilisé la solution de contournement de "démaximiser" d'abord, en utilisant l' -b
option
wmctrl -r "Mozilla Firefox" -b add, maximized_vert, maximized_horz
wmctrl -r "Mozilla Firefox" -b supprimer, maximized_vert, maximized_horz
one@onezero:~$ wmctrl -r "Mozilla Firefox" -b add,maximized_vert,maximized_horz
Les choses que vous devez comprendre en premier
The -e option expects a list of comma separated integers: "gravity,X,Y,width,height"
c'est ma résolution d'écran donc x = 1360 & y = 786
Alignement d'une fenêtre sur la moitié gauche de l'écran
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,0,0,680,768
Alignement d'une fenêtre sur la moitié droite de l'écran
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,680,0,680,768
Alignement d'une fenêtre sur center of screen
1360/4 = 340
one@onezero:~$ wmctrl -r "Mozilla Firefox" -e 1,340,0,680,768
Manipulez-le à partir de vos paramètres d'écran
qui fonctionne avec la fenêtre actuellement active
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
action appeler pour en faire des fenêtres "normales" avant d'appeler windowmove
. Des idées?
wmctrl
aussi l' appel , de meilleures solutions sont les bienvenues. TL; DR: appel wmctrl -ir "$(xdotool getactivewindow)" -b remove,maximized_vert,maximized_horz
avant l' xdotool getactivewindow windowmove
appel final .
Si quelqu'un veut copier / coller un extrait de code pour ce faire, en voici un:
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
Remplacer foo
par le nom de la fenêtre que vous souhaitez centrer sur la première ligne, bien sûr.
Explication (ventilation sous la forme d'un exemple de session console):
Obtenir les dimensions de l'écran
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
Obtention des informations de géométrie de la fenêtre
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
Déplacer la fenêtre
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 plupart des applications doivent respecter le paramètre --geometry au démarrage (certaines préfèrent -geometry, essayez la seconde si la première ne fonctionne pas pour vous):
gnome-terminal --geometry 80x25+100+100
Le paramètre de géométrie a cette forme:
WIDTHxHEIGHT+XOFF+YOFF
Vous pouvez laisser de côté les pièces inutiles:
gnome-terminal --geometry +20+50 #No size, just offsets
Pour plus de détails:
man X
puis appuyez sur "/" et recherchez les SPÉCIFICATIONS GÉOMÉTRIQUES
ou voir ici: http://www.cotse.com/dlf/man/xwindows/geometry.htm
bash
ouzsh
pour fonctionner, plainsh
ne fonctionnera pas.