EN

Screenshots in Sway

Speziell für den Sway-Fenstermanager gibt es Anwendungen zur Aufnahme von Screenshots, die über die Kommandozeile ausgeführt werden. Dazu gehören grim, grimshot und slurp. Mit wl-clipboard lassen sich Bildschirmaufnahmen direkt in der Zwischenablage speichern.

Im Fedora Sway Spin sind diese Tools bereits vorinstalliert. Nachfolgend werden einige Anwendungsbeispiele vorgestellt, die die Funktionen dieser Programme veranschaulichen.

Grim: das Hauptwerkzeug

Das zentrale Werkzeug für Screenshots in Sway ist grim. Es bietet eine flexible Schnittstelle und lässt sich hervorragend mit anderen Anwendungen kombinieren. Ein Beispiel:

grim -g "10,20 300x400" # Take screenshot of an area
grim -g "$(slurp)" # Let another tool provide the area

Die erste Zeile zeigt an, in welchem Format ein Bildschirmbereich für grim anzugeben ist. Mit slurp können wir einen Bereich interaktiv mit der Maus auswählen; die Ausgabe entspricht dabei exakt dem erwarteten Format für grim. So können wir die Ausgabe als Argument übergeben, in dem wir sie per Kommandosubstitution ("$(...)") einfügen.

grim speichert die Bildschirmaufnahme in einer Datei. Diese enthält einen Zeitstempel und befindet sich standardmäßig in ~/Pictures, wobei das Standardverzeichnis durch die $GRIM_DEFAULT_DIR-Umgebungsvariable spezifiziert werden kann. Mit grim -o [FILE] kann explizit ein Output angegeben werden.

Darüber hinaus kann grim die Aufnahme direkt an die Standardausgabe (stdout) geben. Auf diese Weise können wir sie an die Zwischenablage übergeben, etwa mithilfe von wl-copy:

grim - | wp-copy

So kann die Aufnahme bequem in eine geeignete Anwendung (wie GIMP) eingefügt werden.

Für Webentwickler interessant ist vielleicht noch der Hinweis, dass grim, slurp und ImageMagick zusammen genutzt werden können, um die Farbe eines angeklickten Pixels zu extrahieren (color picker).

grim -g "$(slurp -p)" -t ppm - | magick - -format '%[pixel:p{0,0}]' txt:-

Hier wird ein Pixel mit slurp ausgewählt, grim erstellt einen Screenshot im ppm-Format, und magick analysiert die Farbe des Pixels. Das Ergebnis wird im Terminal ausgegeben.

Grimshot: Modalitäten der Aufnahme

Grimshot ist ein hilfreiches Skript, das von einigen Details bei der Nutzung von grim abstrahiert. Dazu wird eine vereinfachte Schnittstelle bereitgestellt, über die Modalitäten spezifiziert werden. Hier die Synopsis mit den interessantesten Bestandteilen:

grimshot [--cursor] [--wait N] (copy|save) [TARGET] [FILE]

Durch das --cursor-Flag wird der Mauszeiger in die Aufnahme aufgenommen. Mit --wait N kann festgelegt werden, nach wie vielen Sekunden der Screenshot aufgenommen werden soll. Mit copy oder save ... [FILE] wird festgelegt, ob in der Zwischenablage oder in einer Datei gespeichert werden soll.

Grimshot spricht beim Aufnahmeobjekt vom [TARGET]. Vier Optionen sind von besonderem Interesse.

  • Im einfachsten Fall wird ein Screenshot vom gesamten sichtbaren Bereich aufgenommen (screen).
  • Es kann ein variabler Bildschirmbereich mit der Maus gewählt werden (area).
  • Es kann ein Screenshot von einem Fenster aufgenommen werden: entweder vom aktiven Fenster (active) oder von einem Fenster, das man per Mausklick auswählt (window).

Mit dem folgenden Befehl würde eine Aufnahme vom aktiven Fenster in einer Datei im Benutzerverzeichnis gespeichert:

grimshot save active ~/screenshot.png

Bedienung

Die genannten Befehle sind nicht primär dafür konzipiert, per Hand eingegeben und ausgeführt zu werden. Für eine komfortable Nutzung werden sie per Tastendruck ausgeführt, wobei die bevorzugten Tastenkombinationen in der Sway-Konfiguration festgelegt werden.

Tastaturbelegungen werden in Sway folgendermaßen definiert:

bindsym <key combination> exec <command>

Die Konfiguration könnte folgendermaßen aussehen:

# Take screenshots:
    set $screenshot_out $(xdg-user-dir PICTURES)/screenshots/screenshot-$(date +"%Y%m%d-%H%M%S").png
    bindsym $mod+Shift+s exec grimshot save screen $screenshot_out
    bindsym $mod+Shift+w exec grimshot save active $screenshot_out
    bindsym $mod+Shift+a exec grimshot save area $screenshot_out

Zunächst wird in einer Variable festgehalten, an welchem Ort und mit welchem Dateinamen der Screenshot gespeichert werden soll. Im Beispiel sind das ~/Pictures/screenshots und screenshot-yyyymmdd-hhmmss.png. Das für den Zeitstempel gewählte Format lässt sich relativ leicht lesen und erlaubt eine chronologische Sortierung per Dateiname. Im Anschluss daran werden Tastenkombinationen mit einigen der oben erläuterten Befehlen verknüpft.

Automatische Konvertierung

Erstellte Screenshots lassen sich direkt in andere Formate umwandeln, indem der grim-Output per Pipe an ImageMagick weitergeben wird. Für Webanwendungen empfiehlt sich beispielsweise das von Google entwickelte WebP-Format.

Um den erstellen Screenshot an die Standardausgabe (stdout) zu übergeben, wird - als Dateiname gesetzt. ImageMagick kann ihn über die Standardeingabe (stdin) entgegennehmen, die ebenfalls durch - gekennzeichnet wird. Das gewünschte Format erkennt es anhand der Dateiendung.

Ein Beispielbefehl zur Umwandlung in das WebP-Format könnte wie folgt aussehen:

grimshot save screen - | magick - -quality 85 $(xdg-user-dir PICTURES)/out.webp

Die automatische Konvertierung kann direkt in die Sway-Konfigurationsdatei integriert werden, sodass Screenshots stets in einem bestimmten Format gespeichert werden. Eine mögliche Konfiguration könnte so aussehen:

set $screenshot_out $(xdg-user-dir PICTURES)/screenshots/screenshot-$(date +"%Y%m%d-%H%M%S").webp
bindsym $mod+Shift+s exec grimshot save screen - | convert - -quality 85 $screenshot_out

In diesem Beispiel wird ein Screenshot erstellt und direkt als WebP-Datei mit hoher Qualität (85%) im Verzeichnis ~/Pictures/ abgelegt.

Artikel vom 6. September 2024.