Comment définir la taille de la fenêtre et l'emplacement d'une application à l'écran via la ligne de commande?


33

Je souhaite que la fenêtre Firefox soit ouverte dans une taille et un emplacement spécifiques à l'écran à l'aide d'une commande shell, par exemple:

firefox myfile.html size 800x600 location bottom-left

Existe-t-il une telle commande?


J'ai réussi à le faire (avec l'aide de ce forum), bien que si vous trouvez une autre solution, dites-le-moi car elle sera probablement plus robuste: unix.stackexchange.com/questions/40209/…
Emanuel Berg

Réponses:


20

Voici une version communautaire de la réponse de Yokai qui incorpore des exemples proposés par Rudolf Olah .


Vous pouvez utiliser l'outil appelé xdotoolpour contrôler la taille et l'emplacement de la fenêtre. Non seulement cela, tout script que vous écrivez en bashutilisant xdotoolpeut être configuré pour fonctionner avec une fenêtre entièrement maximisée et il peut être scripté pour définir la taille de la fenêtre et les coordonnées x: y en manipulant les commandes mousemoveet click.

  1. Trouvez l'ID de la fenêtre:

    xdotool search --onlyvisible --name firefox
  2. Définissez la taille de la fenêtre

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
  3. Déplacer la fenêtre

    xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y

Par exemple, si l'ID de la fenêtre pour Firefox est 123, vous feriez ceci:

xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080

Le positionnement en bas à gauche devra être déterminé en fonction de la résolution de votre écran.


1
Il y a un bug avec xdotool, wmctrletc. et Ubuntu, XFCE (que j'ai): si la fenêtre s'est déjà lancée en mode plein écran, vous ne pouvez plus la déplacer: bugs.launchpad.net/ubuntu/+source/unity/ + bug / 971147
ThePhi

19

Pour autant que je sache, cela n'est pas possible car Firefox n'accepte pas les commandes pour contrôler la fenêtre. C'est aussi (principalement) la responsabilité du gestionnaire de fenêtres, donc je doute qu'il y aura jamais des paramètres pour le faire. Cependant, vous pouvez contrôler la fenêtre avec wmctrl , mais cela va être un peu difficile:

#!/bin/sh

firefox -new-instance -new-window "http://www.reddit.org" &

# Process ID of the process we just launched
PID=$!

# Window ID of the process...pray that there's     
# only one window! Otherwise this might break.
# We also need to wait for the process to spawn
# a window.
while [ "$WID" == "" ]; do
        WID=$(wmctrl -lp | grep $PID | cut "-d " -f1)
done
# Set the size and location of the window
# See man wmctrl for more info
wmctrl -i -r $WID -e 0,50,50,250,250

Il pourrait y avoir des moyens plus intelligents de le faire, et il y a des problèmes d'interopérabilité avec Firefox (par exemple qu'aucune autre instance n'est en cours d'exécution) mais cela devrait vous permettre de continuer.


1
Juste une petite note. Le redimensionnement ne fonctionnera pas si la fenêtre est agrandie. Vous devez donc d'abord désactiver cette propriété avec: wmctrl -i -r $ WID -b remove, maximized_vert; wmctrl -i -r $ WID -b remove, maximized_horz; Après cela, j'ai pu redimensionner la fenêtre Firefox.
ka3ak

3

Dans le passé, j'ai créé un document HTML qui définirait la taille de la fenêtre avec Javascript, puis rediriger vers la page que je voulais. C'est un hack stupide mais, hé, ça marche.


On dirait que ça ne marche plus. Apparemment, window.resizeTo n'a d'effet que si la fenêtre est une fenêtre contextuelle créée via window.open.
hugomg

2

Je ne pense pas que cela soit possible uniquement avec les commandes shell, car cela n'a rien à voir avec votre gestionnaire de fenêtres.
J'ai entendu parler de wmctrl et devilspie qui peuvent effectuer cela. Mais je doute qu'il existe un moyen d'y parvenir aussi simple que vous l'avez écrit dans votre exemple.


1

Je fais ça tout le temps. J'utilise DevilsPie2, cependant, car il est plus robuste. Il utilise le langage de script LUA, ce qui n'est pas très difficile.

Voici mon script lua pour Thunderbird, que je veux ouvrir sur le moniteur extrême gauche (écran d'ordinateur portable) lorsqu'il s'ouvre:

if (get_window_name()=="Mozilla Thunderbird") then
   pin_window()
   set_window_geometry( 50, 10, 1220, 780 )
end

where 50 = X coordinate (for upper-left corner of the window)
      10 = Y coordinate ( " " )
    1220 = window width
     780 = window height

Pour configurer cela, vous créez un répertoire dans votre configuration personnelle (sur les distributions de type Ubuntu) nommé devilspie2, par exemple /home/$USERNAME/.config/devilspie2

Pour Thunderbird, j'ai créé thunderbird.lua, même si le nom de fichier n'a pas d'importance. J'ai un nom de fichier différent pour chaque application, mais vous pouvez tout mettre dans un fichier de script si vous le souhaitez. Définissez devilspie2 pour qu'il démarre automatiquement lorsque vous vous connectez, par exemple /home/$USERNAME/.config/autostart/devilspie2.desktop

Voici un lien vers une bonne page sur les différentes options disponibles pour votre script lua: https://github.com/gusnan/devilspie2/blob/master/README

Une remarque: les scripts ne doivent pas nécessairement être exécutables. Les miens sont 664 et fonctionnent très bien. Quelques-uns des autres programmes que je contrôle sont openconnect, pidgin, RecordMyDesktop, timeshift, xeyes, xload et yad. J'utilise pin_window sur eux pour qu'ils apparaissent sur tous les bureaux, ainsi que d'autres commandes en fonction de l'application.


Ne semble pas fonctionner avec LXDE. Absolument aucun événement de fenêtre n'est reconnu (rien n'est imprimé lors de l'exécution devilspie2 --debug)
John Smith Facultatif

0

Cela ne résout pas le problème de la position, mais au moins vous pouvez définir des dimensions:

firefox -width 200 -height 500
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.