In diesem Artikel soll eine Möglichkeit vorgestellt werden, wie unter Arch Linux, bei Benutzung der GNOME 3-Shell, Shortcuts definiert werden können, die das aktuell fokussierte Fenster auf den linken, bzw. den rechten Monitor schieben. Dabei sollen zwei verschiedene Tastaturkürzel vergeben werden, von denen eines das Fenster auf den linken Monitor verschiebt, falls es sich dort nicht bereits befindet und das andere das Fenster auf den rechten Monitor verschiebt, falls notwendig. Bei den hierfür verwendeten Shell-Skripten handelt es sich um abgewandelte Versionen des Skripts, das unter diesem Artikel von "sabel's blog" zu finden ist.
Der wesentliche Unterschied zwischen dem dort vorgestellten Skript und der Variante, die in diesem Artikel verwendet wird, liegt darin, dass das Original-Skript in zwei Skripte aufgeteilt wurde. Eines dieser Skripte verschiebt das Fenster auf den linken Bildschirm, das andere verschiebt es auf den rechten Bildschirm. Hierdurch lassen sich diese beiden Aktionen auf zwei verschiedene Shortcuts legen, während das Original-Skript das aktuelle Fenster stets auf den anderen Monitor verschiebt. Wie auch das originale Skript funktioniert die hier vorgestellte Variante nur mit zwei Monitoren der gleichen Auflösung korrekt. Als kleine Optimierung muss jedoch diese Auflösung nicht manuell in das Skript eingetragen werden. Unter dem oben verlinkten Blog-Eintrag findet sich auch eine alternative Variante, die mit unterschiedlichen Auflösungen arbeitet, welche jedoch manuell in das Skript eingetragen werden müssen. Außerdem wurde das originale Skript insofern verbessert, als dass nicht maximierte Fenster nach dem Verschieben an der selben Position in Relation zu dem jeweiligen Monitor angezeigt werden, wie es auf dem ursprünglichen Monitor der Fall war, statt das Fenster einfach immer an den linken Monitor-Rand zu verschieben.
Der wesentliche Unterschied zwischen dem dort vorgestellten Skript und der Variante, die in diesem Artikel verwendet wird, liegt darin, dass das Original-Skript in zwei Skripte aufgeteilt wurde. Eines dieser Skripte verschiebt das Fenster auf den linken Bildschirm, das andere verschiebt es auf den rechten Bildschirm. Hierdurch lassen sich diese beiden Aktionen auf zwei verschiedene Shortcuts legen, während das Original-Skript das aktuelle Fenster stets auf den anderen Monitor verschiebt. Wie auch das originale Skript funktioniert die hier vorgestellte Variante nur mit zwei Monitoren der gleichen Auflösung korrekt. Als kleine Optimierung muss jedoch diese Auflösung nicht manuell in das Skript eingetragen werden. Unter dem oben verlinkten Blog-Eintrag findet sich auch eine alternative Variante, die mit unterschiedlichen Auflösungen arbeitet, welche jedoch manuell in das Skript eingetragen werden müssen. Außerdem wurde das originale Skript insofern verbessert, als dass nicht maximierte Fenster nach dem Verschieben an der selben Position in Relation zu dem jeweiligen Monitor angezeigt werden, wie es auf dem ursprünglichen Monitor der Fall war, statt das Fenster einfach immer an den linken Monitor-Rand zu verschieben.
Erstellen der nötigen Bash-Skripte
Zunächst müssen zwei Bash-Skripte erstellt werden, die später über die zu vergebenden Shortcuts aufgerufen werden. Eines davon sorgt davon, dass das aktuell fokussierte Fenster auf den linken Monitor verschoben wird, das andere verschiebt das Fenster auf den rechten Monitor. In diesem Artikel werden diese Skripte in dem Verzeichnis /bin abgespeichert.
Um die Datei für das erste Skript zu erstellen, das das Fenster auf den linken Monitor verschiebt, kann etwa der Editor gedit über den folgenden Befehl geöffnet werden. Da nur der Root-Benutzer Schreibrechte in dem Verzeichnis /bin hat, muss der Befehl als sudo ausgeführt werden.
$ sudo gedit /bin/move-window-to-left-monitor.sh
In das dadurch geöffnete Editor-Fenster muss dann der folgende Inhalt eingefügt werden und die Datei anschließend abgespeichert werden:
#!/bin/bash
# screen width
total_screen_width=$(xdpyinfo | grep dimensions | uniq | awk '{print $2}' | cut -d 'x' -f1);
screen_width=$(($total_screen_width/2));
# active window
window=`xdotool getactivewindow`
# get active window size and position
x=`xwininfo -id $window | grep "Absolute upper-left X" | awk '{print $4}'`
w=`xwininfo -id $window | grep "Width" | awk '{print $2}'`
maximized=false
if [[ "$w" -eq "$screen_width" ]]; then
maximized=true
fi
# window on left monitor
if [ "$x" -lt "$screen_width" ]; then
:
# window on right monitor
else
if $maximized; then
wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz
fi
vert_offset=$(($x-$screen_width));
wmctrl -r :ACTIVE: -e 0,$vert_offset,-1,-1,-1
if $maximized; then
wmctrl -r :ACTIVE: -b add,maximized_vert,maximized_horz
fi
fi
Analog kann dann für das andere Bash-Skript vorgegangen werden, das das aktuell aktive Fenster auf den rechten Monitor schiebt. Um hierfür den Editor zu öffnen, kann zunächst der folgende Befehl genutzt werden:
$ sudo gedit /bin/move-window-to-right-monitor.sh
Bei dem Inhalt, der in diese Datei eingefügt werden muss, handelt es sich um das folgende Skript:
#!/bin/bash
# screen width
total_screen_width=$(xdpyinfo | grep dimensions | uniq | awk '{print $2}' | cut -d 'x' -f1);
screen_width=$(($total_screen_width/2));
# active window
window=`xdotool getactivewindow`
# get active window size and position
x=`xwininfo -id $window | grep "Absolute upper-left X" | awk '{print $4}'`
w=`xwininfo -id $window | grep "Width" | awk '{print $2}'`
maximized=false
if [[ "$w" -eq "$screen_width" ]]; then
maximized=true
fi
# window on left monitor
if [ "$x" -lt "$screen_width" ]; then
if $maximized; then
wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz
fi
vert_offset=$(($screen_width+$x));
wmctrl -r :ACTIVE: -e 0,$vert_offset,-1,-1,-1
if $maximized; then
wmctrl -r :ACTIVE: -b add,maximized_vert,maximized_horz
fi
# window on right monitor
else
:
fi
Außerdem müssen die Ausführungsrechte der beiden erstellten Dateien über die folgenden beiden Befehle angepasst werden:
$ sudo chmod 755 move-window-to-left-monitor.sh
$ sudo chmod 755 move-window-to-right-monitor.sh
Notwendige Pakete installieren
Um die zuvor erstellten Skripte ausführen zu können, müssen zusätzlich noch die Pakete xorg-utils, wmctrl und xdotool installiert werden. All diese Pakete sind über das offizielle Community-Repository von Arch Linux verfügbar und können über dessen Paketmanager "Pacman" installiert werden. Um die drei Pakete zu installieren genügt somit der folgende Befehl:
$ sudo pacman -S xorg-utils wmctrl xdotool
Shortcuts definieren
Zuletzt müssen noch die Tastaturkürzel definiert werden, über die die beiden Bash-Skripte ausgeführt werden. Hierfür bietet die GNOME-Shell bereits von Haus aus eine Möglichkeit an. Die entsprechende Einstellungsmöglichkeit findet man unter den Systemeinstellungen in der Kategorie "Tastatur". In dem Tab "Tastaturkürzel" können eigene Tastenkombinationen definiert werden, indem man die entsprechende Option aus der links dargestellten Liste auswählt. Über die Hinzufügen-Schaltfläche öffnet sich ein Dialog, in dem man eine Bezeichnung für den Shortcut, sowie den Befehl, der über ihn ausgeführt werden soll, eintragen kann. Dieser Dialog ist auf dem unten abgebildeten Screenshot zu sehen.
Der Dialog zur Konfiguration eigener Tastaturkürzel unter GNOME 3 (Klicken zum Vergrößern) |
Als Befehl für den Shortcut, der das aktuell fokussierte Fenster auf den linken Monitor verschieben soll, muss der Befehl /bin/move-window-to-left-monitor.sh eingetragen werden, für den anderen Shortcut, der das Fenster auf den rechten Monitor verschieben soll, muss der Befehl /bin/move-window-to-right-monitor.sh lauten. Nach dem die neuen Einträge erstellt wurden, können über die Rechte Spalte die jeweiligen Tastaturkürzel vergeben werden.
Weiterführende Links:
- http://sabel.bluegfx.de/2011/05/30/linux-aktives-fenster-auf-anderen-monitor-verschieben/ - Das Skript, das der hier vorgestellten Variante als Vorlage diente, in einem Blog-Artikel auf "sabel's blog"
Keine Kommentare:
Kommentar veröffentlichen