Hvordan kan jeg enkelt lage skjermbilder av skjermregioner på Arch Linux med i3 WM?

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

  • Du kan også klikke på et vindu etter import ss.png for å ta et skjermbilde av vinduet.
  • Dette gjør ikke ‘ t fungerer fra i3 config, men. Minimalt eksempel: legg til linje bindsym $mod+shift+s exec import ~/screenshot.png i konfigurasjonen din. Gjør ikke ‘ ikke noe for meg.
  • Se det andre svaret om flameshot. At ‘ er det jeg ‘ bruker i disse dager.

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *