3 votes

Lancement 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 via la ligne de commande.

Par exemple, j'aimerais démarrer mon ordinateur avec un certain nombre de programmes en fenêtres ouverts dans différents espaces de travail. Est-ce possible ? Quels sont les concepts de base ?

J'utilise Unity, sur Ubuntu 14.04.

J'ai aussi essayé de commencer gdevilspie mais il semble que ce soit affecté par un bug.

Merci ! :)

3voto

user.dz Points 45060

Utilisation de wmctrl , par exemple gedit :

gedit & sleep 3; wmctrl -i -r `wmctrl -l -p | grep $! | awk '{ print $1 }'` -t 1
  • gedit & exécuter gedit dans backgroud
  • sleep 3 dormir pendant 3sec attendre la création de la fenêtre (ma machine est un peu lente)
  • $! retourne le PID de la commande précédente (ex : gedit pid)
  • wmctrl -l -p | grep PID | awk '{ print $1 }' récupérer le WID à partir du PID de gedit
  • wmctrl -i -r WID -t 1 déplacer la fenêtre avec WID vers le 2ème bureau

Une autre façon :

wmctrl -s 1 ; gedit & sleep 3; wmctrl -s 0;
  • Passez au deuxième bureau, lancez gedit, attendez 3 secondes ; repassez au premier bureau.

Référence :

0voto

jmarroyave Points 1

C'est essentiellement la même réponse que @user.dz, juste paramétrée et au lieu d'attendre 3 secondes que le gestionnaire Windows soit créé, celle-ci boucle jusqu'à ce qu'elle le trouve.

# 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X