İ3 WM ile Arch Linux'taki ekran bölgelerinin ekran görüntülerini nasıl kolayca yapabilirim?


27

Yaklaşık bir ay önce Ubuntu 14.04 LTS'den Arch'a geçiş yaptım ve bu karardan çok memnunum. Ancak, yeni dağıtımımla özellikle Unity'de ekran bölgesinin seçilmesine izin veren Shift+ özelliklerinden bazılarını özlüyorum printscr.

İ3 WM kullanıyorum. Öyleyse sorum şu: Unity benzeri ekran görüntüsü davranışını ekran bölgelerini veya pencerelerini klavye kısayoluyla veya başka bir şeyle (pencere kimliği ve konsol kazılarına girmeden) yakalayabilecek şekilde nasıl yapılandırabilirim?

Yanıtlar:


29

importImageMagick'in bir bölümünü kullanabilirsiniz .

Bir bölge yakalamak

Bu, imlecinizi artı işareti olarak değiştirir ve bir kutu oluşturmak için tıklayıp sürüklerken, bu kutu olarak kaydedilir ss.png.

import ss.png

Tüm ekranı yakala

import -window root ss.png

rootBelirli bir pencereyi yakalamak için sözcüğü pencere kimliğiyle de değiştirebilirsiniz .


1
Basit, mükemmel, tam ihtiyacım olan şeydi ve başka bir program indirmek zorunda değildim.
Darren Haynes

1
Pencerenin import ss.pngekran görüntüsünü almak için pencerenin ardından da tıklayabilirsiniz .
John Gowers

9

Bu soruyu sorduğumdan bu yana uzun zaman geçti ve bazı kullanıcılara yardımcı oldu. Bu yüzden ekran görüntüleri xclipve imagemagickpaketleri yapmak için kendi senaryomu hazırlıyorum.

Her şeyden önce, yukarıda belirtilen bağımlılıkları kurun. O zaman aşağıdaki senaryo ile ne istersen yapabilirsin. Tüm ekranın veya ekran bölgesinin ekran görüntüsünü oluşturmayı destekler ve ayrıca ekran görüntüsünü panoya otomatik olarak kopyalar, böylece her yere yapıştırabilirsiniz (ei tarayıcısı veya Telegram messenger).

Hack'lerle karşılaşmak o kadar zor olmayan bir çift, belirli pencereleri yakalamak ve geçiş kopyalamak için bir destek sağlar.

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

Ve işte bu kısayolun kullanılması için referans kısayollarım i3wm:

# 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

Scrot a, basit bir komut satırı ekran yakalama programı denediniz mi

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


Vay canına, googling'den sonra, bu skrotun aslında ihtiyacım olan her şeyi yapabileceğini anladım. Çok garip, tek başıma bulamadım. Tesekkurler dostum!
ddnomad

Belirli bir bölgeyi yakalamak için skrot-lar da kullanabilirsiniz. komutu çalıştırın, tıklayın ve basılı tutun, ardından ikinci noktayı tıklayın, geçerli dizinde dosya adıyla tarih içeren bir dosya oluşturacak.
vimdude

5

İlk önce, xclip, imagemagick ve jq!

pacman -S imagemagick jq xclip

Benim i3 config benim bu satırı var:

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

Mod (Window / Alt) + Printscreen tuşlarına bastığınızda aktif pencerenin ekran görüntüsünü panoya yerleştirirsiniz.

i3-msg -t get-tree tüm pencereleri i3'ten json olarak alır, sonra odaklanan pencerenin pencere kimliğini almak için jq kullanırız. Bunu imagemagicks import komutuna geçirdik ve sonucu panoya koyacak olan xclip'e aktardık!


2

Flameshot iyi bir alternatif.

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

-p /path/to/directoryKaydetme dizinini seçmeyi atlamak için seçeneği kullanabilirsiniz .


1

Çok basit bir seçenek eğer kurmuşsanız veya kurmakta sakınca yoksa, xfce4-screenshooter kullanıyor ve i3 config şöyle olacaktır:

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

Uyarı: Oldukça hafif olmasına rağmen, başka bir xfce4 programı kullanmıyorsanız bazı bağımlılıklar vardır.


1

Maim kullanın . Daha aktif olarak geliştirilmiştir ve daha iyi olan eğime bağlıdır .

Scrot kullanmayın. Seçim kutusu, bir güncelleme penceresi üzerinde kullanıldığında (ekrana geldiğinde deforme olur) ekran görüntüsünde (aynı zamanda yeniden boyutlandırma sırasında deforme olur) bir izlenim bırakıyor.


(1) “Slop” nedir? (2) Tam olarak, bundan daha iyi olan nedir? (3) Neden?
G-Man 'Monica'yı Yeniden Girin' diyor

1. Pencere bölgelerini seçmek için kullanılan işlemi seçin [ github.com/naelstrof/slop] 2. Seçim kutusunun bozulmasına maruz kalmadığından (scrot üzerinde gezinmeyi deneyin) skrottan daha iyidir. 3. idk.
Hritik

1

İşlem sonrası yetenekleri (elle çizilmiş kırmızı daireler!) Ve kapsamlı yapılandırma seçenekleri için panjurları severim .

Çalıştırarak bir ekran bölgesini kapabilirsiniz

shutter --select

Anahtar bağlamalarını şu şekilde ayarlayabilirsiniz .config/i3/config:

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

Yüklemesi biraz zaman alıyor, bu nedenle arka planda otomatik olarak başlatmak isteyebilirsiniz:

exec shutter --min_at_startup

Deklanşöre, bir tepsi simgesiyle erişilebilecek, bu da size yukarıdakilerin ötesinde birçok yararlı seçenek sunar.


Deklanşör bu noktada Ubuntu 18.04'e tamamen yüklenemez (düzenleme aracı mevcut olmayan kitaplığa bağlıdır; özel PPA güncel değildir). Üzgün.
Raphael,

1

Bu perl6 betiği içe aktarma kullanarak kök, alan, pencere veya ScreenShots gecikmesini alır ve bunları bir $ dosyasına ve panoya kaydeder.

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

Bunlar i3'teki betiği çalıştırmak için gereken anahtar bağlantılar:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.