Commande shell pour amener une fenêtre de programme devant une autre?

12

Existe-t-il une commande shell pour amener un programme déjà démarré dans gnome devant un autre.

c'est à dire:

Gedit et Nautilus sont lancés. Nautilus est en arrière-plan et Gedit en premier plan.

Comment amener Nautilus à l'avant avec une commande shell?

NDA
la source

Réponses:

14
  • Installer wmctrl Installer wmctrl

    wmctrl -a <name>

  • Vous pouvez également utiliser xdotool Installer xdotool

Remarque:

  • Vous trouverez plus d'informations sur xdotool ici .
karthick87
la source
Bien sûr, éditez votre message comme je compose le mien ... :()
frabjous
Vous pouvez trouver le nom de votre fenêtre avec wmctrl -l Le nom est le texte après le dernier tiret: <ID de fenêtre> <ID de bureau> <machine client> <titre de fenêtre>
jorfus
8

Une autre option est xdotool :

xdotool search --class Nautilus windowactivate

frabjous
la source
2
Échoue pour moi avecXGetWindowProperty[_NET_WM_DESKTOP] failed (code=1)
Tino
Probablement, le bogue ici - d'après mon expérience --classname ou --name (s'il est connu) fonctionne parfois lorsque --class ne fonctionne pas.
frabjous
Dans mon cas, il était possible d'ouvrir une fenêtre en utilisant l'ID de xwininfoet en émettant plusieurs xdotoolcommandes différentes supplémentaires (dont je ne me souviens plus). Lorsque j'ai essayé d'automatiser cela (pour xwininfom'en débarrasser ), j'ai eu des artefacts visuels en raison de fenêtres autrement cachées qui ont également été sélectionnées. Je n'ai simplement trouvé aucun moyen générique de traiter correctement les fenêtres arbitraires. Après être passé à wmctrl -atout, il a immédiatement fonctionné sans problème, sans aucun ajustement supplémentaire. Veuillez noter que j'aime bien xdotool, mais il semble difficile de soulever juste la bonne fenêtre avec.
Tino
2

Lors de l'utilisation xdotool, il semble difficile de mettre en avant toutes les fenêtres d'une application ou d'une classe donnée en utilisant une seule commande. Je finis par avoir de meilleurs résultats en l'enveloppant dans une forboucle au niveau du shell. Utilisation de Bash:

for WINDOW in $(xdotool search --desktop 0 Firefox); do
   xdotool windowactivate ${WINDOW}
done

Quelques remarques:

  • Par défaut, xdotool searchrecherchera le modèle (ici Firefox) dans le nom de la fenêtre, la classe et le nom de classe. Si vous souhaitez restreindre votre espace de recherche, utilisez les pertinentes --class, --nameou des --classnameoptions.
  • L' --desktop 0option limite la recherche au premier bureau. Cela semble être une solution de contournement pour éviter ce qui est XGetWindowProperty[_NET_WM_DESKTOP] failed (code=1)mentionné dans certains commentaires.
  • Au moment d'écrire ces lignes, le xdotoolprojet est au point mort depuis 2015. Il reste cependant mon outil de choix. Pour des raisons personnelles, Jordan Sissel (l'auteur original) n'est pas aussi actif que lui, alors n'hésitez pas à contribuer au projet.
Sylvain Leroux
la source