Ich habe also 8 virtuelle Desktops in Unity (mit Compiz), weil ich viele Projekte habe, an denen ich gleichzeitig arbeite.
Das Problem ist, dass ich jedes Mal, wenn ich Chrome neu starten oder versehentlich schließen muss (was einen großen Teil der Fenster ausmacht, die ich für die Arbeit benötige), diese Fenster manuell erneut öffnen und dann einrichten muss (Dateien öffnen, zum richtigen Fenster wechseln) URLs etc.).
Wie würden Sie ein Skript schreiben, das all das für mich erledigt? Das heißt: 1) Öffnen Sie die Fenster. 2) Setzen Sie sie auf den richtigen virtuellen Bildschirmen in die richtigen Koordinaten
(1) ist offensichtlich, für Google Chrome führen Sie einfach "Google-Chrome" aus. Aber wie bringen Sie es dann an die richtige Stelle? (2)
Oder gibt es bereits ein Skript / eine Software, die dies für mich erledigen würde?
wmctrl
eine Software zur Steuerung von Fenstern über ein Skript oder ein Terminal. Aber was den Neustart eines FenstersAntworten:
Es kann sehr gut gemacht werden, aber Sie benötigen etwas Verständnis für Unity / Ansichtsfenster. Ich hoffe, die folgende Geschichte ist verständlich. Wenn nicht, hinterlassen Sie bitte einen Kommentar.
Das folgende Skript kann verwendet werden, um ein Fenster einer beliebigen Anwendung in einem Ihrer Ansichtsfenster an einer beliebigen Position zu öffnen, wenn Sie es mit den richtigen Argumenten ausführen. Das Skript ist eine bearbeitete Version dieses Skripts, ist jedoch jetzt darauf vorbereitet, Fenster auf dem übergreifenden virtuellen Desktop zu platzieren .
1. Grundlegendes zu Ansichtsfenstern und Fensterkoordinaten
Arbeitsbereiche in Einheit
In Unity haben Sie im Gegensatz zu anderen Fenstermanagern nur einen übergreifenden Arbeitsbereich, der in Ansichtsfenster unterteilt ist. In Ihrem Fall ist Ihr Arbeitsbereich in acht Ansichtsfenster unterteilt.
Wie die Position der Fenster definiert wird
Die Fensterposition als Ausgabe des Befehls:
wird als Position relativ zur oberen linken Ecke des aktuellen Ansichtsfensters beschrieben :
Wenn Sie sich also im Ansichtsfenster befinden
1
:Ein Fenster in Ansichtsfenster 2 kann beispielsweise auf 1700 (x-weise) x 500 (y-weise)
positioniert werden (mein Bildschirm ist 1680x1050).
Wenn Sie sich jedoch in Ansichtsfenster 6 befinden, wird
dasselbe Fenster auf 20 (x), -550 (y) positioniert.
Die korrekte Verwendung dieser Koordinaten ist wichtig, um das Skript mit den richtigen Argumenten auszuführen, wie unten beschrieben:
2. Verwendung des Skripts
Mit dem folgenden Skript können Sie ein neues Fenster einer Anwendung in Ihrem virtuellen (übergreifenden) Arbeitsbereich platzieren.
Stellen Sie sicher, dass
wmctrl
installiert ist:Kopieren Sie das folgende Skript in eine leere Datei und speichern Sie es als
setwindow
(keine Erweiterung) in~/bin
. Erstellen Sie das Verzeichnis, falls es noch nicht vorhanden ist. Machen Sie das Skript ausführbar .~/bin
, führen Sie entweder den Befehl aussource ~/.profile
oder melden Sie sich ab, um das Verzeichnis in verfügbar zu machen$PATH
.Testen Sie den Befehl:
z.B
Im aktuellen Ansichtsfenster sollte ein gedit-Fenster angezeigt werden.
Anmerkungen:
gedit
Fensters auf meinem System beträgt z. 470 px.<x_position>
, um Fenster links von den aktuellen Ansichtsfenstern zu platzieren.<y_position>
, um Fenster über den aktuellen Ansichtsfenstern zu platzieren.Um neue Fenster in verschiedenen Ansichtsfenstern gleichzeitig zu öffnen, können Sie einfach Befehle verketten. Wenn ich mich in Ansichtsfenster 1 befinde, kann ich gedit-Fenster in Ansichtsfenster 1, 2, 3 und 4 mit dem folgenden Befehl öffnen:
Das Skript
EDIT: die faule Version
Wenn Sie lieber nur Koordinaten und Größe eingeben möchten, als würden Sie ein Fenster im aktuellen Ansichtsfenster öffnen und das Zielansichtsfenster als Argument angeben (ohne etwas berechnen zu müssen), verwenden Sie die folgende Version ...
Wenn Sie es wie die erste Version des Skripts einrichten, können Sie es mit dem folgenden Befehl ausführen:
Ein Beispiel: ein zum Öffnen
Google-Chrome
Fenster positioniert20, 20
, Größe300x300
, auf Darstellungsfeld5
:Das Setup entspricht weitgehend der ersten Version des Skripts.
Beachten Sie, dass auch dieses Skript nur dann ordnungsgemäß funktioniert, wenn das definierte Fenster (Position / Größe) vollständig in das Zielansichtsfenster passt.
Das Skript:
Anwendungsfenster mit Argumenten öffnen
Um den Job zu beenden, beantworten Sie Ihre Frage vollständig:
Wenn Sie das Skript wie folgt ausführen:
Es wird ein Standardfenster auf den Ziel-Desktops geöffnet .
Mit der neuesten Version des Skripts können Sie jedoch ein zusätzliches Argument hinzufügen , um das Anwendungsfenster zu öffnen, z. B. a
url
:z.B:
Wenn das (zusätzliche) Argument Leerzeichen enthält, verwenden Sie Anführungszeichen. Das obige Beispiel öffnet ein
google-chrome
Fenster in Ansichtsfenster 3 und öffnet dasurl
http://askubuntu.com
.Sie können Befehle verketten, um mehrere Fenster / URLs in verschiedenen Arbeitsbereichen in einem Befehl zu öffnen, z.
quelle
Dies erweitert die großartige Antwort von @Jacob Vlijim oben mit einem leicht modifizierten
setwindow
Skript:Eine Beschreibung der Änderungen:
python3
zupython
(nur eine persönliche Präferenz)sys.argv
umargparse
für eine Leitungsschnittstelle besser Befehlswhile
Schleife 0,5 Sekunden bis 1 volle Sekunde Schlafzeitxrandr
AbhängigkeitHINWEIS: Dies ist nur eine leicht verbesserte Version, die ich für den persönlichen Gebrauch auf Debian Jessie LXDE geschrieben habe. Ihre Ergebnisse können variieren.
quelle
Für Interessenten habe ich Desktopen implementiert: github.com/snitko/desktopen
Sie können ein Skript zum Öffnen von Fenstern in verschiedenen Ansichtsfenstern und Anzeigen auf sehr benutzerfreundliche Weise schreiben.
quelle