Làm cách nào tôi có thể dễ dàng tạo ảnh chụp màn hình các vùng màn hình trên Arch Linux với i3 WM?


27

Khoảng một tháng trước, tôi đã chuyển từ Ubuntu 14.04 LTS sang Arch và tôi khá hài lòng với quyết định này. Tuy nhiên, tôi bỏ lỡ một số tính năng với bản phân phối mới của mình, đặc biệt là Shift+ printscrtrong Unity cho phép chọn vùng màn hình để chụp.

Tôi sử dụng i3 WM. Vì vậy, câu hỏi của tôi là: làm cách nào tôi có thể định cấu hình hành vi ảnh chụp màn hình giống Unity để có thể chụp các vùng màn hình hoặc cửa sổ bằng phím tắt hoặc một cái gì đó (mà không cần đào sâu vào id cửa sổ và nội dung bảng điều khiển)?

Câu trả lời:


29

Bạn có thể sử dụng import, một phần của ImageMagick.

Chụp một vùng

Điều này sẽ thay đổi con trỏ của bạn thành một dấu thập và khi bạn nhấp và kéo để tạo thành một hộp, hộp đó sẽ được lưu dưới dạng ss.png.

import ss.png

Chụp toàn màn hình

import -window root ss.png

Bạn cũng có thể thay thế từ rootbằng id cửa sổ để chụp một cửa sổ cụ thể.


1
Đơn giản, hoàn hảo, đúng thứ tôi cần - và tôi không phải tải xuống chương trình khác.
Darren Haynes

1
Bạn cũng có thể nhấp vào một cửa sổ sau import ss.pngđể chụp ảnh màn hình của cửa sổ đó.
John Gowers

9

Đã lâu rồi tôi mới hỏi câu hỏi này và có vẻ như nó hữu ích cho một số người dùng. Vì vậy, tôi cung cấp kịch bản của riêng tôi để tạo ảnh chụp màn hình với xclipimagemagickcác gói.

Trước hết, cài đặt các phụ thuộc đã đề cập ở trên. Sau đó, bạn có thể làm bất cứ điều gì bạn muốn với kịch bản dưới đây. Nó hỗ trợ tạo một ảnh chụp màn hình của toàn bộ màn hình hoặc một vùng màn hình và nó cũng tự động sao chép ảnh chụp màn hình vào bảng tạm để bạn có thể dán nó ở mọi nơi (trình duyệt ei hoặc trình nhắn tin Telegram).

Một vài cái không quá khó để tạo ra các bản hack sẽ thêm hỗ trợ cho việc chụp các cửa sổ cụ thể và chuyển phần sao chép.

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

Và đây là các phím tắt tham chiếu của tôi i3wmđể sử dụng tập lệnh này:

# 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

Bạn đã thử chà một tiện ích chụp màn hình dòng lệnh đơn giản chưa?

tham chiếu ,: https://faq.i3wm.org/question/202/what-do-you-guys-use-for-printscreen/


Wow, sau khi googling tôi nhận ra, đó là thực sự có khả năng của tất cả mọi thứ tôi cần. Quá kỳ lạ, tôi đã không tìm thấy nó một mình. Cảm ơn, anh bạn!
ddnomad

bạn cũng có thể sử dụng Scrot -s để chụp một vùng cụ thể. chạy lệnh sau đó nhấp và giữ sau đó nhấp vào điểm thứ hai, nó sẽ tạo một tệp có ngày là tên tệp trong thư mục hiện tại của bạn.
vimdude

5

Đầu tiên, cài đặt xclip, fantemagick và jq!

pacman -S imagemagick jq xclip

Tôi có dòng này trong cấu hình i3 của mình:

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

Thao tác này sẽ đặt ảnh chụp màn hình của cửa sổ đang hoạt động vào khay nhớ tạm của bạn khi bạn nhấn mod (Window / Alt) + Printscreen.

i3-dir -t get-tree lấy tất cả các cửa sổ từ i3 là json, sau đó chúng tôi sử dụng jq để lấy id cửa sổ của cửa sổ tập trung. Chúng tôi chuyển nó cho lệnh nhập hình ảnh và đưa kết quả cho xclip, người sẽ đưa nó vào bảng tạm!


2

Flameshot là một thay thế tốt.

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

Bạn có thể sử dụng tùy chọn -p /path/to/directoryđể bỏ qua việc chọn thư mục lưu.


1

Một tùy chọn rất đơn giản nếu bạn đã cài đặt hoặc không bận tâm cài đặt nó đang sử dụng xfce4-Screenshooter và cấu hình i3 sẽ là:

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

Hãy cẩn thận: mặc dù khá nhẹ nhưng có một số phụ thuộc nếu bạn không sử dụng bất kỳ chương trình xfce4 nào khác


1

Sử dụng maim . Nó được phát triển tích cực hơn và phụ thuộc vào slop đó là cách tốt hơn.

Đừng dùng bìu. Hộp lựa chọn của nó bị hỏng và để lại ấn tượng trong ảnh chụp màn hình (cũng là hộp biến dạng khi thay đổi kích thước) khi được sử dụng qua cửa sổ cập nhật (giả sử htop).


(1) Thế nào là slop dốc? (2) Chính xác thì nó tốt hơn cái gì? (3) Tại sao?
G-Man nói 'Phục hồi Monica'

1. Chọn thao tác, được sử dụng để chọn các vùng cửa sổ [ github.com/naelstrof/slop] 2. Nó tốt hơn so với Scrot vì nó không trải qua tham nhũng hộp lựa chọn (Hãy thử quét qua htop). 3. idk.
Hritik

1

Tôi thích màn trập cho khả năng xử lý hậu kỳ của nó (các vòng tròn màu đỏ vẽ tay!) Và các tùy chọn cấu hình toàn diện.

Bạn có thể lấy một vùng màn hình bằng cách chạy

shutter --select

Bạn có thể thiết lập các ràng buộc chính .config/i3/confignhư vậy:

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

Phải mất một giây để tải, vì vậy bạn có thể muốn tự động khởi động nó trong nền:

exec shutter --min_at_startup

Shutter sẽ có thể truy cập thông qua biểu tượng khay sau đó, cung cấp cho bạn nhiều tùy chọn hữu ích ngoài các mục trên.


Shutter không thể dễ dàng cài đặt đầy đủ trên Ubuntu 18.04 vào thời điểm này (công cụ chỉnh sửa phụ thuộc vào thư viện không có sẵn; PPA tùy chỉnh không cập nhật). Buồn.
Raphael

1

Tập lệnh perl6 này lấy root, area, window hoặc trì hoãn ScreenShots bằng cách nhập và lưu chúng trong tệp $ và trong bảng tạm.

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

Đây là các ràng buộc chính trong i3 để chạy tập lệnh:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.