So verschieben Sie Anwendungen mithilfe des Befehls von Arbeitsbereich 1 nach 2


11

Kann ich die Anwendung, die in einem Arbeitsbereich ausgeführt wird, in der Befehlszeile auf einen anderen umstellen? Ich benutze Ubuntu 10.04

UPDATE1 Gemäß den folgenden
Vorschlägen

 wmctrl -l
0x02200003 -1 bond Bottom Expanded Edge Panel
0x02200049 -1 bond Top Expanded Edge Panel
0x02000020  0 bond x-nautilus-desktop
0x04e00004  0 bond bond@bond: ~
0x0482a380  0 bond OMG! Ubuntu! | wmctrl - Chromium
0x05000072  0 bond how to shift applications from workspace 1 to 2 using command - Ask Ubuntu - Stack Exchange - Google Chrome

jetzt, wenn ich tippe

wmctrl -r :OMG! Ubuntu! | wmctrl - Chromium: -t 2 No window was specified.

Also, wie man es richtig benutzt, was ist der Fehler oben?

UPDATE2
Ich habe es versucht

wmctrl -r 0x05000072 -t 2

Aber die Fenster hatten keine Wirkung und blieben im selben Arbeitsbereich.


Ich habe meine Antwort mit besseren Informationen zur Verwendung von -r und -i aktualisiert. Das Argument für -r sollte in "Anführungszeichen" eingeschlossen werden, wenn es Leerzeichen enthält. Wenn das Argument für -r die Fenster-ID ist, müssen Sie auch -i in der Befehlszeile angeben.

Antworten:


13

Wenn Sie einen kompatiblen Fenstermanager wie Metacity (Unity 2-d) verwenden, können Sie mit wmctrl ein Fenster auf einen anderen Desktop wechseln. Die Syntax lautet wmctrl -r :ACTIVE: -t <DESKTOP>. Sie können Ihren aktuellen Desktop auch mit ändern wmctrl -s <DESKTOP>. Desktop-Nummern beginnen bei 0. In einer Zeile wäre dies:

wmctrl -r :ACTIVE: -t 1; wmctrl -s 1

Wenn Sie ein anderes Fenster als das aktive auf einen anderen Desktop wechseln möchten, verwenden Sie Text aus dem Titel als Argument für -r. Zum Beispiel:

wmctrl -r "Chromium" -t 1

Alternativ können Sie wmctrl -ldie verfügbaren Fenster auflisten und die ID-Nummer anstelle der speziellen Zeichenfolge an -r übergeben :ACTIVE:. Wenn Sie eine ID übergeben, müssen Sie auch -i hinzufügen. Zum Beispiel:

$ wmctrl -l
0x03e00189  0 hostname Ask Ubuntu - Chromium
$ wmctrl -i -r 0x03e00189 -t 2

(wmctrl kann unter Ubuntu mit installiert werden sudo apt-get install wmctrl.) Derzeit scheint dies leider nicht mit Standard Unity zu funktionieren.


@skyblue Tolle Infos. Eine Sache, bei der ich nicht klar bin, ist, woher ich das Desktop-Fenster kenne. Nein, und ich suche auch, dass Chrome ausgeführt wird und ich möchte, dass Chrome von meinem aktuellen Desktop zu einem anderen wechselt und dann, wie es geht dafür.
Registrierter Benutzer

Wenn Sie den Chrome-Browser verwenden (dessen Titel "Chromium" enthält), sollten Sie ihn wmctrl -r "Chromium" -t 1in seiner Antwort als Skyblue-Erwähnungen verwenden können, solange Sie einen kompatiblen Fenstermanager wie Unity-2d verwenden.
John S Gruber

3

Hier ist ein Skript von mir, das implementiert, was Sie fragen: https://github.com/norswap/wmov/blob/master/wmov.sh

In der aktuellen Form kann es Fenster (ausgewählt durch Abgleichen einer Zeichenfolge ohne Berücksichtigung der Groß- und Kleinschreibung mit dem Titel der Teilzeichenfolge, wie bei der wmctrl -rOption) an andere Desktops senden , entweder durch Auswahl einer expliziten Desktop-Nummer oder durch Angabe der Richtung des Desktops vom aktuellen Desktop.

Zum Beispiel:

./wmov.sh mov "Google Chrome" 3 # sends Chrome to desktop 3 (bottom left)
./mov.sh mov Skype right # sends Skype to the desktop to the right of
                         # the current desktop (if any)

Es funktioniert tatsächlich wie in Desguas Beitrag beschrieben. Es bietet auch die Möglichkeit, Fenster an andere Arbeitsbereiche zu senden.


Ich mag diese Lösung, weil sie Fenster mit teilweisen Übereinstimmungen mit dem Fensternamen identifizieren kann. Dies ist besonders nützlich, wenn Programme je nach Kontext einen Teil ihres Namens ändern. Das Aufrufen von Fenstern beim Namen ist einfacher als das Nachschlagen ihrer PIDs. Der Nachteil ist, dass man bei mehreren Fenstern mit derselben Zeichenfolge im Namen nicht vorhersagen kann, welche wmov.sh greifen wird.
Andrew P.

2

Wenn Sie compiz verwenden, schauen Sie hier im compiz-Wiki nach . Dort finden Sie mehrere Beispiele. Schauen Sie sich das "Put" -Plugin an.

Beispiel

./compiz-dbus-send.py put put_viewport_right_key

2

Es ist möglich, dies zu tun xdotool, aber wenn Sie compizdiese Lösung verwenden, ist sie möglicherweise nicht anwendbar. Denken Sie also bitte daran.

Sie können ein bestimmtes Fenster (das aktive Fenster) in einen anderen Arbeitsbereich wechseln

xdotool getactivewindow set_desktop_for_window 1

Oder für ein Skript möchten Sie möglicherweise die Fenster eines bestimmten Programms auf einen bestimmten Arbeitsbereich umschalten mit:

xdotool search --class firefox set_desktop_for_window %@ 1

Dieser Befehl sucht und findet die firefoxFenster und überträgt sie an Arbeitsbereich 1, wo sie minimiert angezeigt werden. Um firefoxzum Standard-Desktop zurückzukehren, ersetzen Sie einfach die 1 durch eine 0 am Ende des Befehls. Um ein anderes Fenster an einen anderen Arbeitsbereich zu senden, ersetzen Sie es einfach durch einen firefoxanderen Programmnamen.

Es ist wichtig, dass Sie %@die vom --searchParameter übergebenen Fenster so darstellen , als würden keine Fenster übertragen.

Weitere Informationen finden Sie auf man xdotoolden Ubuntu-Manpages online.


1

Erstens ist der Doppelpunkt Teil des :ACTIVE:magischen Tokens, um das aktive Fenster anzuzeigen. Du willst es nicht normal. Zweitens müssen Sie Zeichenfolgen mit Leerzeichen zitieren.

Sie können auch die Fenster-ID (die 0x...am Anfang jeder Zeile steht) abrufen und diese verwenden, anstatt zu versuchen, den Titel zum Laufen zu bringen.

$ wmctrl -r 'OMG! Ubuntu! | wmctrl - Chromium' -t 2 # wherever it is, move it to 2
$ wmctrl -r 0x0482a380 -t 2 # same thing

Eine andere Möglichkeit, Fenster-IDs abzurufen, besteht darin, xwininfodas Fenster auszuführen und dann auf das gewünschte Fenster zu klicken.
Geekosaurier

Ich habe Ihre Methode ausprobiert, aber sie hatte keine Auswirkungen auf das betreffende Fenster.
Registrierter Benutzer

@ Registrierter Benutzer: Welcher Fenstermanager? ( wmctrl -m)
Geekosaurier

Entschuldigung für die verzögerte Antwort wmctrl -m Name: compiz Klasse: N / A PID: N / A Der Fenstermanager zeigt den Desktop-Modus an: AUS
Registrierter Benutzer

Hrm. Aufgrund der Vorschläge zur Verwendung von Compiz-Plugins gehe ich davon aus, dass Compiz nicht die vollständige EWMH-Spezifikation implementiert und daher wmctrlnicht funktioniert. (Insbesondere muss es auf PropertyChangeEreignisse im
Stammfenster

0

Indem Sie das Skript, das als Lösung für diese Frage angegeben ist , ein wenig ändern, "bringt" Folgendes ein bestimmtes Fenster in den aktuellen Arbeitsbereich (in compiz):

#!/bin/bash

SCREEN_W=$(xwininfo -root | sed -n 's/^  Width: \(.*\)$/\1/p')
SCREEN_H=$(xwininfo -root | sed -n 's/^  Height: \(.*\)$/\1/p')

NAME="$1"

wmctrl -xlG | awk -v NAME="$NAME" '$7==NAME {print $1}' | while read WINS; do wmctrl -ir "$WINS" -e "0,0,0,$SCREEN_W,$SCREEN_H"; done

exit 0

Wenn ein beliebiger Arbeitsbereich gewünscht wird, müssen Sie das entsprechende $SCREEN_W/ hinzufügen / entfernen $SCREEN_H, so oft wie ein Arbeitsbereich ein Fenster vom Zielbereich entfernt ist.


0

Versuchen:

wmctrl -r “window name(or any string in the title)” -t `wmctrl -d | grep “workspace name” | cut -d" " -f1`

lass mich erklären: in hilfe von wmctrl zeigt

    -r <WIN> -t <DESK>   Move the window to the specified desktop.
    <DESK>               A desktop number. Desktops are counted from zero.
    <WIN>          This argument specifies the window. By default it's
                   interpreted as a string. The string is matched
                   against the window titles and the first matching
                   window is used. The matching isn't case sensitive
                   and the string may appear in any position
                   of the title.

                   The -i option may be used to interpret the argument
                   as a numerical window ID represented as a decimal
                   number. If it starts with "0x", then
                   it will be interpreted as a hexadecimal number.

wmctrl -d kann alle Arbeitsbereiche auflisten, in meinem Computer wird nun wie folgt angezeigt:

0 - DG: 1600 x 900 VP: N / A WA: 0,0 1600 x 868 Code
1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 spielen 
2 - DG: 1600 x 900 VP: N / A WA: 0,01600 x 868 Forschung

* bedeutet den aktuellen Arbeitsbereich

Übrigens, wmctrl -lum alle Fenster (die Sie bereits gekannt haben) aufzulisten, in meinem Computer sind sie jetzt:

0x05400008 1 Benutzer-LinuxMint-Terminal
0x03a0008e 0 Benutzer-LinuxMint Mozilla Firefox


da der "DESK" die Nummer sein muss, benutze ich grep “workspace name” | cut -d" " -f1, um es zu bekommen.

Wenn ich beispielsweise Firefox in den Arbeitsbereich "Code" verschieben möchte, kann ich Folgendes verwenden:

wmctrl -r "firefox" -t 0 

oder

wmctrl -r "moz" -t `wmctrl -d | grep "code" | cut -d" " -f1`

aber

wmctrl -r -i 0x03a0008e -t `wmctrl -d | grep "code" | cut -d" " -f1`

Arbeite mich nur einmal und ich weiß nicht warum!

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.