For omtrent en måned siden byttet jeg fra Ubuntu 14.04 LTS til Arch, og jeg er ganske fornøyd med denne avgjørelsen. Jeg savner imidlertid noen funksjoner med min nye distro , spesielt Shift + printscr som i Unity tillater valg av en skjermregion som skal fanges.
Jeg bruker i3 WM. Så spørsmålet mitt er: hvordan kan jeg konfigurere Unity-lignende skjermbildeoppførsel for å kunne snappe skjermregioner eller vinduer med en hurtigtast eller noe (uten å grave i vindu-ID og konsollsaker)?
Svar
Du kan bruke import
, en del av ImageMagick.
Ta en region
Dette vil endre markøren til et hårkors, og når du klikker og drar for å danne en rute, vil den ruten bli lagret som ss.png
.
import ss.png
Ta hele skjermen
Du kan også erstatte ordet root
med vindu-id for å fange et spesifikt vindu.
Kommentarer
Svar
Det er lenge siden jeg spurte dette spørsmålet, og det ser ut til at det er nyttig for noen av brukerne. Så jeg gir mitt eget skript for å lage skjermbilder med xclip
og imagemagick
pakker.
Først av alt, installer de ovennevnte avhengighetene. Da kan du gjøre hva du vil med skriptet nedenfor. Det støtter å lage et skjermbilde av en hel skjerm eller et skjermområde, og det kopierer også automatisk et skjermbilde til et utklippstavle slik at du kan lime det overalt (ei nettleser eller Telegram messenger).
Et par ikke så vanskelig å komme med hack ville legge til støtte for å fange spesifikke vinduer og slå 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 referansesnarveiene for en i3wm
for å gjøre bruk av dette 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 anstendig alternativ.
bindsym Print exec flameshot full bindsym Shift+Print exec flameshot gui
Du kan bruke alternativet -p /path/to/directory
velge lagringskatalogen.
Kommentarer
- fint verktøy jeg lette etter et slikt verktøy for å lage litt dokumentasjon. Selv du kan legge til markering på skjermbildet
Svar
har du prøvd scrot a, enkelt kommandolinjeprogram for skjermfangst
ref.,: https://faq.i3wm.org/question/202/what-do-you-guys-use-for-printscreen/
Kommentarer
- du kan også bruke scrot -s for å fange en spesifikk region. kjør kommandoen, klikk og hold, og klikk deretter på det andre punktet, det ‘ Du oppretter en fil med dato som filnavn i din nåværende katalog.
Svar
Installer først xclip, imagemagick og jq!
pacman -S imagemagick jq xclip
I ha denne linjen i min i3-konfigurasjon:
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 vil sette et skjermbilde av det aktive vinduet på utklippstavlen når du trykker på mod (Window / Alt) + Printscreen .
i3-msg -t get-tree får alle vinduer fra i3 som json, så bruker vi jq for å få vindu-ID til det fokuserte vinduet. Vi overfører den til imagemagicks importkommando og sender resultatet til xclip som vil legge det på utklippstavlen!
Svar
Bruk skjev . Det er mer aktivt utviklet og avhenger av slop som er mye bedre.
Ikke bruk scrot. Valgboksen ødelegger og etterlater inntrykk i skjermbildet (også boksen deformeres når størrelsen endres) når den brukes over et oppdateringsvindu (si htop).
Kommentarer
- (1) Hva er «slop»? (2) Hva er det bedre enn? (3) Hvorfor?
- 1. Velg operasjon, brukes til å velge vindusregioner [ github.com/naelstrof/slop] 2. Det ‘ er bedre enn scrot fordi den ikke ‘ t gjennomgår korrupsjon i valgboksen (prøv scrot over htop). 3. idk.
Svar
Et veldig enkelt alternativ hvis du har det installert eller ikke har noe imot å installere det bruker xfce4-screenshooter og i3 config ville være:
bindsym Print exec --no-startup-id xfce4-screenshooter
Advarsel: selv om det er ganske lett, er det noen avhengigheter hvis du ikke bruker andre xfce4-programmer
Svar
Jeg liker lukker for etterbehandlingsmuligheter (håndtegnede røde sirkler!) og omfattende konfigurasjonsalternativer.
Du kan ta en skjermregion ved å kjøre
shutter --select
Du kan konfigurere tastebindinger i .config/i3/config
slik:
bindsym Print exec shutter --full bindsym Shift+Print exec shutter --select
Det tar et sekund å laste inn, så det kan være lurt å starte den automatisk i bakgrunnen:
exec shutter --min_at_startup
Lukkeren vil være tilgjengelig via et skuffikon da, som gir deg mange nyttige alternativer utover det ovennevnte.
Com ments
- Shutter kan ‘ ikke enkelt installeres på Ubuntu 18.04 på dette tidspunktet (redigeringsverktøyet avhenger av utilgjengelig bibliotek ; tilpasset PPA ikke oppdatert). Trist.
Svar
Dette perl6-skriptet tar rot, område, vindu, eller forsinkelse Skjermbilder ved hjelp av import og lagrer dem i en $ -fil og i utklippstavlen.
#!/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økkelbindingene i i3 som skal kjøres skriptet:
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
Lett redigert løsningen av @ddnomad ovenfor, her er bash
versjonen av skriptet med mer eksplisitt og et annet flagg som bare tillater lagring på utklippstavlen.
#! /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å dette er hva du legger 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:
- = lag et skjermbilde
-
+Control
= lagre bare i utklippstavlen -
+Shift
= fanger bare en spesifikk region på skjermen
import ss.png
for å ta et skjermbilde av vinduet.bindsym $mod+shift+s exec import ~/screenshot.png
i konfigurasjonen din. Gjør ikke ‘ ikke noe for meg.