Vor ungefähr einem Monat habe ich von Ubuntu 14.04 LTS zu Arch gewechselt und bin mit dieser Entscheidung ziemlich zufrieden. Ich vermisse jedoch einige Funktionen mit meiner neuen Distribution , insbesondere Shift + Printscr , mit dem in Unity die Auswahl eines Bildschirmbereichs erfasst werden kann.
Ich verwende i3 WM. Meine Frage lautet also: Wie kann ich das Unity-ähnliche Screenshot-Verhalten so konfigurieren, dass Bildschirmbereiche oder Fenster mit einer Tastenkombination oder Ähnlichem erfasst werden können (ohne sich mit Fenster-ID und Konsolenmaterial zu befassen)?
Antwort
Sie können import
, einen Teil von ImageMagick, verwenden.
Erfassen einer Region
Dies verwandelt Ihren Cursor in ein Fadenkreuz. Wenn Sie klicken und ziehen, um eine Box zu bilden, wird diese Box als ss.png
.
import ss.png
Erfassen der gesamten Anzeige
Sie können auch das Wort root
durch die Fenster-ID ersetzen, um ein bestimmtes Fenster zu erfassen.
Kommentare
- Sie können auch nach
import ss.png
auf ein Fenster klicken, um einen Screenshot dieses Fensters zu erstellen. - Dies ist nicht der Fall ‚ funktioniert jedoch nicht mit der i3-Konfiguration. Minimales Beispiel: Fügen Sie Ihrer Konfiguration die Zeile
bindsym $mod+shift+s exec import ~/screenshot.png
hinzu. ‚ tut nichts für mich. - Siehe die andere Antwort zu Flameshot. Das ‚ ist das, was ich ‚ in diesen Tagen verwende.
Antwort
Es ist lange her, dass ich diese Frage gestellt habe, und es sieht so aus, als wäre sie für einige Benutzer hilfreich. Deshalb stelle ich mein eigenes Skript zur Verfügung Screenshots mit den Paketen xclip
und imagemagick
.
Installieren Sie zunächst die oben genannten Abhängigkeiten. Dann können Sie dies tun Was auch immer Sie mit dem folgenden Skript 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. Browser oder Telegramm-Messenger).
Ein paar nicht so schwer zu erstellende 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 eine i3wm
, um diese s zu verwenden cript:
# 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/"
Antwort
Flameshot ist eine anständige Alternative.
bindsym Print exec flameshot full bindsym Shift+Print exec flameshot gui
Sie können die Option -p /path/to/directory
zum Überspringen verwenden Auswahl des Speicherverzeichnisses.
Kommentare
- Nettes Tool Ich suchte nach einem solchen Tool, um eine Dokumentation zu erstellen. Sogar Sie können dem Screenshot eine Markierung hinzufügen.
Antwort
Haben Sie versucht, scrot ein einfaches Dienstprogramm zur Bildschirmaufnahme mit Befehlszeile
ref.: https://faq.i3wm.org/question/202/what-do-you-guys-use-for-printscreen/
Kommentare
- Sie können auch scrot -s verwenden, um eine bestimmte Region zu erfassen. Führen Sie den Befehl aus, klicken Sie und halten Sie ihn gedrückt und klicken Sie dann auf den zweiten Punkt. ‚ erstellt eine Datei mit dem Datum als Dateiname in Ihrem aktuellen Verzeichnis.
Antwort
Installieren Sie zuerst xclip, imagemagick und jq!
pacman -S imagemagick jq xclip
I. 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 wird einen Screenshot des aktiven Fensters in Ihre Zwischenablage einfügen, wenn Sie mod (Fenster / Alt) + Druckbildschirm 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 Importbefehl von imagemagicks und leiten das Ergebnis an xclip weiter, der es in die Zwischenablage legt!
Antwort
Verwenden Sie maim . Es ist aktiver entwickelt und hängt vom Slop ab, was viel besser ist.
Verwenden Sie keinen Scrot. Das Auswahlfeld ist beschädigt und hinterlässt einen Eindruck im Screenshot (auch das Feld verformt sich beim Ändern der Größe), wenn es über ein Aktualisierungsfenster (z. B. htop) verwendet wird.
Kommentare
- (1) Was ist „Slop“? (2) Was genau ist besser als? (3) Warum?
- 1. Auswahloperation zur Auswahl von Fensterbereichen [ github.com/naelstrof/slop] 2. ‚ ist besser als scrot, weil es nicht ‚ keine Beschädigung des Auswahlfelds erfährt (scrot over htop versuchen). 3. idk.
Antwort
Eine sehr einfache Option, wenn Sie sie installiert haben oder es Ihnen nichts ausmacht, sie zu installieren, ist die Verwendung von xfce4-screenhooter und i3 config wären:
bindsym Print exec --no-startup-id xfce4-screenshooter
Vorsichtsmaßnahme: Obwohl es ziemlich leicht ist, gibt es einige Abhängigkeiten, wenn Sie keine anderen xfce4-Programme verwenden.
Antwort
Ich mag Shutter für seine Nachbearbeitungsfunktionen (handgezeichnete rote Kreise!) und umfassenden Konfigurationsoptionen.
Sie können einen Bildschirmbereich abrufen, indem Sie
shutter --select
Sie können Schlüsselbindungen in .config/i3/config
wie folgt einrichten:
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
Auf den Shutter kann zugegriffen werden dann über ein Tray-Symbol, das Ihnen viele nützliche Optionen bietet, die über die oben genannten hinausgehen.
Com
- Shutter kann ‚ zu diesem Zeitpunkt nicht einfach vollständig unter Ubuntu 18.04 installiert werden (das Bearbeitungsprogramm hängt von der nicht verfügbaren Bibliothek ab ;; benutzerdefinierte PPA nicht aktuell). Traurig.
Antwort
Dieses Perl6-Skript benötigt root, area, window, oder delay Screenshots mit Import und speichern 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, die ausgeführt werden sollen das Skript:
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
Antwort
Die Lösung wurde leicht um @ddnomad oben, hier ist die bash
-Version des Skripts mit mehr Explizität und einem weiteren Flag, mit dem nur in der Zwischenablage gespeichert werden kann.
#! /bin/bash - help_and_exit() { cat <<-EOF Usage: scregcp [-h|-s|-c] [<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 -c - save only to clipboard EOF exit 0 } base_folder="./" savefile=true region=false params="-window root" while test $# -gt 0; do case "$1" in -h|--help*) help_and_exit ;; -r|--region*) params="" shift ;; -c|--clipboard-only*) savefile=false shift ;; *) if [[ $1 =~ ^\- ]] ; then echo "error: unknown flag "$1"" help_and_exit fi base_folder="${1}" shift ;; esac done 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} if [ "$savefile" = false ] ; then rm ${file_path} fi
Dann fügen Sie Folgendes zu config
:
bindsym --release Shift+Print exec "/dir/to/script.sh -r $HOME/Pictures/screenshots/" bindsym --release Control+Shift+Print exec "/dir/to/script.sh -r -c $HOME/Pictures/screenshots/" bindsym --release Print exec "/dir/to/script.sh $HOME/Pictures/screenshots/" bindsym --release Control+Print exec "/dir/to/script.sh -c $HOME/Pictures/screenshots/"
Die Tastenkombination lautet also:
- = Screenshot erstellen
-
+Control
= nur in Zwischenablage speichern -
+Shift
= erfasst nur einen bestimmten Bereich des Bildschirms