Jak mogę łatwo wykonywać zrzuty ekranu regionów ekranu w Arch Linux z i3 WM?

27

Mniej więcej miesiąc temu zmieniłem system Ubuntu 14.04 LTS na Arch i jestem bardzo zadowolony z tej decyzji. Tęsknię jednak za niektórymi funkcjami mojej nowej dystrybucji, szczególnie Shift+, printscrktóra w Unity pozwala na wybranie regionu ekranu do przechwycenia.

Używam i3 WM. Moje pytanie brzmi: w jaki sposób mogę skonfigurować zachowanie zrzutu ekranu podobne do Unity, aby móc przyciągać regiony ekranu lub okna za pomocą skrótu klawiaturowego lub czegoś takiego (bez zagłębiania się w identyfikator okna i elementy konsoli)?

ddnomad
źródło

Odpowiedzi:

29

Możesz użyć import, część ImageMagick.

Zdobądź region

To zmieni kursor w celownik, a kiedy klikniesz i przeciągniesz, aby utworzyć pole, pole to zostanie zapisane jako ss.png.

import ss.png

Uchwyć cały ekran

import -window root ss.png

Możesz również zamienić słowo rootna identyfikator okna, aby przechwycić określone okno.

Casey
źródło
1
Prosty, idealny, właśnie tego potrzebowałem - i nie musiałem pobierać innego programu.
Darren Haynes
1
Możesz także kliknąć okno po import ss.png, aby zrobić zrzut ekranu tego okna.
John Gowers
9

Minęło dużo czasu, odkąd zadałem to pytanie i wygląda na to, że jest to pomocne dla niektórych użytkowników. Zapewniam więc własny skrypt do tworzenia zrzutów ekranu xclipi imagemagickpakietów.

Przede wszystkim zainstaluj wyżej wymienione zależności. Następnie możesz zrobić, co chcesz, korzystając ze skryptu poniżej. Obsługuje tworzenie zrzutu ekranu całego ekranu lub regionu ekranu, a także automatycznie kopiuje zrzut ekranu do schowka, dzięki czemu można go wkleić w dowolnym miejscu (np. Przeglądarka lub komunikator Telegram).

Kilka nie tak trudnych do wymyślenia hacków dodałoby wsparcie do przechwytywania określonych okien i przełączania kopiowania części.

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

A oto moje skróty referencyjne i3wmdo korzystania z tego skryptu:

# 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/"
ddnomad
źródło
6

próbowałeś scrot , proste narzędzie do przechwytywania ekranu wiersza poleceń

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

Corleone
źródło
Wow, po googlowaniu zdałem sobie sprawę, że moszna jest w stanie wszystko, czego potrzebuję. Zbyt dziwne, że nie znalazłem tego sam. Dzięki stary!
ddnomad
możesz także użyć scrot -s do przechwycenia określonego regionu. uruchom polecenie, a następnie kliknij i przytrzymaj, a następnie kliknij drugi punkt, utworzy plik z datą jako nazwą pliku w bieżącym katalogu.
vimdude
5

Najpierw zainstaluj xclip, imagemagick i jq!

pacman -S imagemagick jq xclip

Mam tę linię w mojej konfiguracji i3:

bindsym $mod+Print exec \
    import -window $( \
        i3-msg -t get_tree | \
        jq 'recurse(.nodes[]) | select(.focused).window' \
    ) png:- | \
    xclip -selection clipboard -t image/png

Spowoduje to umieszczenie zrzutu ekranu aktywnego okna w schowku po naciśnięciu mod (Window / Alt) + Printscreen.

i3-msg -t get-tree pobiera wszystkie okna z i3 jako json, następnie używamy jq, aby uzyskać identyfikator okna zogniskowanego okna. Przekazujemy go do polecenia importu imagemagicks i przekazujemy wynik do xclip, który umieści go w schowku!

Elmer
źródło
2

Flameshot to przyzwoita alternatywa.

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

Możesz użyć opcji, -p /path/to/directoryaby pominąć wybór katalogu zapisu.

Raphael
źródło
1

Bardzo prosta opcja, jeśli masz ją zainstalowaną lub nie przeszkadza jej instalacja, to użycie xfce4-screenhooter, a konfiguracja i3 to:

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

Zastrzeżenie: chociaż dość lekkie, istnieją pewne zależności, jeśli nie używasz żadnych innych programów xfce4

Daniel
źródło
1

Użyj okaleczenia . Jest bardziej aktywnie rozwijany i zależy od slopu, który jest znacznie lepszy.

Nie używaj moszny. Jego pole wyboru psuje i pozostawia wrażenie na zrzucie ekranu (również okno deformuje się podczas zmiany rozmiaru), gdy jest używane w oknie aktualizacji (powiedzmy htop).

Hritik
źródło
(1) Co to jest „slop”? (2) Co dokładnie jest lepsze niż? (3) Dlaczego?
G-Man mówi „Przywróć Monikę”
1. Wybierz operację, używaną do wybierania regionów okna [ github.com/naelstrof/slop] 2. Jest lepsza niż scrot, ponieważ nie ulega uszkodzeniu pola wyboru (spróbuj scrot ponad htop). 3. idk.
Hritik
1

Lubię migawkę ze względu na możliwości przetwarzania końcowego (ręcznie rysowane czerwone kółka!) I wszechstronne opcje konfiguracji.

Możesz pobrać region ekranu, uruchamiając

shutter --select

Możesz skonfigurować powiązania klawiszy w następujący .config/i3/configsposób:

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

Ładowanie trwa sekundę, więc możesz chcieć uruchomić go automatycznie w tle:

exec shutter --min_at_startup

Migawka będzie dostępna za pośrednictwem ikony na pasku zadań, co daje wiele przydatnych opcji poza powyższymi.

Raphael
źródło
W tym momencie nie można łatwo w pełni zainstalować migawki na Ubuntu 18.04 (narzędzie edycji zależy od niedostępnej biblioteki; niestandardowe PPA nieaktualne). Smutny.
Raphael
1

Ten skrypt perl6 pobiera root, obszar, okno lub opóźnia zrzuty ekranu za pomocą importu i zapisuje je w pliku $ oraz w schowku.

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

Oto kluczowe powiązania w i3 do uruchomienia skryptu:

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
Mimosinnet
źródło