11. September 2013

Arch Linux: Aktives GNOME-Fenster per Shortcut auf anderen Monitor verschieben

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.

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:

Keine Kommentare:

Kommentar veröffentlichen