Como posso facilmente fazer capturas de tela de regiões de tela no Arch Linux com o i3 WM?

27

Há cerca de um mês, mudei do Ubuntu 14.04 LTS para o Arch e estou muito feliz com essa decisão. No entanto, sinto falta de alguns recursos com minha nova distribuição, especialmente Shift+ printscrque no Unity permite que a seleção de uma região da tela seja capturada.

Eu uso o i3 WM. Portanto, minha pergunta é: como posso configurar o comportamento de captura de tela semelhante ao Unity para poder capturar regiões da tela ou janelas com um atalho de teclado ou algo assim (sem precisar pesquisar o ID da janela e o console)?

ddnomad
fonte

Respostas:

29

Você pode usar importparte do ImageMagick.

Capturar uma região

Isso mudará o cursor para uma mira e, quando você clicar e arrastar para formar uma caixa, essa caixa será salva como ss.png.

import ss.png

Capturar tela inteira

import -window root ss.png

Você também pode substituir a palavra rootpelo ID da janela para capturar uma janela específica.

Casey
fonte
11
Simples, perfeito, exatamente o que eu precisava - e não precisava baixar outro programa.
Darren Haynes
11
Você também pode clicar em uma janela depois import ss.pngpara tirar uma captura de tela dessa janela.
John Gowers
9

Faz muito tempo desde que eu fiz essa pergunta e parece útil para alguns usuários. Então, forneço meu próprio script para criar capturas de tela xclipe imagemagickpacotes.

Primeiro de tudo, instale as dependências mencionadas acima. Em seguida, você pode fazer o que quiser com o script abaixo. Ele suporta a captura de tela de uma tela inteira ou de uma região da tela e também copia automaticamente uma captura de tela em uma área de transferência para que você possa colá-la em qualquer lugar (navegador ei ou messenger Telegram).

Alguns não tão difíceis de criar hacks adicionariam um suporte para capturar janelas específicas e alternariam partes de cópias.

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

E aqui estão os meus atalhos de referência para um i3wmfazer uso deste 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
fonte
6

você tentou escrever um utilitário simples de captura de tela de linha de comando

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

Corleone
fonte
Uau, depois de pesquisar no Google, percebi que aquele escroto é realmente capaz de tudo o que preciso. Estranho demais, eu não achei isso sozinho. Valeu cara!
Ddnomad
você também pode usar scrot -s para capturar uma região específica. execute o comando, clique e segure e clique no segundo ponto; ele criará um arquivo com data como nome do arquivo no diretório atual.
vimdude
5

Primeiro, instale o xclip, imagemagick e jq!

pacman -S imagemagick jq xclip

Eu tenho esta linha na minha configuração do 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

Isso colocará uma captura de tela da janela ativa na sua área de transferência quando você pressionar mod (Window / Alt) + Printscreen.

O i3-msg -t get-tree obtém todas as janelas do i3 como json, depois usamos o jq para obter o ID da janela focada. Passamos para o comando imagemagicks import e canalizamos o resultado para o xclip, que o colocará na área de transferência!

Elmer
fonte
2

Flameshot é uma alternativa decente.

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

Você pode usar a opção -p /path/to/directorypara pular a seleção do diretório de salvamento.

Rafael
fonte
1

Uma opção muito simples, se você a instalou ou não se importa de instalá-la, está usando o xfce4-screenshooter e a configuração do i3 seria:

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

Advertência: apesar de bastante leve, existem algumas dependências se você não estiver usando nenhum outro programa xfce4

Daniel
fonte
1

Use mutilado . É desenvolvido mais ativamente e depende do slop, que é muito melhor.

Não use scrot. Sua caixa de seleção corrompe e deixa uma impressão na captura de tela (também deforma ao redimensionar) quando usada em uma janela de atualização (por exemplo, htop).

Hritik
fonte
(1) O que é "slop"? (2) O que exatamente é melhor do que? (3) por que?
G-Man diz 'Reinstate Monica'
1. Selecione a operação, usada para selecionar as regiões da janela [ github.com/naelstrof/slop] 2. É melhor do que o scrot, porque ele não sofre danos na caixa de seleção (tente examinar o htop). 3. idk.
precisa saber é o seguinte
1

Eu gosto do obturador por seus recursos de pós-processamento (círculos vermelhos desenhados à mão!) E opções de configuração abrangentes.

Você pode pegar uma região da tela executando

shutter --select

Você pode configurar as combinações de teclas da seguinte .config/i3/configmaneira:

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

Leva um segundo para carregar, então você pode querer iniciá-lo automaticamente em segundo plano:

exec shutter --min_at_startup

O obturador estará acessível através de um ícone de bandeja, que oferece muitas opções úteis além do acima.

Rafael
fonte
O obturador não pode ser facilmente instalado completamente no Ubuntu 18.04 neste momento (a ferramenta de edição depende da biblioteca indisponível; o PPA personalizado não está atualizado). Triste.
Raphael
1

Esse script perl6 obtém ScreenShots raiz, área, janela ou atraso usando a importação e os salva em um arquivo $ e na área de transferência.

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

Estas são as ligações de teclas no i3 para executar o 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
fonte