For ca. en måned siden skiftede jeg fra Ubuntu 14.04 LTS til Arch, og jeg er meget tilfreds med denne beslutning. Jeg savner dog nogle funktioner med min nye distro , især Shift + printscr som i Unity tillader valg af en skærmregion, der skal fanges.
Jeg bruger i3 WM. Så mit spørgsmål er: hvordan kan jeg konfigurere Unity-lignende skærmbilleder, så jeg kan snappe skærmregioner eller vinduer med en tastaturgenvej eller noget (uden at grave i vindues-id og konsol-ting)?
Svar
Du kan bruge import
, en del af ImageMagick.
Optag en region
Dette ændrer markøren til et trådkors, og når du klikker og trækker for at danne en boks, gemmes dette felt som ss.png
.
import ss.png
Optag hele skærmen
Du kan også erstatte ordet root
med vindue-idet for at fange et specifikt vindue.
Kommentarer
Svar
Det er længe siden jeg stillede dette spørgsmål, og det ser ud til at det er nyttigt for nogle af brugerne. Så jeg leverer mit eget script til at lave skærmbilleder med xclip
og imagemagick
pakker.
Først og fremmest skal du installere de ovennævnte afhængigheder. Så kan du gøre hvad du vil med nedenstående script. Det understøtter at lave et skærmbillede af en hel skærm eller en skærmregion, og det kopierer også automatisk et screenshot til et udklipsholder, så du kan indsætte det overalt (ei browser eller Telegram messenger).
Et par ikke så vanskelige at komme med hacks ville tilføje en understøttelse til at fange bestemte vinduer og skifte kopieringsdel.
#!/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}
Og her er mine referencegenveje til en i3wm
for at gøre brug af denne s 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/"
Svar
Flameshot er et anstændigt alternativ.
bindsym Print exec flameshot full bindsym Shift+Print exec flameshot gui
Du kan bruge mulighed -p /path/to/directory
til at springe over ved at vælge gemmappen.
Kommentarer
- dejligt værktøj jeg ledte efter et sådant værktøj til at lave noget dokumentation. Selv du kan tilføje markering til skærmbilledet
Svar
har du prøvet scrot en, enkel kommandolinjeværktøj til skærmoptagelse
ref.,: https://faq.i3wm.org/question/202/what-do-you-guys-use-for-printscreen/
Kommentarer
- du kan også bruge scrot -s til at fange en bestemt region. kør kommandoen, og hold den nede, og klik derefter på det andet punkt, det ‘ Opret en fil med datoen som filnavn i din nuværende bibliotek.
Svar
Installer først xclip, imagemagick og jq!
pacman -S imagemagick jq xclip
I har denne linje i min 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
Dette sætter et skærmbillede af det aktive vindue på dit udklipsholder, når du trykker på mod (Window / Alt) + Printscreen .
i3-msg -t get-tree får alle vinduer fra i3 som json, så bruger vi jq til at få vindue-id for det fokuserede vindue. Vi videregiver det til imagemagicks importkommando og sender resultatet til xclip, der sætter det på udklipsholderen!
Svar
Brug beskadiget . Det er mere aktivt udviklet og afhænger af slop , hvilket er meget bedre.
Brug ikke scrot. Dens valgfelt korrumperer og efterlader et indtryk i skærmbilledet (også boksen deformeres, når størrelsen ændres), når den bruges over et opdateringsvindue (sig htop).
Kommentarer
- (1) Hvad er “slop”? (2) Hvad er det nøjagtigt bedre end? (3) Hvorfor?
- 1. Vælg handling, der bruges til at vælge vinduesregioner [ github.com/naelstrof/slop] 2. Det ‘ er bedre end scrot, fordi den ikke ‘ t gennemgår korruption i markeringsfeltet (prøv scrot over htop). 3. idk.
Svar
En meget enkel mulighed, hvis du har det installeret eller ikke har noget imod at installere det bruger xfce4-screenshooter og i3-konfiguration ville være:
bindsym Print exec --no-startup-id xfce4-screenshooter
Advarsel: selvom det er ret let, er der nogle afhængigheder, hvis du ikke bruger andre xfce4-programmer
Svar
Jeg kan godt lide lukker for dets efterbehandlingsfunktioner (håndtegnede røde cirkler!) og omfattende konfigurationsmuligheder.
Du kan få fat i et skærmområde ved at køre
shutter --select
Du kan indstille tastebindinger i .config/i3/config
sådan:
bindsym Print exec shutter --full bindsym Shift+Print exec shutter --select
Det tager et sekund at indlæse, så det kan være en god ide at starte den automatisk i baggrunden:
exec shutter --min_at_startup
Lukkeren er tilgængelig via et bakkeikon derefter, hvilket giver dig mange nyttige muligheder ud over ovenstående.
Com ments
- Shutter kan ‘ let installeres fuldt ud på Ubuntu 18.04 på dette tidspunkt (redigeringsværktøjet afhænger af utilgængeligt bibliotek ; brugerdefineret PPA ikke opdateret). Trist.
Svar
Dette perl6-script tager rod, område, vindue, eller forsinkelse ScreenShots ved hjælp af import og gemmer dem i en $ -fil og i udklipsholderen.
#!/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"; }
Dette er nøglebindingerne i i3, der skal køres scriptet:
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
Svar
Lidt redigeret løsningen med @ddnomad ovenfor, her er bash
versionen af scriptet med mere eksplicitet og et andet flag, der kun tillader lagring på udklipsholderen.
#! /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
Så er dette, hvad du tilføjer til i3
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/"
Så tastebindingen er:
- = lav et screenshot
-
+Control
= gem kun i udklipsholderen -
+Shift
= fang kun en bestemt region på skærmen
import ss.png
for at tage et skærmbillede af vinduet.bindsym $mod+shift+s exec import ~/screenshot.png
til din konfiguration. Gør ‘ ikke noget for mig.