Commande Bash pour focaliser une fenêtre spécifique

Existe-t-il un moyen, dans la ligne de commande bash, de mettre l'accent sur une fenêtre spécifique d'un processus en cours d'exécution. Supposons que je connais le nom, le numéro et tout ce dont j'ai besoin.

Par exemple, si j'ai une seule instance de Firefox en cours d'exécution, mais elle est minimisée (ou il y a une autre fenêtre sur elle). J'ai besoin d'une commande bash qui apporte et met l'accent sur la fenêtre de Firefox, en la faisant la fenêtre active.

La commande wmctrl semble faire le travail. Il était déjà installé pour moi, mais il est disponible dans les dépôts au cas où quelqu'un en avait besoin.

wmctrl -l 

Liste les fenêtres actuellement ouvertes (y compris les panneaux gnome).

 wmctrl -a STRING 

Donne l'accent sur une fenêtre contenant STRING dans son titre. Je ne suis pas sûr de ce qui se passe si plus d'une fenêtre rencontre cette condition.
Dans mon cas, la commande était:

 wmctrl -a Firefox 

En utilisant wmctrl en combinaison avec xdotool vous pouvez basculer vers Firefox, puis effectuer des actions de clavier ou de souris.

Dans cet exemple:

 wmctrl -R firefox && \ xdotool key --clearmodifiers ctrl+t ctrl+l && \ xdotool type --delay=250 google && \ xdotool key --clearmodifiers Tab Return 

Les étapes suivantes sont exécutées:

  1. Concentrez-vous sur la première fenêtre de Firefox correspondante
  2. Ouvrir un nouvel onglet du navigateur
  3. Met l'accent sur la barre d'adresse
  4. Tapez "google"
  5. Onglet au résultat du premier navigateur pour l'achèvement automatique
  6. Appuyez sur la touche Retour (ou Entrée)

Comment est le script ci-dessous que j'utilise dans mon PC Ubuntu? Le cas d'utilisation est comme ça.

  $ ./focus_win.sh 1 # focus on a application window that executed at first $ ./focus_win.sh 2 # second executed application window 

Je l'utilise après l'avoir assigné au raccourci personnalisé du clavier. Ctrl + 1, ctrl + 2, …

Cat focus_win.sh

 #! /bin/sh if [ "" = "$1" ] ; then echo "usage $0 <win index>" exit 1; fi WIN_ID=`wmctrl -l | cut -d ' ' -f1 | head -n $1 | tail -n 1` if [ "" = "$WIN_ID" ] ; then echo "fail to get win id of index $1" exit 1; fi wmctrl -i -a $WIN_ID