Wie kann ich mit i3 WM auf einfache Weise Screenshots von Bildschirmbereichen unter Arch Linux erstellen?

27

Vor ungefähr einem Monat bin ich von Ubuntu 14.04 LTS zu Arch gewechselt und bin mit dieser Entscheidung ziemlich zufrieden. Bei meiner neuen Distribution fehlen mir jedoch einige Funktionen, insbesondere Shift+, mit printscrdenen in Unity die Auswahl eines Bildschirmbereichs erfasst werden kann.

Ich benutze i3 WM. Meine Frage lautet also: Wie kann ich Unity-ähnliches Screenshot-Verhalten konfigurieren, um Bildschirmbereiche oder Fenster mit einem Tastaturkürzel oder etwas anderem auszulösen (ohne in Fenster-ID und Konsolenmaterial zu graben)?

ddnomad
quelle

Antworten:

29

Sie können einen importTeil von ImageMagick verwenden.

Erfassen Sie eine Region

Dadurch verwandelt sich der Cursor in ein Fadenkreuz. Wenn Sie darauf klicken und ziehen, um ein Feld zu bilden, wird dieses Feld als gespeichert ss.png.

import ss.png

Erfassen Sie die gesamte Anzeige

import -window root ss.png

Sie können das Wort auch rootdurch die Fenster-ID ersetzen , um ein bestimmtes Fenster zu erfassen.

casey
quelle
1
Einfach, perfekt, genau das, was ich brauchte - und ich musste kein anderes Programm herunterladen.
Darren Haynes
1
Sie können auch auf ein Fenster klicken import ss.png, um einen Screenshot dieses Fensters zu erstellen.
John Gowers
9

Es ist lange her, dass ich diese Frage gestellt habe, und es sieht so aus, als ob sie für einige Benutzer hilfreich ist. Also stelle ich mein eigenes Skript zum Erstellen von Screenshots mit xclipund imagemagickPaketen zur Verfügung.

Installieren Sie zunächst die oben genannten Abhängigkeiten. Dann können Sie mit dem folgenden Skript tun, was Sie wollen. Es unterstützt das Erstellen eines Screenshots eines ganzen Bildschirms oder eines Bildschirmbereichs und kopiert automatisch einen Screenshot in eine Zwischenablage, sodass Sie ihn überall einfügen können (z. B. in einem Browser oder in einem Telegramm-Messenger).

Ein paar nicht so schwer zu findende Hacks würden eine Unterstützung für das Erfassen bestimmter Fenster und das Umschalten des Kopierteils hinzufügen.

#!/usr/bin/env bash

# screenshots stuff
# TODO: docs

function help_and_exit {
    if [ -n "${1}" ]; then
        echo "${1}"
    fi
    cat <<-EOF
    Usage: scregcp [-h|-s] [<screenshots_base_folder>]

    Take screenshot of a whole screen or a specified region,
    save it to a specified folder (current folder is default)
    and copy it to a clipboard. 

       -h   - print help and exit
       -s   - take a screenshot of a screen region
EOF
    if [ -n "${1}" ]; then
        exit 1
    fi
    exit 0
}

if [ "${1}" == '-h'  ]; then
    help_and_exit
elif [ "${1:0:1}" == '-' ]; then
    if [ "${1}" != '-s' ]; then
        help_and_exit "error: unknown option ${1}"  
    fi
    base_folder="${2}"
else
    base_folder="${1}"
    params="-window root"
fi  

file_path=${base_folder}$( date '+%Y-%m-%d_%H-%M-%S' )_screenshot.png
import ${params} ${file_path}
xclip -selection clipboard -target image/png -i < ${file_path}

Und hier sind meine Referenzverknüpfungen für i3wmdie Verwendung dieses Skripts:

# take a screenshot of a screen region and copy it to a clipboard
bindsym --release Shift+Print exec "scregcp -s /home/ddnomad/pictures/screenshots/"

# take a screenshot of a whole window and copy it to a clipboard
bindsym --release Print exec "scregcp /home/ddnomad/pictures/screenshots/"
ddnomad
quelle
6

Haben Sie versucht, ein einfaches Kommandozeilen-Dienstprogramm für die Bildschirmaufnahme zu erstellen?

Ref .: https://faq.i3wm.org/question/202/what-do-you-guys-use-for-printscreen/

Corleone
quelle
Wow, nachdem ich gegoogelt hatte, wurde mir klar, dass Scrot eigentlich zu allem fähig ist, was ich brauche. Zu komisch, dass ich es nicht alleine gefunden habe. Danke, Alter!
ddnomad
Sie können auch scrot -s verwenden, um eine bestimmte Region zu erfassen. Führen Sie den Befehl aus und klicken und halten Sie ihn gedrückt. Klicken Sie dann auf den zweiten Punkt. Es wird eine Datei mit dem Datum als Dateiname in Ihrem aktuellen Verzeichnis erstellt.
Vimdude
5

