web-dev-qa-db-fra.com

Exécuter wmctrl à partir de bash

Après avoir joué un peu depuis le terminal avec wmctrl, vient maintenant l’étape suivante. Exécutez wmctrl à partir d'un script bash.

Je parviens à exécuter wmctrl dans une bash quand il est complètement seul.

Exemple:

#!/bin/bash

 SOUDIR=/usr/bin
 echo "$SOUDIR"
 $SOUDIR/wmctrl -i -r 0x040000b3 -e 0,0,0,500,800

Mais lorsque j'ajoute le code de ligne firefox, cela ne fonctionne pas. Je pensais que l'ajout de temps de sommeil marcherait mais je me suis trompé.

C'est le code actuel:

#!/bin/bash

firefox http://www.google.de
sleep 30s
SOUDIR=/usr/bin
echo "$SOUDIR"
$SOUDIR/wmctrl -i -r 0x040000b3 -e 0,0,0,500,800

Comment redimensionner le navigateur web en utilisant ce code bash?

Je suis nouveau à bash et Ubuntu.

3
kaka

OK quelques points:

  • Vous n'avez pas besoin du /usr/bin ajouté. Shell trouvera wmctrl par lui-même. Cela concerne des cas très spécifiques pouvant impliquer la portabilité.
  • Ajoutez une esperluette à la fin de la commande firefox. Le script ne se poursuivra que si la commande précédente est sortie. Puisque Firefox ne se ferme pas, le script l’attend.
  • Comme Oli l'a fait remarquer, le meilleur moyen consiste à utiliser le nom de la classe. J'ai fait plusieurs scripts avec wmctrl où je trouve l'id hex de la fenêtre en référençant le nom de la classe.

Personnellement je le ferais de cette façon:

#!/bin/bash
firefox http://www.google.de &
sleep 3
WM_ID=$(wmctrl -lx | awk '$3~/Navigator.Firefox/ {print $1}')
wmctrl -i -r $WM_ID -e 0,0,0,500,800

Ici, nous ouvrons firefox, le laissons fonctionner en arrière-plan, puis nous extrayons l'id hex de la fenêtre qui correspond à la classe Navigator.Firefox. Dans wmctrl -lx, le champ 3 est wm_class et le champ 1, identificateur hexadécimal. awk nous aide à extraire le champ 1 ici. Enfin, nous référençons cet identifiant numérique, dans la déclaration finale de wmctrl

1

Il semble probable que la commande firefox bloque la progression du script jusqu'à sa fermeture. Poussez-le simplement en arrière-plan et votre script peut progresser:

_firefox http://www.google.de &
_

Sur une note tangentielle, vous pouvez également consulter -no-remote pour Firefox. Cela empêchera la commande d'interagir avec toutes les instances de Firefox existantes dans votre DISPLAY.

Pendant que nous parlons de tangentes, la commande firefox a quelques arguments d'assistance que --along with _-no-remote_— peut vous aider à cibler la nouvelle fenêtre.

Par exemple, vous pouvez définir un nom de classe spécifique puis laisser Compiz gérer le redimensionnement automatiquement . Et _wmctrl -x <WM_CLASS>_ vous permettra de cibler une classe plutôt qu'un identifiant. Probablement plus robuste que le ciblage de noms ou d'identifiants de fenêtre.

0
Oli