web-dev-qa-db-fra.com

Démarrage d'un programme fenêtré dans un espace de travail spécifique, à partir de la ligne de commande

Je me demande si je peux "envoyer" un programme fenêtré dans un espace de travail spécifique lorsque je le lance en ligne de commande.

Par exemple, je voudrais démarrer mon ordinateur avec un certain nombre de programmes fenêtrés ouverts dans différents espaces de travail. Est-ce possible? Quels sont les concepts de base derrière cela?

J'utilise Unity sur Ubuntu 14.04.

J'ai aussi essayé de démarrer gdevilspie mais cela semble être affecté par un bogue.

merci! :)

3
fstab

Utilisation de wmctrl, exemple gedit:

_gedit & sleep 3; wmctrl -i -r `wmctrl -l -p | grep $! | awk '{ print $1 }'` -t 1
_
  • _gedit &_ exécuter gedit en arrière-plan
  • _sleep 3_ sommeil pendant 3 secondes en attente de la création de la fenêtre (ma machine est un peu lente)
  • _$!_ return PID de la commande précédente (c'est-à-dire: gedit pid)
  • _wmctrl -l -p | grep PID | awk '{ print $1 }'_ get WID de gedit PID
  • _wmctrl -i -r WID -t 1_ déplace la fenêtre avec WID vers le deuxième bureau

Autrement:

_wmctrl -s 1 ; gedit & sleep 3; wmctrl -s 0;
_
  • Basculez vers le deuxième bureau, lancez gedit, attendez 3sec; revenir au 1er bureau

Référence:

3
user.dz

En gros, c'est la même chose que @ user.dz a répondu, juste paramétrée et au lieu de dormir pendant 3 secondes pour que le gestionnaire de fenêtres soit créé, celui-ci boucle jusqu'à ce qu'il soit trouvé.

# workspace target
_WS=3
export DISPLAY=:0 

gedit &
_PID="$!" 
_WID=""
while [[ $_WID == "" ]]; do
  _WID=$(wmctrl -l -p 2>/dev/null | grep $_PID | awk '{ print $1 }')
sleep 1
done

wmctrl -i -r $_WID -t $_WS
0
jmarroyave