Hur kan jag enkelt skapa skärmdumpar av skärmregioner på Arch Linux med i3 WM?

För ungefär en månad sedan bytte jag från Ubuntu 14.04 LTS till Arch och jag är ganska nöjd med detta beslut. Jag saknar dock några funktioner med min nya distro , speciellt Skift + printscr vilket i Unity tillåter val av en skärmregion att fångas.

Jag använder i3 WM. Så min fråga är: hur kan jag konfigurera Unity-liknande skärmdumpbeteende för att kunna knäppa skärmregioner eller fönster med en kortkommando eller något (utan att gräva i fönster-id och konsol grejer)?

Svar

Du kan använda import, en del av ImageMagick.

Fånga en region

Detta ändrar markören till ett hårkors och när du klickar och drar för att bilda en ruta kommer den rutan att sparas som ss.png.

import ss.png 

Ta hela skärmen

Du kan också ersätta ordet root med fönster-id för att fånga ett specifikt fönster.

Kommentarer

  • Du kan också klicka på ett fönster efter import ss.png för att ta en skärmdump av fönstret.
  • Detta gör det inte ’ t fungerar dock från i3 config. Minimalt exempel: lägg till rad bindsym $mod+shift+s exec import ~/screenshot.png i din konfiguration. Gör ’ inget för mig.
  • Se det andra svaret om flameshot. Att ’ är vad jag ’ använder idag.

Svar

Det har varit länge sedan jag ställde den här frågan och det ser ut som att det är till hjälp för vissa användare. Så jag tillhandahåller mitt eget manus för att göra skärmdumpar med xclip och imagemagick paket.

Först och främst installerar du ovan nämnda beroenden. Då kan du göra vad du vill med skriptet nedan. Det stöder att skapa en skärmdump av en hel skärm eller en skärmregion och kopierar automatiskt en skärmdump till ett urklipp så att du kan klistra in den överallt (ei webbläsare eller Telegram messenger).

Ett par inte så svårt att komma med hack skulle lägga till stöd för att fånga specifika fönster och växla 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}  

Och här är mina referensgenvägar för en i3wm för att använda denna 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 är ett anständigt alternativ.

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

Du kan använda alternativet -p /path/to/directory välja spara katalog.

Kommentarer

  • trevligt verktyg jag letade efter ett sådant verktyg för att göra lite dokumentation. Du kan till och med lägga till markering på skärmdumpen

Svar

har du försökt scrot a, enkelt kommandoradsskärmupptagningsverktyg

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

Kommentarer

  • du kan också använda scrot -s för att fånga en viss region. kör kommandot och klicka och håll sedan ned och klicka sedan på den andra punkten, det ’ Skapa en fil med datum som filnamn i din nuvarande katalog.

Svar

Installera först xclip, imagemagick och jq!

pacman -S imagemagick jq xclip 

I ha den här raden 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 

Detta kommer att sätta en skärmdump av det aktiva fönstret på Urklipp när du trycker på mod (Window / Alt) + Printscreen .

i3-msg -t get-tree får alla fönster från i3 som json, sedan använder vi jq för att få fönster-id för det fokuserade fönstret. Vi skickar det till imagemagicks importkommando och rör resultatet till xclip som kommer att lägga det på klippbordet!

Svar

Använd lömsk . Det är mer aktivt utvecklat och beror på slop vilket är mycket bättre.

Använd inte scrot. Urvalsrutan korrumperar och lämnar ett intryck i skärmdumpen (även rutan deformeras vid storleksändring) när den används över ett uppdateringsfönster (säg htop).

Kommentarer

  • (1) Vad är ”slop”? (2) Vad är det exakt bättre än? (3) Varför?
  • 1. Välj operation, används för att välja fönsterregioner [ github.com/naelstrof/slop] 2. Det ’ är bättre än scrot eftersom det ’ inte genomgår korruption i markeringsrutan (prova scrot över htop). 3. idk.

Svar

Ett väldigt enkelt alternativ om du har det installerat eller inte tänker installera det använder xfce4-screenshooter och i3-konfiguration skulle vara:

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

Förbehåll: även om det är ganska lätt, finns det vissa beroenden om du inte använder andra xfce4-program

Svar

Jag gillar slutare för dess efterbehandlingsfunktioner (handritade röda cirklar!) och omfattande konfigurationsalternativ.

Du kan ta en skärmregion genom att köra

shutter --select 

Du kan ställa in tangentbindningar i .config/i3/config så:

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

Det tar en sekund att ladda, så du kanske vill starta det automatiskt i bakgrunden:

exec shutter --min_at_startup 

Avtryckaren är tillgänglig via en fackikon sedan, vilket ger dig många användbara alternativ utöver ovanstående.

Com ments

  • Shutter kan ’ lätt installeras helt på Ubuntu 18.04 vid denna tidpunkt (redigeringsverktyget beror på otillgängligt bibliotek ; anpassad PPA inte uppdaterad). Tråkigt.

Svar

Detta perl6-skript tar root, area, window, eller delay Skärmbilder med import och sparar dem i en $ -fil och i urklipp.

#!/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"; } 

Det här är nyckelbindningarna i i3 som ska köras 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

Lätt redigerat lösningen med @ddnomad ovan, här är bash versionen av skriptet med mer enkelhet och en annan flagga som gör att du bara kan spara i urklipp.

 #! /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  

Sedan lägger du till 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å nyckelbindningen är:

  • = skapa en skärmdump
  • +Control = bara spara i urklipp
  • +Shift = fånga bara en viss region på skärmen

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *