Artikel mit Tag icewm
Mit SnapForX Aerosnap für beliebige Linux-Fenstermanager nachrüsten
Die von Windows 7 eingeführten Aerosnap-Fensterkontrollen fand ich schon immer großartig. Mit ihnen werden zur linken Monitorseite gezogene Fenster auf die linke Hälfte des Monitors maximiert, die rechte maximiert sie auf die rechte Hälfte, zieht man sie an den obere Rand bedecken sie den ganzen Bildschirm. Sollen die Fenster wieder klein werden zieht man sie einfach nach unten, schon springen sie zurück, das gefiel mir besonders.
In der Linuxwelt ist das auch schon länger angekommen, aber hauptsächlich in den größeren Desktopumgebungen. Kleinere Fenstermanager wie das von mir genutzte IceWM beherrschen solche dynamischen Kontrollen normalerweise nicht. Bei ihnen sind die Fenster so starr wie bei Windows 95. Tiling-Fenstermanager können zwar auch die Fenster geschickt anordnen, aber ist ihr Ansatz dafür schon sehr anders. Und an Kontrollen über die Tastatur wie durch quicktile konnte ich mich nie gewöhnen.
Deshalb habe ich mit SnapForX ein Skript geschrieben, das den Ansatz der Aerosnap-Kontrollen für X-Fenstermanager nachrüsten kann. Perfekt ist es nicht, als angenehm empfinde ich es trotzdem.
SnapForX in aller Kürze
So sieht es in Bewegung aus, der gezeigte Fenstermanager ist IceWM:
SnapForX ist ein Bashskript. Es benutzt eine wilde Mischung aus Hilfsprogrammen um diese Fensterkontrollen nachzubilden – besonders xdotool und wmctrl, aber auch xinput, awk, cut und xprop werden gebraucht. Das Skript lässt sich dann direkt ausführen. Die alternative Installation ist aber auch nicht kompliziert, das Skript einfach irgendwo in den PATH schieben und starten:
snapforx -l -r -t -iof
-l
, -r
und -t
aktivieren die Reaktion auf die linke, rechte und obere Monitorseite, -iof
lässt das Skript Vollbildanwendungen ignorieren.
Der Code ist ein Fork von cornora, einem Skript um Befehle durch Verharren des Mauszeigers in den Bildschirmecken auszuführen.
Der Ansatz
Der X-Server lässt zwar den Zugriff auf viele Informationen zu und ermöglicht auch Fensterkontrollen von außerhalb des Fenstermanagers, aber um Fensterkontrollen im Stil von Aerosnap umzusetzen waren ein paar Tricks erforderlich.
Um zu erkennen, ob der Mauszeiger am Rand des Bildschirms ist, wird regelmäßig die Mauszeigerposition abgegriffen. Ist deren X-Wert nahezu 0 ist er links, ist er fast so groß wie der Monitor breit ist sind wir am rechten Rand, ist der Y-Wert kleiner 1 ist der Zeiger ganz oben. Ob der Mauszeiger dort verharrt wird getestet, indem diese Prüfung mit einer kleinen Verzögerung zweimal hintereinander ausgeführt wird. Das ist so ziemlich wie cornora funktioniert, nur leicht erweitert.
Aber hieran knabberte ich lange: Wie erkennen, dass ein Fenster bewegt werden soll? Die üblichen Werkzeuge wie xdotool geben da keine brauchbaren Informationen. Ich könnte mir alle Fenster und ihre Position ausgeben lassen, aber wenn der Nutzer ein maximiertes Fenster nach unten zu schieben versucht ändert sich keine Fensterposition.
Der Ansatz jetzt kombiniert mehrere Ideen:
-
Schaue mittels
xinput
, ob die linke Maustaste gedrückt wird. -
Wenn ja, gucke ob der Mauszeiger im oberen Bereich eines Fensters ist. Das ist ein Vergleich von
xdotool getmouselocation
mit der Y-Koordinate ausxdotool getactivewindow getwindowgeometry
. Das aktiviert für 5 Takte à 0,1 (einer unbekannten Einheit, weil ich die delay-Funktion nicht verstehe) den Bewegungsmodus, ab jetzt können Fenster maximiert werden. - Zum Unmaximieren kommt die letzte Erkennung hinzu: Wenn der Mauszeiger jetzt, also bei gedrückter Maustaste auf einer Fensterdekoration startend, zwei Takte à 0,5 unbekannter Einheit nach unten bewegt wird, dann wird das aktive Fenster demaximiert.
Dass diese Erkennungen zusammengreifen und tatsächlich halbwegs ordentlich funktionieren, damit hatte ich nicht wirklich gerechnet. Entsprechend zufrieden bin ich gerade mit dem Ergebnis.
Limitierungen
Allerdings hat dieser Ansatz natürlich seine Probleme. Ich sehe keinen Weg die Animationen einzubauen, die bei Windows und den Desktopumgebungen vorankündigen wie das Fenster beim Loslassen der Maustaste sich bewegen wird. Stattdessen wird das Fenster direkt bewegt, was dem Nutzer weniger Kontrolle gibt. Zudem springen die Fenster gerne mal völlig unflüssig hin und her, z.B. wenn man nach dem vertikalen Maximieren an einer Monitorecke dann nochmal bei gedrückter Maustaste den Mauszeiger bewegt. Vielleicht lässt sich das noch etwas besser glattbügeln, aber dass es perfekt wird scheint unmöglich, weil da der Fenstermanager und das Skript sich praktisch um die Kontrolle des Fensters streiten. Vielleicht könnte das Skript irgendwie anders markieren, wie es das Fenster bewegen will, und es ebenfalls erst beim Loslassen der Maustaste durchführen.
Kleinere Unfertigkeit: Da xinput die ID einer bestimmten Maus braucht sucht sich das Skript am Anfang eine aus. Der Code unterstützt also weder Mauswechsel während des Betriebs noch mehrere Mäuse an einem System, das dürfte besonders manche Laptopnutzer blockieren. Wer da Ideen für eine bessere Lösung hat möge einen PR einsenden.
Vielleicht ein weiterer Baustein für den eigenen Linuxdesktop. Zumindest empfand ich es als nette Trickserei. Vielleicht geht es ein paar weiteren hier mitlesenden Linuxern auch so. Verbesserungsvorschläge und vor allem Codeverbesserungen wären gern gesehen.
IceWM: Tooltip umpositionieren
Wenn ShowWorkspaceStatus an ist, wird in einer kleinen Nachricht der Name der aktuellen Arbeitsfläche angezeigt. Diese Nachricht liegt immer knapp über der Taskbar. Wird diese gar nicht angezeigt, z.B. weil ein Dock ihre Funktion übernimmt das von der Nachricht blöderweise fast verdeckt wird, bekommt man die Anzeige scheinbar nur dort weg, indem man die gesamte unsichtbare Taskbar per TaskBarAtTop=1 nach oben legt.
IceWM unkonfigurierbar?
Bei ghacks.net wurde in einem "Get to know Linux"-Artikel IceWM vorgestellt. Das Fazit ist nicht negativ, aber negativer als es sein müsste - was vor allem dem hässlichen Standardaussehen und einer falschen Einschätzung bezüglich der Konfigurierbarkeit geschuldet ist.
Es wird nämlich die Behauptung aufgestellt, dass IceWM nicht wirklich konfigurierbar sei. Ein überraschende Feststellung, die sich so gar nicht mit meinen Erfahrungen deckt. So wird behauptet:
Panel: The IceWM panel serves the same function as any panel from any other desktop.Don’t expect, however, to be able to do much configuration with the IceWM panel.
Dem seien mal ein paar der wichtigsten Möglichkeiten gegenübergestellt:
- WorkspaceNames: Es sind nicht nur nahezu beliebig viele Workspaces anlegbar, sondern man kann sie auch individuell benennen. Zugegeben: Das sieht in der einfachen Taskbar dann nicht unbedingt toll aus.
- TaskBarDoubleHeight: Ist die normale Taskbar zu langweilig? Doppelte Größe bedeutet doppelten Platz. So wird dann auch die integrierte Befehlseingabe direkt eingeblendet, die sonst per "Windows + Leertaste" geöffnet werden kann.
- TaskBarShowCPUStatus: In der Taskbar von IceWM kann nicht nur der CPU-Load und die Netzwerkauslastung angezeigt werden. Zusätzlich steht ein Mail-Applet und eine Akkuanzeige bereit.
- TaskBarAutoHide: Soll die Taskbar nicht immer angezeigt werden, kann sie hiermit nur bei Bedarf eingeblendet werden
- TaskBarShowStartMenu: Nicht nur das Startmenü ist ausblendbar, sondern alle Elemente könnten entfernt werden. Ebenso wie die gesamte Taskbar.
- TaskBarShowCollapseButton: Per Klick auf diesen Button wird die Taskbar eingefahren. Praktisch, wenn man einen Film guckt. Aber natürlich könnte auch eingestellt werden, dass die Taskbar immer unter allen Fenstern verweilt.
Das sollte als Beispiel genügen. Selbst für die Taskbar gibt es noch mehr Optionen. Die meisten anderen Bestandteile von IceWM sind ebenso konfigurierbar. Bei Berührung des Randes die Arbeitsfläche wechseln? Einzelne Fenster immer am gleichen Ort starten lassen? Bestimmte Fenster unbeweglich machen? Fenster in die Titelleiste einrollen? Das Fokusverhalten der Maus ändern? Alles kein Problem - ebenso wie vieles mehr.
Was natürlich nicht heißt, dass man nicht über Bereiche stolpern kann, bei denen das gewünschte Verhalten nicht erreichbar ist. Aber wenn IceWM eines nicht ist, dann vergleichsweise unkonfigurierbar. Oder kennt jemand einen flexibleren Fenstermanager?
IceWM-Design: n-iceflame
N-iceflame ist ein schwarzes Design, das mit einem ganz leichten Glanzeffekt versehen ist. Intention war, ein Design zu haben, das mit vielen verschiedenen Hintergrundbildern zurechtkommt - und dabei ist ein schwarzes wahrscheinlich keine ganz verkehrte Wahl.
Es basiert auf n-icedesert glossy und red-flameO.
Download: n-iceflame-0.1.tar.gz
PS: Auf Box-Look kann das Design bewertet werden und dort steht ein anderer Screenshot bereit.
Temperaturanzeige in der Taskbar
Die CPU-Temperaturanzeige in die Taskbar zu legen ist ein interessanter, da universell einsetzbarer Ansatz. Zwar bringt IceWM zumindest im Testing-Zweig das mit, und auch Gnome hat ein Applet dafür, aber andere Oberflächen können das nicht.
Statt also auf eingebaute Funktionen zu vertrauen könnte man dafür ksensors verwenden. Man installiert das Paket ksensors und führt danach
sudo sensors-detect
aus. Dabei wird am Ende eine Liste von Modulen ausgegeben, die per
modprobe Modul
geladen und in die /etc/modules eingetragen werden sollten.
Nun kann der Befehl ksensors ausgeführt werden. Rechsklick auf das Taskbar-Icon, "Configure", öffnet das Menü. Dort sind in der linken Leiste die Sensoren aufgelistet. Manchmal überschneiden sich die, und einige Werte sind ohne weitere Konfiguration schlichtweg unglaubwürdig, aber einer der Sensoren sollte funktionieren. Mittels "Andocken -> Sichtbar" wird die Anzeige als Taskicon ausgeben. Auch das Farbschema kann hier konfiguriert werden.
Wenn die KDE-Abhängigkeiten sowieso installiert sind oder nicht weiter stören ist das eine einfache Möglichkeit, eine Temperaturanzeige zu realisieren.
Ice-win 0.6: spricht nun deutsch
Ice-win ist mein Versuch eines grafisches Programms zum Konfigurieren der winoptions von IceWM. So ist es möglich, bequem einem Fenster einen Arbeitsbereich zuzuordnen oder sonstige fensterspezifischen Einstellungen zu setzen.
Version 0.6 beinhaltet einige Verbesserungen. An der Oberfläche wird man die deutsche Übersetzung bemerken, außerdem wurde die Option "startMinimized" integriert. Intern wurde der Code aufgeräumt (um 100 Zeilen reduziert, sinnvoller strukturiert) und ein paar Bugs eliminiert.
ice-prefer
Ice-prefer ist ein Konfigurationsprogramm für IceWM. Es wurde in Bash geschrieben und nutzt als Oberfläche Xdialog und damit GTK+. Durch diese Kombination sollte es auch auf schwächeren Computern problemlos laufen.
Anlass für diese Vorstellung ist die neue Version 0.6. Denn sie vereinigt einige Verbesserungen. Die wichtigsten gleich sichtbaren: Das Programm spricht nun deutsch und es wurden neue Dialoge integriert, z.B. ein Farbauswahldialog. Aber auch unter der Haube wurde einiges verbessert, leistungskritische Stellen entschärft und einige Bugs beseitigt. Neue Optionen, z.B. die TaskBarShowCollapseButton-Einstellung, komplettieren das Release. Das Changelog nennt auch nicht alle Interna, vermittelt aber einen tieferen Einblick.
ice-prefer ist das Schwesterprogramm von ice-win und ihm auch sehr ähnlich, nur das ice-win die winoptions (die Einstellungen eines Fensters) editiert, ice-prefer dagegen die preferences (die Einstellungen von IceWM insgesamt).
Rückmeldung jedweder Art, insbesondere aber Bugreports, sind willkommen.
Download bei SourceForge, ein .deb und ein .tar.gz samt Installer stehen bereit.
IceWM-Design: red-flame 0.4
Mein Internetzugang ist wieder verfügbar. Das ist die passende Gelegenheit, die aktualisierte Version von red-flame vorzustellen.
Die Veränderungen sind hauptsächlich Anpassungen an die Neuerungen, die ich mit blue-flame bereits ausprobierte: Ein Verlauf/Lichteffekt im Menü und die "richtige" Position des Collapse-Buttons.
Download: red-flame-0.4.tar.gz
IceWM-Design: blue-flame
Es ist soweit: blue-flame ist fertig. Die blaue Variante des IceWM-Designs red-flame ist heller als das Original und wirkt somit frischer, basiert aber auf den gleichen Designgrundlagen. Der helle Rahmen um die Fenster sowie die Buttons bleiben erhalten.
Gleichzeitig ist das neue Design auch eine Erweiterung, da es einen Farbton mehr nutzt (red-flame erstand aus der Überlegung heraus, dass eine Grundfarbe mit einer helleren Betonungsfarbe zusammen mit Schwarz und Weiß ausreichen müssten, um ein ansprechendes schlichtes theme zu erstellen, wie ich es damals noch nannte).
Auch profitiert es vom Gelernten: Es startet gleich mit schöneren Buttons und nutzt Verlaufseffekte im Menü.
Download: blue-flameO-0-1-tar (gz, 140 KB) (als blue-flameO-0-1.tar.gz speichern)
Vorschau: blue-flame
Mir wurde ja im Pinguinzubehör angeraten, red-flame auch in andere Farben zu überführen. Ehrlich gesagt fällt mir das gar nicht so leicht.
Mir war das gar nicht mehr so bewusst, aber red-flame ist nicht einfach rot. Es ist rot-schwarz, auch das Hintergrundbild ist teilweise so dunkel, dass es schwarz wird. Das beruhigt das Auge. Entfernt man die schwarzen Anteile indem man das Bild aufhellt, wirkt es zu erschlagend.
Blau-Schwarz ist anscheinend nicht die perfekte Kombination. Das Design wirkte trostlos und erdrückend. Also habe ich es aufgehellt. So sieht man auch einiges mehr vom Flammenspiel des Hintergrundes.
Dabei kam es aber auch zu Problemen: Durch Aufhellen, Schärfen und Kantenglätten wuchs das Bild auf 1,7 MB an. Inakzeptabel groß. Zum Glück sieht in der blauen Variante das .jpg nicht so schlecht aus wie bei der roten, ich konnte darauf umstellen und es so auf 132 KB reduzieren.
Also: Viele kleine Probleme. Ich bin mir nicht sicher, ob das gut wird.
Eine Vorschau gibt es hiermit:
Und wer die 0.1-pre Version schonmal austesten will (und mir evtl. mit Hinweisen zur Hand gehen) kann das sehr gerne tun:
blue-flameO-tar (gz, 141 KB)
Kleine Idee ganz groß: Der Taskbar-Collapse-Button
Kurzer Einschub: Bei IceWM kann man die Taskbar wegklicken. Das ist ziemlich praktisch z.B. beim Video gucken, wenn man mal nicht von blinkenden Chatnachrichten genervt werden will, die Taskbar aber nicht immer im Hintergrund sein soll.
Zum Collapse-Button gehört natürlich ein Expand-Button, der die Taskbar wieder ausfährt.
Im Standarddesign werden diese beiden Buttons einfach und selbsterklärend, aber nicht unbedingt schön präsentiert (zum Ausprobieren einfach mit der Maus drüber fahren):
Der Pfeil erklärt zwar die Funktion, ist aber eher pixelig. Dazu funktioniert er in manchen Farbkombinationen nicht so gut, leider auch in einer, die ich nutzen wollte.
Also musste eine eigene Lösung her.
Der Weg dahin war etwas holprig. Zuerst kam die Idee, das ganze rund zu machen. Sicher bin ich mir nicht mehr, was dazu der Ideengeber war. Habe ich das woanders gesehen, oder spielte ich einfach mit der Kreis-markieren-Funktion herum?
Egal, das sah so aus:
Ganz passte das auch noch nicht. Zwar gefällt mir die Idee als Schritt in eine neue Richtung, doch ist die Grafik eher plump und wenig selbsterklärend. Auch irritiert die Drehung das Auge.
Der nächste Schritt kam mit der Überarbeitung des Designs, wobei ich dank neuem Input auch auf solche Feinheiten achten wollte. Zwar wurde der Knopf selbst nicht angesprochen, doch sollte nichts bestehen, was mich selbst störte.
Eine feinere Linie sollte da wirken:
Und jetzt die kleine Idee, die ich für gut halte - für die zwingende Weiterentwicklung dieses Ansatzes. Während des Spielens an der blauen Version des Designs kam der Gedanke: Warum den Expand-Button nicht umdrehen? So sieht das nun aus:
Nun fließt die Taskbar beim Einfahren in den Knopf und verlässt ihn beim Ausfahren wieder. Dieses Design unterstreicht die Funktionalität und sieht in meinen Augen ganz gut aus.
Was denken andere darüber? Klar, es ist nur ein kleiner Knopf, eine Kleinigkeit im wahrsten Sinne. Aber ist diese Lösung nicht schön? Geht es anders besser? Ist vielleicht das Standarddesign doch überzeugender?
IceWM-Design: red-flameO
Mein eigenes IceWM-Design heißt red-flame und existiert schon eine ganze Weile. Vorgestellt habe ich es hier aber noch nicht, das kürzlich fertiggestellte Update sei Anlass hierfür.
So viel gibt es auch gar nicht zu sagen. Es ist rot, mal was anderes ;) Die Rahmen werden durch eine hellere Farbe hervorgehoben und sind breit genug um sie ohne Mühe zu greifen.
Mit der neuen Version 0.3 wurden einige Fehler korrigiert.
Der Taskbar-Collapse-Button wurde durch eine feinere Grafik ersetzt, das Ubuntuuser-Logo wird nicht mehr als Startbutton genutzt (was ich nicht durfte, mir aber früher nicht klar war, sorry dafür) und Rahmenecken der inaktiven Fenster sind nun nicht mehr weiß, weil es zu schnell irritierend wirkte.
Wenn das Bild nicht überzeugt, können es auch keine Worte:
IceWM-Design: N-Icedesert
Ein wirklich schönes IceWM-Design gibt es beim Pinguinzubehör: N-Icedesert basiert auf dem Standarddesign, ist jedoch wesentlich feiner gearbeitet und nutzt schönere Farben. Es ist nicht nur in einer vorhanden, sondern mehrere Farbkombinationen stehen zur Auswahl. Hier die Ubuntu-braune Variante:
ice-win verbessert
Da das Programm hier noch nicht erwähnt wurde, kurz eine Vorstellung: ice-win soll dabei helfen, die winoptions von IceWM zu konfigurieren. Damit kann man dann z.B. einstellen, auf welcher Arbeitsfläche welches Fenster erscheinen soll.
Geschrieben wurde es ursprünglich 2007. Inzwischen habe sogar ich etwas dazugelernt ;)
Da das Programm in Sachen Benutzerführung noch etwas Nachhilfe gebrauchen konnte und ich in der Zwischenzeit zwei Bugs entdeckte, habe ich mich nochmal daran gesetzt und ein paar Verbesserungen eingebaut, z.B. das Ausgrauen von derzeit nicht nutzbaren Optionen.
Zu finden ist die neue Version auf der Projektseite.
IceWM: Taskbarverstecker aktivieren
Die Taskbar von IceWM kann man normalerweise per Klick auf den Knopf ganz rechts entfernen. In den Standardeinstellungen der neuen Version ist das aber wohl deaktiviert, oder das Ubuntupaket wurde entsprechend angepasst. Wie auch immer, dieses nützliche Feature kann man wieder aktivieren, indem "TaskBarShowCollapseButton=1" in die ~/.icewm/preferences eingefügt wird.