Wie kann ich ein Programm auf einem bestimmten Desktop öffnen?

3770
Vi.

Wenn ich das GUI-Programm starte, erscheint das Fenster auf dem aktuell aktiven Desktop (im Wesentlichen auf einem beliebigen Desktop).

Wie kann ich es auf einem bestimmten Desktop anzeigen lassen? Beim Start möchte ich zum Beispiel, dass bestimmte Programme gestartet und auf Desktops verteilt werden.

Ich habe bereits die Konfigurationsdatei von openbox eingerichtet, um zu erzwingen, dass einige Programme immer auf einem bestimmten Desktop gestartet werden.

Im Idealfall sollte es so sein:

start_on_desktop 1 gnome-terminal --tab -e program1 --tab -e program2 start_on_desktop 2 gnome-terminal --tab -e program3 --tab -e program4 start_on_desktop 3 firefox 

Es sollte in der Lage sein, dasselbe Programm auf einem anderen Desktop zu starten.

Auch wenn ich das Programm auf dem Desktop X starte, wechsle ich zu Desktop Y und SUDDENLY. Ein Programm, das auf X stehen sollte, erscheint auf Y. Wenn ich viele Programme starte und oft zwischen Desktops wechsle, landen sie im Chaos und ich brauche sie zusammen sammeln und vernünftig umverteilen.

Ich möchte auch, dass sich das erste gnome-terminal auf dem Desktop 3 befindet, aber ich möchte auch, dass sich das nächste gnome-terminal auf dem Desktop befindet, wo ich den Tastenanschlag (ebenfalls in openbox konfiguriert) gedrückt habe, der gnome-terminal startet.

4
Was verwenden Sie zur Verwaltung Ihrer virtuellen Desktops? Wie "beim Start möchte ich, dass bestimmte Programme gestartet und auf Desktops verteilt werden", sollte dies (https://bbs.archlinux.org/viewtopic.php?pid=419103) funktionieren. Matthieu Cartier vor 13 Jahren 0
@neurolysis: openbox kümmert sich um die virtuellen Desktops: http://openbox.org/wiki/Help:Configuration#Desktops akira vor 13 Jahren 0

2 Antworten auf die Frage

1
akira

probiere devilspie :

Devil's Pie kann so konfiguriert werden, dass Fenster beim Erstellen erkannt werden und das Fenster mit einem Satz von Regeln abgeglichen wird. Wenn das Fenster den Regeln entspricht, kann es eine Reihe von Aktionen in diesem Fenster ausführen. Ich kann beispielsweise alle von X-Chat erstellten Fenster in allen Arbeitsbereichen anzeigen lassen, und das Hauptfenster von Gkrellm1 wird nicht in der Pager- oder Aufgabenliste angezeigt.
Ich möchte zwei gleiche Anwendungen mit denselben Fenstern (z. B. zwei Gnome-Terminals) auf verschiedenen Desktops starten. openbox selbst kann Fenster, die mit Fenster- und Klassennamen übereinstimmen, auf einem Desktop platzieren. Vi. vor 13 Jahren 0
Der erste Gedanke: Ändern Sie das Skript so, dass Fenster vor und nach dem Start des Befehls aufgelistet werden, und unterscheiden Sie sie. Wenn sich nur eine Zeile unterscheidet, greifen Sie die Fenster-ID für diese Zeile an. Oder: Ändern Sie das Skript, um zu versuchen, den Fensternamen mit dem ersten Wort der Befehlszeile zu vergleichen, das an start_on_desktop übergeben wird. Mikel vor 13 Jahren 0
@Mikel: Hat dein Kommentar etwas mit meiner Antwort zu tun? akira vor 13 Jahren 0
@Vi. Zumindest mit "gnome-terminal" kann man "devilspie" mit der "gnome-terminal" -Option "--window-with-role" etwas Gutes tun. Darael vor 11 Jahren 0
0
Mikel

Hier ist ein erster Durchlauf eines Skripts, um dies zu tun wmctrl.

Funktioniert für mich mit Metacity und sollte in Openbox funktionieren, da es auch EWMH-kompatibel ist.

Verlässt sich auf den GNU-Schlaf. Wenn Sie das nicht haben, wechseln Sie trieszu 10und sleeptimezu 1.

start_on_desktop

#!/bin/sh  if test $# -lt 2 then echo "Usage: start_on_desktop <desktop> <command> [<command args>...]" 1>&2 exit 2 fi  desktop=$1 shift "$@"& pid=$! tries=100 sleeptime=0.1 while test $tries -gt 0 do sleep $sleeptime windows=$(wmctrl -l -p) while read _id _desktop _pid _rest do _ppid=$(ps -o ppid= -p $_pid) if test "$_pid" = "$pid" -o "$_ppid" = "$pid" then id=$_id break 2 fi done <<EOF $windows EOF tries=$((tries - 1)) done if test -n "$id" then wmctrl -i -r "$id" -t "$desktop" exit $? else echo "Window not found" 1>&2 exit 1 fi 

Und hier ist ein Skript, um den aktuellen Desktop herauszufinden.

current_desktop

#!/bin/sh  desktops=$(wmctrl -d) while read id stat rest do if test "$stat" = "*" then echo $id exit 0 fi done <<EOF $desktops EOF echo "Cannot determine current desktop" 1>&2 exit 1 

Sie können es so verwenden, um Anwendungen zu verschieben, die lange Zeit benötigen, um zum Desktop zurückzukehren, auf dem Sie sie gestartet haben:

start_on_desktop $(current_desktop) <firefox or eclipse or whatever> 

Ich denke, Sie würden Ihre vier start_on_desktopZeilen in .Xclientsoder einfügen .xsession.

`wmctrl -l -p` ist oft wie` 0x03000012 2 0 N / A 0.5.2 svn` für Programme, die ich mit diesem Skript ausführen möchte. Vi. vor 13 Jahren 0
Und zum Beispiel meldet GVim nur eine ungültige PID. Vi. vor 13 Jahren 0