web-dev-qa-db-fra.com

Commande Bash pour focaliser une fenêtre spécifique

Existe-t-il un moyen, en ligne de commande bash, de mettre en évidence une fenêtre spécifique d'un processus en cours d'exécution? Supposons que je connaisse le nom du processus, son numéro et tout ce dont j'ai besoin.

Par exemple, si une seule instance de Firefox est en cours d'exécution, mais qu'elle est réduite au minimum (ou qu'il existe une autre fenêtre par-dessus). J'ai besoin d'une commande bash qui appelle et met en évidence la fenêtre de Firefox, en la rendant active.

48
Malabarba

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 aurait besoin.

wmctrl -l 

Répertorie les fenêtres actuellement ouvertes (y compris les panneaux gnome).

wmctrl -a STRING

Donne le focus à une fenêtre contenant STRING dans son titre. Je ne suis pas sûr de ce qui se passera si plusieurs fenêtres remplissent cette condition.
Dans mon cas, la commande était la suivante:

wmctrl -a Firefox
76
Malabarba

En utilisant wmctrl en combinaison avec xdotool, vous pouvez basculer le focus sur Firefox puis effectuer des actions au clavier ou à la 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. Mettre en évidence la première fenêtre Firefox correspondante
  2. Ouvrir un nouvel onglet de navigateur
  3. Met le focus dans la barre d'adresse
  4. Tapez "google"
  5. Tabulation jusqu'au premier résultat de saisie automatique du navigateur
  6. Appuyez sur la touche Retour (ou Entrée)
8
Christopher

Comment est le script ci-dessous que j'utilise dans mon pc Ubuntu? 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é dans un raccourci clavier personnalisé. Ctrl + 1, Ctrl + 2, ...

chat 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
4
swj