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.png
do swojej konfiguracji. Nie ' nic dla mnie nie robi.