¿Cómo puedo hacer capturas de pantalla de regiones de pantalla en Arch Linux con i3 WM?

27

Hace aproximadamente un mes cambié de Ubuntu 14.04 LTS a Arch y estoy bastante contento con esta decisión. Sin embargo, echo de menos algunas funciones con mi nueva distribución, especialmente Shift+ printscrque en Unity permite capturar la selección de una región de pantalla.

Yo uso i3 WM. Entonces, mi pregunta es: ¿cómo puedo configurar el comportamiento de captura de pantalla similar a Unity para poder ajustar regiones de pantalla o ventanas con un atajo de teclado o algo así (sin profundizar en la identificación de la ventana y las cosas de la consola)?

ddnomad
fuente

Respuestas:

29

Puede usar import, parte de ImageMagick.

Captura una región

Esto cambiará su cursor a una cruz y cuando haga clic y arrastre para formar un cuadro, ese cuadro se guardará como ss.png.

import ss.png

Capture toda la pantalla

import -window root ss.png

También puede reemplazar la palabra rootcon la identificación de la ventana para capturar una ventana específica.

casey
fuente
1
Simple, perfecto, justo lo que necesitaba, y no tuve que descargar otro programa.
Darren Haynes
1
También puede hacer clic en una ventana después import ss.pngpara tomar una captura de pantalla de esa ventana.
John Gowers
9

Ha pasado mucho tiempo desde que hice esta pregunta y parece útil para algunos de los usuarios. Así que proporciono mi propio script para hacer capturas de pantalla con xclipy imagemagickpaquetes.

En primer lugar, instale las dependencias mencionadas anteriormente. Luego puedes hacer lo que quieras con el siguiente script. Admite hacer una captura de pantalla de una pantalla completa o una región de pantalla y también copia automáticamente una captura de pantalla en el portapapeles para que pueda pegarla en todas partes (navegador ei o Telegram messenger).

Un par de no tan difíciles de encontrar hacks agregaría un soporte para capturar ventanas específicas y alternar la parte de 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}

Y aquí están mis atajos de referencia para i3wmhacer uso de este 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/"
ddnomad
fuente
6

¿Has intentado buscar una utilidad de captura de pantalla de línea de comandos simple?

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

Corleone
fuente
Wow, después de buscar en Google, me di cuenta de que el scrot es realmente capaz de todo lo que necesito. Demasiado raro, no lo encontré solo. Gracias amigo!
ddnomad
También puede usar scrot -s para capturar una región específica. ejecute el comando, luego haga clic y mantenga presionado y luego haga clic en el segundo punto, creará un archivo con la fecha como nombre de archivo en su directorio actual.
vimdude
5

Primero, instale xclip, imagemagick y jq!

pacman -S imagemagick jq xclip

Tengo esta línea en mi configuración 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

Esto colocará una captura de pantalla de la ventana activa en su portapapeles cuando presione mod (Ventana / Alt) + Pantalla de impresión.

i3-msg -t get-tree obtiene todas las ventanas de i3 como json, luego usamos jq para obtener la identificación de la ventana enfocada. ¡Lo pasamos al comando de importación de imagemagicks y canalizamos el resultado a xclip, que lo pondrá en el portapapeles!

Elmer
fuente
2

Flameshot es una alternativa decente.

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

Puede usar la opción -p /path/to/directorypara omitir la selección del directorio de guardar.

Rafael
fuente
1

Una opción muy simple si lo tiene instalado o no le importa instalarlo es usar xfce4-Screenshooter y i3 config sería:

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

Advertencia: aunque es bastante ligero, existen algunas dependencias si no está utilizando ningún otro programa xfce4

Daniel
fuente
1

Usa mutilaciones . Está más activamente desarrollado y depende de la pendiente, que es mucho mejor.

No uses scrot. Su cuadro de selección se corrompe y deja una impresión en la captura de pantalla (también el cuadro se deforma al cambiar el tamaño) cuando se usa sobre una ventana de actualización (por ejemplo, htop).

Hritik
fuente
(1) ¿Qué es "descuido"? (2) ¿Qué es exactamente mejor que? (3) ¿Por qué?
G-Man dice 'reinstalar a Monica' el
1. Operación de selección, utilizada para seleccionar regiones de ventana [ github.com/naelstrof/slop] 2. Es mejor que examinar porque no sufre daños en el cuadro de selección (Intente desplazarse por htop). 3. idk.
Hritik
1

Me gusta el obturador por sus capacidades de procesamiento posterior (¡círculos rojos dibujados a mano!) Y sus opciones de configuración integrales.

Puede tomar una región de la pantalla ejecutando

shutter --select

Puede configurar las combinaciones de teclas de la siguiente .config/i3/configmanera:

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

Se tarda un segundo en cargar, por lo que es posible que desee iniciarlo automáticamente en segundo plano:

exec shutter --min_at_startup

Se podrá acceder al obturador a través de un icono de bandeja, que le brinda muchas opciones útiles más allá de lo anterior.

Rafael
fuente
Shutter no puede instalarse fácilmente en Ubuntu 18.04 en este momento (la herramienta de edición depende de la biblioteca no disponible; el PPA personalizado no está actualizado). Triste.
Rafael
1

Este script perl6 toma capturas de pantalla de raíz, área, ventana o retraso usando importación y las guarda en un archivo $ y en el portapapeles.

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

Estos son los enlaces de teclas en i3 para ejecutar el 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
Mimosinnet
fuente