Come posso creare facilmente schermate delle aree dello schermo su Arch Linux con i3 WM?


27

Circa un mese fa sono passato da Ubuntu 14.04 LTS ad Arch e sono abbastanza contento di questa decisione. Tuttavia, mi mancano alcune funzionalità con la mia nuova distribuzione, in particolare Shift+ printscrche in Unity consente di catturare la selezione di un'area dello schermo.

Uso i3 WM. Quindi, la mia domanda è: come posso configurare il comportamento dello screenshot simile a Unity per essere in grado di catturare le aree dello schermo o le finestre con una scorciatoia da tastiera o qualcosa del genere (senza scavare nell'ID della finestra e nelle cose della console)?

Risposte:


29

È possibile utilizzare import, parte di ImageMagick.

Cattura una regione

Ciò cambierà il cursore in un mirino e quando si fa clic e si trascina per formare una casella, tale casella verrà salvata come ss.png.

import ss.png

Cattura l'intero display

import -window root ss.png

Puoi anche sostituire la parola rootcon l'id della finestra per acquisire una finestra specifica.


1
Semplice, perfetto, proprio quello di cui avevo bisogno - e non ho dovuto scaricare un altro programma.
Darren Haynes,

1
Puoi anche fare clic su una finestra dopo import ss.pngper fare uno screenshot di quella finestra.
John Gowers,

9

È da tanto tempo che non ho fatto questa domanda e sembra che sia utile per alcuni utenti. Quindi fornisco il mio script per creare schermate xclipe imagemagickpacchetti.

Prima di tutto, installa le dipendenze sopra menzionate. Quindi puoi fare quello che vuoi con lo script qui sotto. Supporta la creazione di uno screenshot di uno schermo intero o di un'area dello schermo e inoltre copia automaticamente uno screenshot negli Appunti in modo da poterlo incollare ovunque (browser o Telegram Messenger).

Un paio di hack non così difficili da inventare aggiungerebbero un supporto per catturare finestre specifiche e attivare la parte di copia.

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

Ed ecco le mie scorciatoie di riferimento per i3wmutilizzare questo script:

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

6

hai provato a scrivere un'utilità di cattura dello schermo a riga di comando semplice

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


Caspita, dopo aver cercato su google ho capito, che scrot è in realtà capace di tutto ciò di cui ho bisogno. Troppo strano non l'ho trovato da solo. Grazie amico!
ddnomad,

puoi anche usare scrot -s per catturare una regione specifica. eseguire il comando quindi fare clic e tenere premuto quindi fare clic sul secondo punto, verrà creato un file con la data come nome file nella directory corrente.
vimdude,

5

Innanzitutto, installa xclip, imagemagick e jq!

pacman -S imagemagick jq xclip

Ho questa linea nella mia configurazione 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

Questo metterà uno screenshot della finestra attiva negli appunti quando premi mod (Finestra / Alt) + Schermata Stampe.

i3-msg -t get-tree ottiene tutte le finestre da i3 come json, quindi usiamo jq per ottenere l'id della finestra focalizzata. Lo passiamo al comando di importazione imagemagicks e reindirizziamo il risultato a xclip che lo inserirà negli appunti!


2

Flameshot è un'alternativa decente.

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

È possibile utilizzare l'opzione -p /path/to/directoryper saltare la selezione della directory di salvataggio.


1

Un'opzione molto semplice se l'hai installata o non ti dispiace installarla sta usando xfce4-screenshooter e i3 config sarebbe:

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

Avvertenza: sebbene abbastanza leggero ci sono alcune dipendenze se non si utilizzano altri programmi xfce4


1

Usa maim . È più attivamente sviluppato e dipende dalla pendenza che è molto meglio.

Non usare scrot. La sua casella di selezione si corrompe e lascia un'impressione nello screenshot (anche la casella si deforma durante il ridimensionamento) se utilizzata su una finestra di aggiornamento (ad esempio htop).


(1) Che cos'è "slop"? (2) Cosa, esattamente, è meglio di? (3) Perché?
G-Man dice "Ripristina Monica" il

1. Selezionare l'operazione, utilizzata per selezionare le aree della finestra [ github.com/naelstrof/slop] 2. È meglio dello scroto perché non è danneggiato dalla casella di selezione (Provare lo scrot su htop). 3. idk.
Hritik,

1

Mi piace l' otturatore per le sue capacità di post-elaborazione (cerchi rossi disegnati a mano!) E le opzioni di configurazione complete.

È possibile acquisire un'area dello schermo eseguendo

shutter --select

Puoi impostare le combinazioni di tasti in questo .config/i3/configmodo:

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

Il caricamento richiede un secondo, quindi è possibile avviarlo automaticamente in background:

exec shutter --min_at_startup

L'otturatore sarà accessibile tramite un'icona nella barra delle applicazioni, che offre molte opzioni utili oltre a quelle sopra.


Al momento Shutter non può essere installato completamente su Ubuntu 18.04 (lo strumento di modifica dipende dalla libreria non disponibile; PPA personalizzato non aggiornato). Triste.
Raffaello

1

Questo script perl6 utilizza root, area, window o ritarda gli ScreenShots usando import e li salva in un file $ e negli appunti.

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

Questi sono i collegamenti chiave in i3 per eseguire lo script:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.