Ist es möglich, alle Fenster (oder alle nicht minimierten Fenster) von einem Arbeitsbereich in einen anderen zu verschieben?
Ich weiß, dass ich mit Shift+ Ctrl+ Alt+ ein Fenster in einen anderen Arbeitsbereich verschieben kann arrow, aber es wird nur dieses eine fokussierte Fenster verschoben.
unity
compiz
workspaces
viewports
betatester07
quelle
quelle
Antworten:
Einheit: Was sind Ansichtsfenster?
Ubuntu Unity verwendet Ansichtsfenster - im Grunde genommen ein Koordinatensystem (wobei die Koordinate 0,0 in der oberen linken Ecke steht), bei dem ein riesiger Desktop in Abschnitte unterteilt ist, die Ihrer Bildschirmauflösung entsprechen. Koordinaten gewinnen an Wert, wenn Sie sich nach rechts und unten bewegen.
Das Koordinatensystem ist relativ. Wenn sich mein aktuelles Ansichtsfenster oben links befindet, sind alle Werte in Bezug auf dieses Ansichtsfenster positive Werte in Schritten von Breite und Höhe. Wenn sich mein aktuelles Ansichtsfenster beispielsweise ganz links oben befindet, befindet sich das Firefox-Fenster im oberen mittleren Arbeitsbereich, das Sie oben sehen, auf dem x-Wert 1366 und dem y-Wert 0 relativ zum Ansichtsfenster ganz links oben. Wenn mein aktives Ansichtsfenster oben in der Mitte angezeigt wird, befindet sich das Terminalfenster oben links im Ansichtsfenster auf dem x-Wert -1327 60. Dies ist das
xdotool
Hauptproblem für , daxdotool
es sich nicht um negative Zahlen handelt.Beachten Sie auch, dass die obere linke Ecke Ihres aktuellen Ansichtsfensters von xdotool immer als Koordinaten 0 0 angenommen wird. Das heißt, wir können nur Sachen nach rechts und unten bewegen.
Damit xdotool für Unity funktioniert
Jetzt wissen wir, dass
xdotool
Fenster nur relativ zu unserer oberen linken Ecke verschoben werden können (dh Sie können Fenster immer nach unten und rechts verschieben, aber niemals nach oben und links). Wie schaffen wir das für die Einheit? Nun, die Grundidee wäre zuSkriptlösung
Das folgende Skript führt genau das oben beschriebene Verfahren aus. Es kann entweder mit dem
-v
Flag aufgerufen werden, um die Koordinaten manuell anzugeben, oder Sie können das-g
Flag verwenden, um den GUI-Dialog aufzurufen.-f
Das Flag weist das Skript an, auch das Ansichtsfenster zu wechseln. Wenn dieses Flag nicht verwendet wird, bleiben Sie im aktuellen Ansichtsfenster und nur Fenster werden verschobenDas Skript erhalten
Sie können den Quellcode aus diesem Beitrag direkt oder über Github mit den folgenden Schritten kopieren:
sudo apt-get install git
cd /opt ; sudo git clone https://github.com/SergKolo/sergrep.git
sudo chmod -R +x sergrep
Die Skriptdatei wird
/opt/sergrep/move_viewport_windows.sh
Informationen zum Binden von Skripten an Verknüpfungen finden Sie unter Wie binde ich .sh-Dateien an eine Tastaturkombination?
Beachten Sie, dass
wmctrl
undxdotool
erforderlich sind, damit dieses Skript ordnungsgemäß funktioniert. Sie können sie über sudo apt-get install xdotool und wmctrl installierenQuellcode
Demo
Webm-Aufzeichnung des Skripts in Aktion:
https://www.youtube.com/watch?v=cJMlC41CWWo
Probleme
Aufgrund des Unity-
grid
Plugins, das für das Einrasten von Fenstern verantwortlich ist, kann das Skript die maximierten oder rechts / links eingerasteten Fenster nicht verschieben. Es wird versucht, das momentane Deaktivieren und Zurücksetzen dieses Plugins hinzuzufügen, damit das Skript mit allen Fenstern funktioniert. Da das Deaktivieren und Zurücksetzen jedoch zeitverzögert ist, wird es möglicherweise als Idee abgebrochen. Wenn Sie möchten, dass das Skript mit allen Fenstern funktioniert, installierenunity-tweak-tool
und deaktivieren Sie das Einrasten von Fenstern unter den Optionen des Fenstermanagers.quelle
Nicht auf Compiz basierende Desktop-Umgebungen (XFCE, LXDE, GNOME, KDE ...)
Sie können dafür eine Kombination aus
wmctrl
und verwendenxdotool
. Stellen Sie zunächst sicher, dass diese beiden Dienstprogramme installiert sind:Wenn die Abhängigkeiten erfüllt sind, sollten Sie in der Lage sein, mit dem folgenden Einzeiler alle Fenster auf dem aktuellen Desktop auf einen anderen zu verschieben:
Eine kurze Aufschlüsselung der verwendeten Befehle:
wmctrl -l | awk -v var=$(xdotool get_desktop) '{if ($2 == var) print $0;}' | cut -d' ' -f1
Listen Sie alle Fenster auf, filtern Sie diejenigen heraus, die sich nicht im aktuellen Arbeitsbereich befinden, und extrahieren Sie ihre Fenster-ID
wmctrl -i -t 2 -r "$i"
Verschieben Sie das Fenster mit der Fenster-ID
$i
in den Arbeitsbereich 2.All dies ist in einer einfachen
while read ... do; done
Schleife gepackt , die über alle Fenster auf dem aktuellen Desktop iteriertCompiz-basierte Desktop-Umgebungen (z. B. Unity)
Die Suche nach einer Lösung für Desktop-Umgebungen wie Unity wird dadurch erschwert, dass Compiz (Unitys Fenstermanager) keine Desktops im herkömmlichen Sinne verwendet .
quelle