Jak mohu snadno vytvořit screenshoty oblastí obrazovky na Arch Linuxu s i3 WM?

Asi před měsícem jsem přešel z Ubuntu 14.04 LTS na Arch a jsem s tímto rozhodnutím celkem spokojen. Chybí mi však některé funkce mé nové distribuce , zejména Shift + printscr , který v Unity umožňuje výběr oblasti obrazovky, která má být zachycena.

Používám i3 WM. Takže moje otázka zní: Jak mohu nakonfigurovat chování obrazovky podobné Unity, aby bylo možné přichytit oblasti obrazovky nebo okna pomocí klávesové zkratky nebo tak něco (bez kopání do ID okna a věcí konzoly)?

Odpověď

Můžete použít import, část ImageMagick.

Zachyťte oblast

Tím se kurzor změní na nitkový kříž a kliknutím a tažením vytvoříte rámeček, toto pole se uloží jako ss.png.

import ss.png 

Zachytit celou obrazovku

Slovo root můžete také nahradit id okna, abyste zachytili konkrétní okno.

Komentáře

  • Můžete také kliknout na okno po import ss.png a pořídit snímek obrazovky tohoto okna.
  • ‚ nefunguje však z konfigurace i3. Minimální příklad: do své konfigurace přidejte řádek bindsym $mod+shift+s exec import ~/screenshot.png. Nedělá pro mě nic ‚.
  • Další odpověď na téma flameshot. To je ‚ to, co ‚ používám dnes.

Odpověď

Je to už dlouho, co jsem se zeptal na tuto otázku a vypadá to, že je užitečná pro některé uživatele. Poskytuji tedy svůj vlastní skript pro vytváření snímky obrazovky s balíčky xclip a imagemagick.

Nejprve nainstalujte výše uvedené závislosti. Pak můžete provést se skriptem níže, co chcete. Podporuje vytváření snímků obrazovky celé obrazovky nebo oblasti obrazovky a také automaticky zkopíruje snímek obrazovky do schránky, takže jej můžete vložit kamkoli (ei prohlížeč nebo Telegram messenger).

Pár nepříliš obtížných vymyslet hacky by přidalo podporu pro zachycení konkrétních oken a přepnutí kopírování části.

 #!/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 zde jsou moje referenční zkratky pro i3wm, které mohou tuto 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/" 

Odpověď

Flameshot je slušná alternativa.

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

Pomocí možnosti -p /path/to/directory můžete přeskočit výběr adresáře pro uložení.

Komentáře

  • pěkný nástroj Hledal jsem takový nástroj pro vytvoření nějaké dokumentace. I vy můžete na snímek přidat označení

Odpovědět

zkusili jste scrot a, jednoduchý nástroj pro snímání obrazovky z příkazového řádku

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

Komentáře

  • můžete také použít scrot -s k zachycení konkrétní oblasti. spusťte příkaz, klepněte a podržte a poté klikněte na druhý bod, ‚ vytvoří ve vašem aktuálním adresáři soubor s datem jako názvem souboru.

Odpověď

Nejprve nainstalujte xclip, imagemagick a jq!

pacman -S imagemagick jq xclip 

I mít tento řádek v mém i3 config:

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

Tím vložíte do schránky schránku aktivního okna, když stisknete mod (Window / Alt) + Printscreen .

i3-msg -t get-tree získá všechna okna z i3 jako json, pak použijeme jq k získání ID okna zaměřeného okna. Předáme jej příkazu importu imagemagicks a výsledek přepíšeme na xclip, který jej vloží do schránky!

Odpovědět

Použít maim . Je aktivněji vyvíjen a závisí na slopu , který je mnohem lepší.

Nepoužívejte scrot. Jeho výběrové pole se poškodí a zanechá dojem na snímku obrazovky (při změně velikosti se také pole deformuje) při použití přes aktualizační okno (řekněme htop).

Komentáře

  • (1) Co je „slop“? (2) Co přesně je lepší než? (3) Proč?
  • 1. Vyberte operaci, která se používá k výběru oblastí okna [ github.com/naelstrof/slop] 2. Je ‚ lepší než scrot, protože ‚ t nepoškodí výběrové pole (zkuste scrot přes htop). 3. idk.

Odpověď

Velmi jednoduchá volba, pokud ji máte nainstalovanou nebo vám nevadí její instalaci pomocí xfce4-screenshooter a konfigurace i3 by byly:

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

Upozornění: i když je poměrně lehký, existují určité závislosti, pokud nepoužíváte žádné jiné programy xfce4.

Odpovědět

Líbí se mi závěrka pro možnosti následného zpracování (ručně nakreslené červené kruhy!) a komplexní možnosti konfigurace.

Oblast obrazovky můžete uchopit spuštěním

shutter --select 

Vazby kláves můžete nastavit v .config/i3/config takto:

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

Načtení trvá vteřinu, takže jej možná budete chtít automaticky spustit na pozadí:

exec shutter --min_at_startup 

Uzávěr bude přístupný prostřednictvím ikony na liště, která vám poskytne mnoho užitečných možností nad rámec výše uvedeného.

Com ment

  • Shutter nelze ‚ v tomto okamžiku snadno plně nainstalovat na Ubuntu 18.04 (nástroj pro úpravy závisí na nedostupné knihovně ; vlastní PPA neaktuální). Smutné.

Odpověď

Tento skript perl6 trvá root, area, window, nebo zpoždění Snímky obrazovky pomocí importu a uloží je do souboru $ a do schránky.

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

Toto jsou klíčové vazby v i3 ke spuštění skript:

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 

odpověď

Mírně upravil řešení pomocí @ddnomad výše, zde je bash verze skriptu s větší vysvětlitelností a dalším příznakem, který umožňuje ukládání pouze do schránky.

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

Pak je to to, co přidáte 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že klíčová vazba je:

  • = vytvořit snímek obrazovky
  • +Control = uložit pouze do schránky
  • +Shift = zachytit pouze konkrétní oblast obrazovky

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *