Posts mit dem Label Multi-Monitor werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Multi-Monitor werden angezeigt. Alle Posts anzeigen

24. September 2013

GNOME: Titelleiste von maximierten Fenstern ausblenden auf Multi-Monitor-Systemen

Bereits in diesem Artikel wurde eine Möglichkeit vorgestellt, wie die Titelleisten von maximierten Fenstern ausgeblendet und deren Titel und Schaltflächen stattdessen in dem Top-Panel der GNOME-Shell angezeigt werden können, um wertvollen vertikalen Platz auf dem Bildschirm zu sparen. Wie jedoch anschließend im Fazit der Artikelserie, zu der dieser Artikel gehört, festgestellt wurde, eignet sich diese Möglichkeit weniger für Systeme, die Gebrauch von mehreren Monitoren machen, da die Titelleisten von maximierten Fenstern, die sich auf Monitoren befinden auf denen kein Panel angezeigt wird, ebenfalls ausgeblendet werden und deren Titel und Fenster-Schaltflächen dadurch verloren gehen. Aus diesem Grund habe ich einige bereits existieren Gnome Shell Extensions so modifiziert, dass es möglich ist, dass die Titelleisten von maximierten Fenstern, die sich auf dem Monitor befinden auf dem das Top-Panel der GNOME-Shell angezeigt wird, ausgeblendet werden, während die Titelleisten von Fenstern auf den übrigen Monitoren erhalten bleiben. In diesem Artikel sollen diese Shell-Erweiterungen vorgestellt werden und ihre Verwendung erläutert werden. Auf den unten dargestellten Screenshots ist das Ergebnis zu sehen, das dadurch erreicht werden kann.

Maximierte Fenster auf einem Dual-Monitor-System (Klicken zum Vergrößern)

Die Darstellung des GNOME-Panels wenn auf dem entsprechenden Monitor kein Fenster maximiert ist (Klicken zum Vergrößern)

Die Erweiterung "Hide Titelbar"


Die Gnome Shell Extension "Hide Titlebar" ist ein Fork der bereits bestehenden Extension "Maximus", die es erlaubt die Titelleisten von maximierten Fenstern auszublenden. Deren Konfigurationsdialog wurde, wie es auf dem unter diesem Abschnitt dargestellten Screenshot zu sehen ist, um Einstellungsmöglichkeiten erweitert, die es erlauben, dass nur Fenster berücksichtigt werden, die sich auf dem Monitor befinden, der das Top-Panel der GNOME-Shell beinhaltet. Außerdem lässt sich festlegen um welchen Monitor es sich dabei handelt.

Der Konfigurationsdialog der Gnome Shell Extension "Hide Titlebar" (Klicken zum Vergrößern)

Wenn die entsprechende Option aktiviert ist, werden nur die Titelleisten von Fenstern, die sich auf dem Monitor, der das GNOME-Panel beinhaltet, befinden, ausgeblendet. Die übrigen Fenster bleiben unangetastet und deren Titelleisten, samt Titel und Schaltflächen, werden somit weiterhin angezeigt. Die Gnome Shell Extension bietet ihrem Original entsprechend außerdem die Möglichkeiten auch die Titelleisten von teilweise maximierte Fenster auszublenden und eine Black- bzw. Whitelist für bestimmte Fenster zu definieren.

Da die hier genannten Erweiterungen zum Zeitpunkt der Veröffentlichung dieses Artikels noch nicht auf der Webseite extensions.gnome.org, von der aus Gnome Shell Extensions bequem aus dem Broweser heraus installiert werden können, freigegeben wurden, muss die Extension stattdessen über diesen Link als zip-Archiv manuell heruntergeladen und installiert werden. Unter dieser Adresse ist der Source-Code der Erweiterung außerdem auf Sourceforge verfügbar. Nachdem die Datei heruntergeladen wurde, kann sie über die folgenden Konsolenbefehle entpackt und installiert werden, wobei die Extension exklusiv für den aktuellen Benutzer in dem Verzeichnis ~/.local/share/gnome-shell/extensions installiert wird. Der Dateiname des zip-Archivs muss hierbei eventuell an die jeweilige Version angepasst werden.
 $ unzip gnome-shell-extension-hide-titlebar-v.1.0.zip  
 $ cd gnome-shell-extension-hide-titlebar  
 $ ./INSTALL.sh  
Nach die Shell-Erweiterung auf diese Weise installiert wurde, kann sie über ein Programm wie beispielsweise "Gnome Tweak Tool" aktiviert werden und deren Konfiguration angepasst werden.

Die Erweiterung "Buttons to Panel"


Um nicht nur die Titelleisten von maximierten Fenstern auszublenden, sondern auch deren Schaltflächen im Top-Panel der GNOME-Shell anzuzeigen kann die Gnome Shell Extension "Buttons to Panel" genutzt werden, bei der es sich um einen Fork der Extension "Window Buttons" handelt. Auch diese Shell-Extension wurde so erweitert, dass es möglich ist, dass nur Fenster berücksichtigt werden, die sich auf dem Monitor befinden, der das GNOME-Panel beinhaltet. Der entsprechende Konfigurationsdialog ist auf dem unten dargestellten Screenshot zu sehen.

Der Konfigurationsdialog der Gnome Shell Extension "Buttons to Panel" (Klicken zum Vergrößern)

Für Auswahl, wann die Fenster-Schaltflächen im Top-Panel der GNOME-Shell dargestellt werden sollen, sollte die Option "any window maximized" gewählt werden, so dass diese immer angezeigt werden wenn ein Fenster auf dem entsprechenden Monitor maximiert ist, selbst wenn es sich hinter einem nicht maximierten Fenster befindet. Außerdem bietet der Konfigurationsdialog die Möglichkeit die Position der Schaltflächen im Panel zu bestimmen und ein bestimmtes Button-Thema zu wählen.

Die Gnome Shell Extension "Buttons to Panel" kann unter diesem Downloadlink heruntergeladen werden und ist darüber hinaus unter dieser Adresse auf Sourceforge verfügbar. Nachdem das zip-Archiv heruntergeladen wurde, kann es über die folgenden Konsole, die in einem Terminal ausgeführt werden müssen, entpackt und die Erweiterung installiert werden.Der konkrete Dateiname des zip-Archivs muss dabei eventuell angepasst werden.
 $ unzip gnome-shell-extension-buttons-to-panel-v.1.0.zip  
 $ cd gnome-shell-extension-buttons-to-panel  
 $ ./INSTALL.sh  
Um die Shell-Extension zu aktivieren bedarf es ebenfalls eines Programms wie z.B. "Gnome Tweak Tool", über das auch deren Einstellungen erreichbar sind.

Die Erweiterung "Title to Panel"


Standardmäßig wird im Top-Panel der GNOME-Shell lediglich der Name der aktuell aktiven Anwendung angezeigt. Um stattdessen den kompletten Titel des aktuell maximierten Fensters dort anzuzeigen, kann die Gnome Shell Extension "Title to Panel" genutzt werden, bei der es sich um einen Fork der Extension "Status Title Bar" handelt. Die Einstellungsmöglichkeiten der Shell-Erweiterungen wurden im Vergleich zum Original um Möglichkeiten ergänzt, nur maximierte Fenster, die sich auf dem Monitor befinden, der das GNOME-Panel beinhaltet, zu berücksichtigen. Der Einstellungsdialog der Extension ist auf dem unten dargestellten Screenshot zu sehen. Die Standardeinstellungen der Erweiterung entsprechen bereits der empfohlenen Konfiguration.

Der Konfigurationsdialog der Gnome Shell Extension "Title to Panel" (Klicken zum Vergrößern)

Um die Gnome Shell Extension zu installieren ist es zunächst notwendig die entsprechende zip-Datei unter diesem Link herunterzuladen. Sie ist außerdem unter dieser Adresse auf Sourceforge frei verfügbar. Über die folgenden Konsolenbefehle kann die Extension installiert werden. Der Dateiname der zip-Datei muss hierbei eventuell angepasst werden.
 $ unzip gnome-shell-extension-title-to-panel-v.1.0.zip  
 $ cd gnome-shell-extension-title-to-panel  
 $ ./INSTALL.sh  
Für die Aktivierung der Extension ist ein Programm wie "Gnome Tweak Tool" notwendig, über das auch deren Einstellungen erreichbar sind.

Zur Verwendung der Extension "Title to Panel" werden außerdem die Extensions "Extend Left Box" und "Frippery Move Clock" empfohlen. Erstere sorgt dafür, dass der Titel, der in dem Top-Panel der GNOME-Shell dargestellt wird, den kompletten verfügbaren horizontalen Platz einnehmen kann, letztere verschiebt die Uhr, die standardmäßig in der Mitte des Panel dargestellt wird, nach rechts um weiteren Platz zu schaffen.

Weiterführende Links:

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:

21. August 2013

Arch Linux: Der Weg zu "meinem" GNOME - Multi-Monitor-Betrieb (Teil 4)

In dieser Serie über die Konfiguration meiner GNOME-Shell soll ein kleiner Tipp, der die Benutzung mit mehreren Monitoren für einige Benutzer erleichtern könnte, nicht fehlen. Wenn man unter GNOME 3 im Multi-Monitor-Betrieb den Workspace wechselt, so hat dies standardmäßig nur Auswirkungen auf den primären Monitor. Auf dem sekundären Monitor bleiben dagegen alle angezeigten Fenster bestehen und stellen somit quasi einen eigenen Workspace dar, der von jeglichem Wechsel ausgeschlossen ist. Dieses Verhalten, das bei so manchem Benutzer auf Widerwillen stößt, lässt sich jedoch glücklicherweise sehr simpel ändern, so dass ein Workspace-Wechsel beide Monitore umfasst. Hierfür muss lediglich der unten stehende Konsolenbefehl ausgeführt werden:
 $ gsettings set org.gnome.shell.overrides workspaces-only-on-primary false