Ubuntu / Gnome: ouvrir une application dans un espace de travail spécifique

10

Comment dire à une application de s'ouvrir dans un espace de travail spécifique?


Plus d'informations:

J'aime avoir mon IDE C ++ dans l'espace de travail 2, mon IDE Java dans l'espace de travail 3 et mon courrier électronique, navigateur et divers dans l'espace de travail quatre. J'utilise également un script shell qui s'exécute lors de la connexion:

#!/bin/bash
gnome-terminal & # WS 1
netbeans-6-9-1 & # WS2
qtcreator-2-0-1 & # WS 3
firefox & # WS 4
thunderbird & # WS 4

Bien sûr, actuellement, tout s'ouvre dans l'espace de travail actuel ... Existe-t-il un moyen pour moi de spécifier dans quel espace de travail chaque commande doit commencer?

Merci d'avance!

bguiz
la source
1
Si vous avez toujours ces programmes en cours d'exécution, le moyen le plus simple et le plus simple consiste à les charger tous où vous le souhaitez et à «se souvenir des applications lors de la déconnexion»
Unfundednut
1
@MrStatic: Merci pour la suggestion, mais j'ai besoin qu'elle soit dans un script shell pour d'autres raisons - et pour cela je ne peux pas 'me souvenir des applications lors de la
déconnexion

Réponses:

4

Vous pouvez utiliser devilspie pour définir des règles pour les fenêtres sur quel espace de travail.

Voir les documents pour un exemple exact de cela.

Mais MrStatic a aussi une bonne suggestion. Essayez-le d'abord, vous n'aurez peut-être même pas besoin de votre script shell.

Si vous en avez besoin pour être une commande que vous pouvez utiliser dans un script shell, jetez un œil à wmctrl .

Mikel
la source
merci pour la suggestion, je vais vérifier - je considérerais quand même une solution CLI uniquement comme une solution supérieure, donc si vous avez des idées pour une, faites le moi savoir!
bguiz
4
Essayez wmctrl. J'ai ajouté un lien dans ma réponse ci-dessus.
Mikel
7

J'ai essayé l' wmctrloutil et j'ai constaté que la solution la plus simple qui fonctionnait pour moi était de déplacer la fenêtre avec la commande suivante:

wmctrl -r <WindowName> -t <WorkspaceNumber>

Notez que les numéros d'espace de travail commencent à 0. Enfin, vous pouvez passer à votre espace de travail préféré avec la commande:

wmctrl -s <WorkspaceNumber>
VGe0rge
la source
1

J'utilise cette structure de base dans des scripts pour ouvrir un ensemble spécifique d'applications dans des espaces de travail spécifiques ... l'exemple ouvre mon terminal et le déplace vers l'espace de travail 1 ...

cd
gnome-terminal
until wmctrl -l | grep -q "me@mypc ~"; 
do
    sleep 0.1
done
wmctrl -r "me@mypc ~" -t 1
Steve Murphy
la source
Une petite explication sur ce code serait la bienvenue. Pourquoi ça commence par cd? qu'attendez-vous d'ici là? est "moi @ myspc ~" un nom de fenêtre ??
wranvaud
0

Installer wmctrl

sudo apt install wmctrl

Et créez un script (dans cet exemple thunderbird sur le deuxième espace de travail ( -t 1)):

#!/bin/sh
(thunderbird &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

Pour connaître le nom de votre application sur wmctrl, vous pouvez le voir en tapant sur votre terminal:

wmctrl -l

Et remplacez-le par le nom correct dans le script.

Soyez prudent avec la lettre majuscule ("Thunderbird" pas "thunderbird") !!

Autre exemple avec Firefox sur l'espace de travail 3D ( -t 2):

#!/bin/sh
(firefox &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Firefox` -t 2"

Travaillez sur Debain 10 avec Cannelle. Mais devrait fonctionner pour tous

pzim
la source
-1

Je suis assez certain que c'est impossible à faire. La raison semble être que les environnements de fenêtrage comme GNOME s'attendent à ce que le logiciel gère cela, et les fabricants de logiciels s'attendent à ce que les environnements de fenêtrage le gèrent.

Devilspie est une bonne idée, mais il fait correspondre les modèles (c'est-à-dire si le nom == 'google-chrome'). Que se passe-t-il donc si j'ouvre deux navigateurs? Ils sont tous les deux déplacés vers le même espace de travail? J'ai 6x3 = 18 espaces de travail, chacun avec une instance particulière de chrome. Cela aiderait si je pouvais renommer ces programmes (c'est-à-dire 'google-chrome1', 'google-chrome2' ...) mais je ne trouve pas de moyen de le faire. Nous devons donc utiliser wmctrl.

wmctrl est un peu meilleur b / c en plus d'utiliser des titres de fenêtre, vous pouvez également utiliser des ID de fenêtre ou simplement utiliser la fenêtre actuellement en surbrillance. Les identifiants de fenêtre sont difficiles à obtenir car ils ne sont pas immédiatement générés. Voir ci-dessous

gedit 1.txt
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1

mais le contrôle n'est pas renvoyé à la ligne de commande jusqu'à ce qu'APRÈS gedit se termine. Tout ce que nous devons faire pour contourner ce problème est de mettre un &signe

gedit 1.txt &
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1

mais maintenant le contrôle est, 99,999% du temps, retourné à la ligne de commande AVANT que les gestionnaires de fenêtres ne lancent la fenêtre et il n'y a aucun moyen de trouver l'ID de la fenêtre. Il faut mettre en place une technique de bouclage très complexe pour tester pour voir si de nouvelles fenêtres ont été créées, et pour deviner si c'est la fenêtre que nous recherchons.

La vérification de la fenêtre active via l'indicateur :ACTIVE:a le même problème, il n'attend pas que le programme se termine.

wmctrlme semble être un programme très bizarre. Il semble qu'il ait été conçu pour les personnes sans souris ou incapables de faire glisser physiquement leurs programmes sur les espaces de travail.

puk
la source
L'OP a déclaré que le navigateur passait à l'espace de travail quatre. S'il devait être possible d'ouvrir des navigateurs sur d'autres espaces de travail après l'exécution du script de démarrage de session, la dernière commande de ce script pourrait être sleep; pkill devilspie.
Mikel