Mniej więcej miesiąc temu zmieniłem Ubuntu 14.04 LTS na Arch i jestem bardzo zadowolony z tej decyzji. Jednak brakuje mi niektórych funkcji w mojej nowej dystrybucji , zwłaszcza Shift + printcr , który w Unity umożliwia wybór obszaru ekranu do przechwycenia.
Używam i3 WM. Moje pytanie brzmi: jak mogę skonfigurować zachowanie zrzutów ekranu podobne do Unity, aby móc przyciągać regiony ekranu lub okna za pomocą skrótu klawiaturowego lub czegoś podobnego (bez zagłębiania się w identyfikator okna i elementy konsoli)?
Odpowiedź
 Możesz użyć import, części ImageMagick. 
Przechwyć region
 Spowoduje to zmianę kursora w celownik, a kiedy klikniesz i przeciągniesz w celu utworzenia ramki, zostanie ono zapisane jako ss.png. 
import ss.png 
Przechwyć cały ekran
 Możesz także zastąpić słowo root identyfikatorem okna, aby przechwycić określone okno. 
Komentarze
Odpowiedź
 Minęło dużo czasu, odkąd zadałem to pytanie i wygląda na to, że jest ono pomocne dla niektórych użytkowników. Dlatego udostępniam własny skrypt do tworzenia zrzuty ekranu z pakietami xclip i imagemagick. 
Przede wszystkim zainstaluj powyższe zależności. Następnie możesz zrobić cokolwiek chcesz za pomocą poniższego skryptu. Obsługuje zrzut ekranu całego ekranu lub regionu ekranu, a także automatycznie kopiuje zrzut ekranu do schowka, dzięki czemu można go wkleić wszędzie (przeglądarka ei lub komunikator Telegram).
Kilka niezbyt trudnych do wymyślenia hacków dodałoby obsługę 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 dla i3wm, aby skorzystać z tego 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/" 
Odpowiedź
Flameshot to przyzwoita alternatywa.
bindsym Print exec flameshot full bindsym Shift+Print exec flameshot gui 
 Możesz użyć opcji -p /path/to/directory, aby pominąć wybór katalogu zapisu. 
Komentarze
- fajne narzędzie szukałem takiego narzędzia do zrobienia jakiejś dokumentacji. Nawet możesz dodać oznaczenie do zrzutu ekranu
 
Odpowiedź
czy próbowałeś scrot a, proste narzędzie do przechwytywania ekranu z wiersza poleceń
ref.,: https://faq.i3wm.org/question/202/what-do-you-guys-use-for-printscreen/
Komentarze
- możesz także użyć moszny -s, aby uchwycić określony region. uruchom polecenie, a następnie kliknij i przytrzymaj, a następnie kliknij drugi punkt, to ' utworzy plik z datą jako nazwą pliku w bieżącym katalogu.
 
Odpowiedź
Najpierw zainstaluj xclip, imagemagick i jq!
pacman -S imagemagick jq xclip 
I mieć 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, a następnie używamy jq do pobrania identyfikatora okna zogniskowanego. Przekazujemy go do polecenia imagemagicks importu i wyprowadzamy wynik do xclip, który umieści go w schowku!
Odpowiedź
Użyj okaleczyć . Jest bardziej aktywnie rozwijany i zależy od slopu , co jest o wiele lepsze.
Nie używaj moszny. Jego pole wyboru psuje się i pozostawia wrażenie na zrzucie ekranu (również pole deformuje się przy zmianie rozmiaru), gdy jest używane w oknie aktualizacji (powiedzmy htop).
Komentarze
- (1) Co to jest „slop”? (2) Co dokładnie jest lepsze niż? (3) Dlaczego?
 - 1. Wybierz operację, używaną do wybierania regionów okna [ github.com/naelstrof/slop] 2. Lepiej jest ' niż moszna, ponieważ nie ' nie ulega uszkodzeniu w polu wyboru (spróbuj moszny zamiast htop). 3. idk.
 
Odpowiedź
Bardzo prosta opcja, jeśli masz ją zainstalowaną lub nie masz nic przeciwko instalacji, polega na użyciu xfce4-screenshooter , a konfiguracja i3 wyglądałaby następująco:
bindsym Print exec --no-startup-id xfce4-screenshooter 
Uwaga: mimo że jest dość lekki, istnieją pewne zależności, jeśli nie używasz innych programów xfce4
Odpowiedź
Podoba mi się Shutter ze względu na możliwości przetwarzania końcowego (ręcznie rysowane czerwone kółka!) i wszechstronne opcje konfiguracji.
Możesz pobrać obszar ekranu, uruchamiając
shutter --select 
 Możesz skonfigurować przypisania klawiszy w .config/i3/config w następujący sposó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 pomocą ikony w zasobniku, co daje wiele przydatnych opcji poza powyższymi.
Com ments
- Shutter można ' łatwo zainstalować w tym momencie w systemie Ubuntu 18.04 (narzędzie do edycji zależy od niedostępnej biblioteki ; niestandardowe PPA nieaktualne). Smutne.
 
Odpowiedź
Ten skrypt Perl6 wymaga root, area, window, lub opóźnienie 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"; } 
To są klawisze przypisania w i3 do uruchomienia skrypt:
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 
Odpowiedź
 Nieznacznie zmodyfikowano rozwiązanie o  @ddnomad  powyżej, oto bash wersja skryptu z większą wyrazistością i inną flagą, która pozwala na zapisywanie tylko do schowka. 
 #! /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  
 W takim razie to właśnie dodajesz do 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/"  
Tak więc przypisanie klawiszy jest następujące:
- = zrób zrzut ekranu
 -  
+Control= zapisuj tylko do schowka -  
+Shift= przechwytywanie tylko określonego regionu ekranu 
import ss.png, aby zrobić zrzut ekranu tego okna.bindsym $mod+shift+s exec import ~/screenshot.pngdo swojej konfiguracji. Nie ' nic dla mnie nie robi.