Bagaimana saya bisa dengan mudah membuat screenshot dari wilayah layar di Arch Linux dengan i3 WM?

27

Sekitar sebulan yang lalu saya beralih dari Ubuntu 14.04 LTS ke Arch dan saya cukup senang dengan keputusan ini. Namun, saya kehilangan beberapa fitur dengan distro baru saya, terutama Shift+ printscryang di Unity memungkinkan pemilihan wilayah layar untuk ditangkap.

Saya menggunakan WM i3. Jadi, pertanyaan saya adalah: bagaimana saya bisa mengkonfigurasi perilaku screenshot seperti Unity untuk dapat menjepret wilayah layar atau windows dengan pintasan keyboard atau sesuatu (tanpa menggali ke id jendela dan hal-hal konsol)?

ddnomad
sumber

Jawaban:

29

Anda dapat menggunakan import, bagian dari ImageMagick.

Tangkap suatu wilayah

Ini akan mengubah kursor Anda menjadi crosshair dan ketika Anda mengklik dan seret untuk membentuk sebuah kotak, kotak itu akan disimpan sebagai ss.png.

import ss.png

Tangkap seluruh tampilan

import -window root ss.png

Anda juga dapat mengganti kata rootdengan id jendela untuk mengambil jendela tertentu.

casey
sumber
1
Sederhana, sempurna, hanya apa yang saya butuhkan - dan saya tidak perlu mengunduh program lain.
Darren Haynes
1
Anda juga dapat mengeklik jendela setelah itu import ss.pnguntuk mengambil tangkapan layar dari jendela itu.
John Gowers
9

Sudah lama sejak saya mengajukan pertanyaan ini dan sepertinya itu bermanfaat untuk beberapa pengguna. Jadi saya memberikan skrip saya sendiri untuk membuat tangkapan layar xclipdan imagemagickpaket.

Pertama-tama, instal dependensi yang disebutkan di atas. Maka Anda dapat melakukan apa pun yang Anda inginkan dengan skrip di bawah ini. Ini mendukung pembuatan tangkapan layar seluruh layar atau wilayah layar dan juga secara otomatis menyalin tangkapan layar ke papan klip sehingga Anda dapat menempelkannya di mana saja (misalnya peramban atau utusan Telegram).

Beberapa yang tidak terlalu sulit untuk diretas akan menambah dukungan untuk menangkap jendela tertentu dan mengganti bagian penyalinan.

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

Dan inilah pintasan referensi saya untuk i3wmmemanfaatkan skrip ini:

# 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
sumber
6

Anda sudah mencoba scrot , utilitas tangkapan layar commandline sederhana

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

Corleone
sumber
Wow, setelah googling saya sadari, bahwa scrot sebenarnya mampu semua yang saya butuhkan. Terlalu aneh aku tidak menemukannya sendirian. Terima kasih Bung!
ddnomad
Anda juga dapat menggunakan scrot -s untuk menangkap wilayah tertentu. jalankan perintah lalu klik dan tahan lalu klik pada titik kedua, itu akan membuat file dengan tanggal sebagai nama file di direktori Anda saat ini.
vimdude
5

Pertama, instal xclip, imagemagick dan jq!

pacman -S imagemagick jq xclip

Saya memiliki baris ini di konfigurasi i3 saya:

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

Ini akan menempatkan tangkapan layar jendela aktif di clipboard Anda ketika Anda menekan mod (Window / Alt) + Printscreen.

i3-msg -t get-tree mendapatkan semua jendela dari i3 sebagai json, maka kita menggunakan jq untuk mendapatkan id jendela dari jendela yang difokuskan. Kami meneruskannya ke perintah impor imagemagicks dan mengirimkan hasilnya ke xclip yang akan meletakkannya di clipboard!

Elmer
sumber
2

Flameshot adalah alternatif yang layak.

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

Anda dapat menggunakan opsi -p /path/to/directoryuntuk melewati pemilihan direktori simpan.

Raphael
sumber
1

Pilihan yang sangat sederhana jika Anda menginstalnya atau tidak keberatan menginstalnya menggunakan xfce4-screenshooter dan konfigurasi i3 adalah:

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

Peringatan: meskipun cukup ringan ada beberapa dependensi jika Anda tidak menggunakan program xfce4 lainnya

Daniel
sumber
1

Gunakan maim . Ini lebih aktif dikembangkan dan tergantung pada slop mana yang jauh lebih baik.

Jangan gunakan scrot. Kotak pemilihannya rusak dan meninggalkan kesan di tangkapan layar (juga kotak berubah bentuk ketika mengubah ukuran) ketika digunakan melalui jendela pembaruan (katakanlah htop).

Hritik
sumber
(1) Apa itu "kotor"? (2) Apa sebenarnya yang lebih baik dari itu? (3) Kenapa?
G-Man Mengatakan 'Reinstate Monica'
1. Pilih operasi, digunakan untuk memilih wilayah jendela [ github.com/naelstrof/slop] 2. Lebih baik daripada scrot karena tidak mengalami korupsi kotak pemilihan (Coba scrot over htop). 3. idk.
Hritik
1

Saya suka shutter untuk kemampuan pasca-pemrosesan (lingkaran merah yang digambar tangan!) Dan opsi konfigurasi yang komprehensif.

Anda dapat mengambil wilayah layar dengan menjalankan

shutter --select

Anda dapat mengatur ikatan utama .config/i3/configseperti:

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

Butuh satu detik untuk memuat, jadi Anda mungkin ingin melakukan autostart di latar belakang:

exec shutter --min_at_startup

Rana akan dapat diakses melalui ikon baki, yang memberi Anda banyak opsi berguna di atas.

Raphael
sumber
Rana tidak dapat dengan mudah dipasang sepenuhnya pada Ubuntu 18.04 pada saat ini (alat edit tergantung pada pustaka yang tidak tersedia; PPA khusus tidak mutakhir). Sedih.
Raphael
1

Skrip perl6 ini mengambil root, area, jendela, atau menunda ScreenShots menggunakan impor dan menyimpannya dalam file $ dan di clipboard.

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

Ini adalah binding utama di i3 untuk menjalankan skrip:

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
sumber