Comment puis-je facilement faire des captures d'écran des régions d'écran sur Arch Linux avec i3 WM?

27

Il y a environ un mois, je suis passé d'Ubuntu 14.04 LTS à Arch et je suis assez satisfait de cette décision. Cependant, je manque certaines fonctionnalités avec ma nouvelle distribution, en particulier Shift+ printscrqui, dans Unity, permet de sélectionner une région d'écran à capturer.

J'utilise i3 WM. Donc, ma question est: comment puis-je configurer un comportement de capture d'écran de type Unity pour pouvoir accrocher des régions d'écran ou des fenêtres avec un raccourci clavier ou quelque chose (sans creuser dans l'ID de la fenêtre et les éléments de la console)?

ddnomad
la source

Réponses:

29

Vous pouvez utiliser import, une partie d'ImageMagick.

Capturez une région

Cela changera votre curseur en un réticule et lorsque vous cliquez et faites glisser pour former une boîte, cette boîte sera enregistrée sous ss.png.

import ss.png

Capturez tout l'affichage

import -window root ss.png

Vous pouvez également remplacer le mot rootpar l'ID de la fenêtre pour capturer une fenêtre spécifique.

casey
la source
1
Simple, parfait, exactement ce dont j'avais besoin - et je n'ai pas eu à télécharger un autre programme.
Darren Haynes
1
Vous pouvez également cliquer sur une fenêtre après import ss.pngpour prendre une capture d'écran de cette fenêtre.
John Gowers
9

Cela fait longtemps que je n'ai pas posé cette question et il semble que cela soit utile pour certains utilisateurs. Je fournis donc mon propre script pour faire des captures d'écran avec xclipet des imagemagickpackages.

Tout d'abord, installez les dépendances mentionnées ci-dessus. Ensuite, vous pouvez faire ce que vous voulez avec le script ci-dessous. Il prend en charge la capture d'écran d'un écran entier ou d'une région d'écran et copie automatiquement une capture d'écran dans un presse-papiers afin que vous puissiez la coller partout (navigateur ei ou messager Telegram).

Un couple de pas si difficile à trouver avec des hacks ajouterait un support pour capturer des fenêtres spécifiques et basculer la copie.

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

Et voici mes raccourcis de référence pour i3wmutiliser ce 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
la source
6

avez-vous essayé de scrotter un simple utilitaire de capture d'écran en ligne de commande

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

Corleone
la source
Wow, après avoir googlé, j'ai réalisé que Scrot est en fait capable de tout ce dont j'ai besoin. Trop bizarre, je ne l'ai pas trouvé tout seul. Merci mec!
ddnomad
vous pouvez également utiliser scrot -s pour capturer une région spécifique. exécutez la commande puis cliquez et maintenez puis cliquez sur le deuxième point, cela créera un fichier avec la date comme nom de fichier dans votre répertoire actuel.
vimdude
5

Tout d'abord, installez xclip, imagemagick et jq!

pacman -S imagemagick jq xclip

J'ai cette ligne dans ma configuration 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

Cela mettra une capture d'écran de la fenêtre active sur votre presse-papiers lorsque vous appuyez sur mod (Window / Alt) + Printscreen.

i3-msg -t get-tree récupère toutes les fenêtres d'i3 en tant que json, puis nous utilisons jq pour obtenir l'id de la fenêtre de la fenêtre focalisée. Nous le passons à la commande import imagemagicks et redirige le résultat vers xclip qui le mettra dans le presse-papier!

Elmer
la source
2

Flameshot est une alternative décente.

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

Vous pouvez utiliser l'option -p /path/to/directorypour ignorer la sélection du répertoire de sauvegarde.

Raphael
la source
1

Une option très simple si vous l'avez installée ou si cela ne vous dérange pas de l'installer utilise xfce4-screenshooter et la configuration i3 serait:

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

Mise en garde: bien que relativement léger, il existe certaines dépendances si vous n'utilisez aucun autre programme xfce4

Daniel
la source
1

Utilisez maim . Il est développé plus activement et dépend de la pente qui est bien meilleure.

N'utilisez pas de scrot. Sa boîte de sélection corrompt et laisse une impression dans la capture d'écran (également la boîte se déforme lors du redimensionnement) lorsqu'elle est utilisée sur une fenêtre de mise à jour (disons htop).

Hritik
la source
(1) Qu'est-ce que le «slop»? (2) Quoi de mieux, exactement? (3) Pourquoi?
G-Man dit `` Réintègre Monica ''
1. Sélectionnez l'opération, utilisée pour sélectionner les régions de la fenêtre [ github.com/naelstrof/slop] 2. C'est mieux que scrot car il ne subit pas de corruption de la boîte de sélection (essayez scrot over htop). 3. idk.
Hritik
1

J'aime l' obturateur pour ses capacités de post-traitement (cercles rouges dessinés à la main!) Et ses options de configuration complètes.

Vous pouvez saisir une région d'écran en exécutant

shutter --select

Vous pouvez configurer des raccourcis clavier de la .config/i3/configmanière suivante:

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

Le chargement prend une seconde, vous pouvez donc le démarrer automatiquement en arrière-plan:

exec shutter --min_at_startup

L'obturateur sera alors accessible via une icône de plateau, ce qui vous donne de nombreuses options utiles au-delà de ce qui précède.

Raphael
la source
Shutter ne peut pas être facilement installé complètement sur Ubuntu 18.04 à ce stade (l'outil d'édition dépend de la bibliothèque non disponible; PPA personnalisé n'est pas à jour). Triste.
Raphael
1

Ce script perl6 prend racine, zone, fenêtre ou retarde les captures d' écran en utilisant l'importation et les enregistre dans un fichier $ et dans le presse-papiers.

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

Voici les principales liaisons dans i3 pour exécuter le 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
la source