Ubuntu / Gnome: Öffnen Sie eine Anwendung in einem bestimmten Arbeitsbereich


10

Wie kann eine Anwendung in einem bestimmten Arbeitsbereich geöffnet werden?


Mehr Info:

Ich möchte meine C ++ - IDE in Arbeitsbereich 2, meine Java-IDE in Arbeitsbereich 3 und meine E-Mail-Adresse, meinen Browser und Sonstiges in Arbeitsbereich 4 haben. Ich verwende auch ein Shell-Skript, das beim Anmelden ausgeführt wird:

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

Natürlich wird derzeit alles im aktuellen Arbeitsbereich geöffnet ... Kann ich angeben, in welchem ​​Arbeitsbereich jeder Befehl beginnen soll?

Danke im Voraus!


1
Wenn diese Programme immer ausgeführt werden, ist es am einfachsten und einfachsten, sie alle dort zu laden, wo Sie sie möchten, und sich beim Abmelden an Anwendungen zu erinnern
Unfundednut

1
@ MrStatic: Danke für den Vorschlag, aber ich brauche ihn aus anderen Gründen in einem Shell-Skript - und aus diesem Grund kann ich mich beim Abmelden nicht an Anwendungen erinnern
bguiz

Antworten:


4

Mit devilspie können Sie Regeln festlegen , für welche Fenster in welchem ​​Arbeitsbereich Fenster angezeigt werden .

Ein Beispiel dafür finden Sie in den Dokumenten .

Aber MrStatic hat auch einen guten Vorschlag. Versuchen Sie es zuerst, möglicherweise benötigen Sie nicht einmal Ihr Shell-Skript.

Wenn Sie einen Befehl benötigen, den Sie in einem Shell-Skript verwenden können, schauen Sie sich wmctrl an .


Vielen Dank für den Vorschlag. Ich werde es überprüfen. Ich würde eine Nur-CLI-Lösung dennoch als überlegene Lösung betrachten. Wenn Sie also Ideen für eine haben, lassen Sie es mich wissen!
Bguiz

4
Versuchen Sie es mit wmctrl. Ich habe oben in meiner Antwort einen Link hinzugefügt.
Mikel

7

Ich habe das wmctrlTool ausprobiert und festgestellt, dass die einfachste Lösung für mich darin besteht, das Fenster mit dem folgenden Befehl zu verschieben:

wmctrl -r <WindowName> -t <WorkspaceNumber>

Beachten Sie, dass die Arbeitsbereichsnummern bei 0 beginnen. Zuletzt können Sie mit dem folgenden Befehl zu Ihrem bevorzugten Arbeitsbereich wechseln:

wmctrl -s <WorkspaceNumber>

1

Ich verwende diese Grundstruktur in Skripten, um einen bestimmten Satz von Anwendungen in bestimmten Arbeitsbereichen zu öffnen. Das Beispiel öffnet mein Terminal und verschiebt es in den Arbeitsbereich 1 ...

cd
gnome-terminal
until wmctrl -l | grep -q "me@mypc ~"; 
do
    sleep 0.1
done
wmctrl -r "me@mypc ~" -t 1

Eine kleine Erklärung zu diesem Code wäre willkommen. Warum fängt es mit CD an? Was erwartest du bis? ist "me @ myspc ~" ein Fenstername?
Wranvaud

0

Installieren Sie wmctrl

sudo apt install wmctrl

Und erstellen Sie ein Skript (in diesem Beispiel Thunderbird im zweiten Arbeitsbereich ( -t 1)):

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

Um Ihren Anwendungsnamen auf wmctrl zu erfahren, können Sie ihn anzeigen, indem Sie auf Ihr Terminal tippen:

wmctrl -l

Und ersetzen Sie es durch den richtigen Namen im Skript.

Seien Sie vorsichtig mit dem Großbuchstaben ("Thunderbird" nicht "Thunderbird") !!

Anderes Beispiel mit Firefox im 3D-Arbeitsbereich ( -t 2):

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

Arbeite mit Zimt an Debain 10. Sollte aber für alle funktionieren


-1

Ich bin mir ziemlich sicher, dass das unmöglich ist. Der Grund dafür ist, dass Fensterumgebungen wie GNOME erwarten, dass Software dies handhabt, und Softwarehersteller erwarten, dass Fensterumgebungen dies handhaben.

Devilspie ist eine gute Idee, aber es führt einen Mustervergleich durch (dh wenn name == 'google-chrome'). Was passiert also, wenn ich zwei Browser öffne? Sie werden beide in den gleichen Arbeitsbereich verschoben? Ich habe 6x3 = 18 Arbeitsbereiche, jeder mit einer bestimmten Chrominstanz. Es wäre hilfreich, wenn ich diese Programme umbenennen könnte (z. B. "google-chrome1", "google-chrome2" ...), aber ich kann keinen Weg finden, dies zu tun. Also müssen wir wmctrl verwenden.

wmctrl ist ein bisschen besser b / c zusätzlich zur Verwendung von Fenstertiteln. Sie können auch Fenster-IDs verwenden oder einfach das aktuell hervorgehobene Fenster verwenden. Fenster-IDs sind ein Problem, da sie nicht sofort generiert werden. Siehe unten

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

Die Steuerung wird jedoch erst nach dem Beenden von gedit an die Befehlszeile zurückgegeben. Alles, was wir tun müssen, um dies zu umgehen, ist ein &Zeichen zu setzen

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

Jetzt wird die Kontrolle in 99,999% der Fälle an die Befehlszeile zurückgegeben, BEVOR die Fenstermanager das Fenster starten und die Fenster-ID nicht gefunden werden kann. Man muss eine sehr komplexe Schleifentechnik einrichten, um zu testen, ob neue Fenster erstellt wurden, und um zu erraten, ob es sich um das gesuchte Fenster handelt.

Das Überprüfen des aktiven Fensters über das Flag :ACTIVE:hat das gleiche Problem. Es wartet nicht darauf, dass das Programm beendet wird.

wmctrlscheint mir ein sehr seltsames Programm zu sein. Es scheint, als sei es für Personen ohne Maus konzipiert oder nicht in der Lage, ihre Programme physisch über Arbeitsbereiche zu ziehen.


Das OP sagte, der Browser geht auf Arbeitsbereich vier. Wenn es möglich sein sollte, Browser in anderen Arbeitsbereichen zu öffnen, nachdem das Sitzungsstart-Skript ausgeführt wurde, könnte der letzte Befehl in diesem Skript "sleep" sein. pkill devilspie.
Mikel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.