Installieren Sie zuerst xclip, imagemagick und jq!

pacman -S imagemagick jq xclip

Ich habe diese Zeile in meiner i3-Konfiguration:

bindsym $mod+Print exec \
    import -window $( \
        i3-msg -t get_tree | \
        jq 'recurse(.nodes[]) | select(.focused).window' \
    ) png:- | \
    xclip -selection clipboard -t image/png

Dies fügt einen Screenshot des aktiven Fensters in die Zwischenablage ein, wenn Sie mod (Window / Alt) + Printscreen drücken.

i3-msg -t get-tree ruft alle Fenster von i3 als json ab, dann verwenden wir jq, um die Fenster-ID des fokussierten Fensters abzurufen. Wir übergeben es an den Befehl imagemagicks import und leiten das Ergebnis an xclip weiter, der es in die Zwischenablage legt!

Elmer
quelle
2

Flameshot ist eine anständige Alternative.

bindsym Print       exec flameshot full
bindsym Shift+Print exec flameshot gui

Mit der Option können Sie -p /path/to/directorydie Auswahl des Speicherverzeichnisses überspringen.

Raphael
quelle
1

Eine sehr einfache Option, wenn Sie es installiert haben oder nichts dagegen haben, es zu installieren, ist die Verwendung von xfce4-screenshooter und i3 config:

bindsym Print exec --no-startup-id xfce4-screenshooter

Vorsichtsmaßnahme: Obwohl es relativ kompakt ist, gibt es einige Abhängigkeiten, wenn Sie keine anderen xfce4-Programme verwenden

Daniel
quelle
1

Verwenden Sie Maim . Es ist aktiver entwickelt und hängt von der Steigung ab, die viel besser ist.

Benutze keinen Scrot. Das Auswahlfeld verfälscht und hinterlässt einen Eindruck im Screenshot (auch das Feld verformt sich beim Ändern der Größe), wenn es über einem Aktualisierungsfenster (z. B. htop) verwendet wird.

Hritik
quelle
(1) Was ist Slop? (2) Was genau ist besser als? (3) Warum?
G-Man sagt, dass Monica
1. Operation auswählen, die zum Auswählen von Fensterbereichen verwendet wird [ github.com/naelstrof/slop] 2. Es ist besser als scrot, da das Auswahlfeld nicht beschädigt wird (versuchen Sie scrot over htop). 3. idk.
Hritik
1

Ich mag Shutter wegen seiner Nachbearbeitungsmöglichkeiten (handgezeichnete rote Kreise!) Und seiner umfassenden Konfigurationsmöglichkeiten.

Sie können einen Bildschirmbereich durch Ausführen von greifen

shutter --select

Sie können Tastenbelegungen folgendermaßen einrichten .config/i3/config:

bindsym Print         exec shutter --full
bindsym Shift+Print   exec shutter --select

Das Laden dauert eine Sekunde, daher möchten Sie es möglicherweise im Hintergrund automatisch starten:

exec shutter --min_at_startup

Der Auslöser ist dann über ein Tray-Symbol zugänglich, das Ihnen viele weitere nützliche Optionen bietet.

Raphael
quelle
Shutter kann zu diesem Zeitpunkt noch nicht vollständig auf Ubuntu 18.04 installiert werden (Bearbeitungswerkzeug hängt von nicht verfügbarer Bibliothek ab; benutzerdefinierte PPA nicht aktuell). Traurig.
Raphael
1

Dieses Perl6-Skript verwendet beim Importieren Root-, Bereichs-, Fenster- oder Verzögerungs- ScreenShots und speichert sie in einer $ -Datei und in der Zwischenablage.

#!/usr/bin/env perl6
use v6;

sub print_window(Str $file) {
  qx{xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"} ~~ /(0x\S*)/;
  run <import -window>, $0, $file;
}

sub MAIN( Str $option where $option ∈ <root area window delay> ) {
  my $today = DateTime.now( 
    formatter => { 
      sprintf "%04d_%02d_%02d_%02d-%02d-%02d", .year, .month, .day, .hour, .minute, .second 
    } 
  );
  my $file  = "$*HOME/Dades/Imatges/ScreenShots/$today.png";

  given $option {
    when 'root'   { run <import -window root>, $file }
    when 'area'   { run 'import', $file              }
    when 'window' { print_window($file)              }
    when 'delay'  { sleep 10; print_window($file)    }
  }
  run <xclip -selection clipboard -target image/png -i>, $file;
  run <xmessage -nearmouse -timeout 3>, "Screenshot in clipboard, and saved in $today.png";
}

Dies sind die Schlüsselbindungen in i3, um das Skript auszuführen:

bindsym $mod+Print exec Print_Screen root 
bindsym --release $mod+Shift+Print exec Print_Screen area
bindsym $mod+Mod1+Print exec Print_Screen delay
bindsym $mod+Control+Print exec Print_Screen window
Mimosinnet
quelle