Як я можу легко робити скріншоти областей екрана в Arch Linux за допомогою i3 WM?


27

Близько місяця тому я перейшов з Ubuntu 14.04 LTS на Arch і я цілком задоволений цим рішенням. Однак я пропускаю деякі функції з моїм новим дистрибутивом, особливо Shift+, printscrякий в Unity дозволяє виділити область екрану для захоплення.

Я використовую i3 WM. Отже, моє запитання таке: як я можу налаштувати поведінку скріншоту, подібного до Unity, щоб мати змогу оснащувати області екрана або вікна за допомогою комбінації клавіш або чогось іншого (без копання у ідентифікатор вікна та консольні речі)?

Відповіді:


29

Ви можете використовувати importчастину ImageMagick.

Захопіть регіон

Це змінить ваш курсор на перехрестя, а при натисканні та перетягуванні утворить поле, це поле буде збережено як ss.png.

import ss.png

Знімайте весь дисплей

import -window root ss.png

Ви також можете замінити слово rootна id вікна, щоб захопити певне вікно.


1
Просто, ідеально, саме те, що мені потрібно - і мені не довелося завантажувати іншу програму.
Даррен Хейнес

1
Ви також можете натиснути на вікно після import ss.png, щоб зробити знімок екрана цього вікна.
Джон Гоуерс

9

Давно я не задав це питання, і схоже, що це корисно для деяких користувачів. Тож я надаю власний сценарій для створення скріншотів xclipта imagemagickпакунків.

Перш за все, встановіть вищезазначені залежності. Тоді ви можете робити все, що завгодно, за допомогою наведеного нижче сценарію. Він підтримує створення екрана екрана на весь екран або область екрану, а також автоматично копіює скріншот у буфер обміну, щоб ви могли вставити його скрізь (електронний веб-переглядач або месенджер Telegram).

Кілька не так важких придумати хакі додали б підтримку для зйомки конкретних вікон та змінення копіювальної частини.

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

І ось мої довідкові ярлики для 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, просту утиліту зйомки екрану командного рядка

посилання.: https://faq.i3wm.org/question/202/what-do-you-guys-use-for-printscreen/


Ого, після гугла я зрозумів, що ця мороза насправді здатна на все, що мені потрібно. Занадто дивно, що я його не знайшов сам. Дякую, чуваче!
ddnomad

ви також можете використовувати scrot -s для зйомки конкретного регіону. запустіть команду, потім натисніть і утримуйте, потім натисніть на другу точку, вона створить файл із датою як ім'ям файлу у вашому поточному каталозі.
vimdude

5

Спочатку встановіть xclip, imagemagick та jq!

pacman -S imagemagick jq xclip

У моєму 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

Це дозволить поставити скріншот активного вікна у буфер обміну, коли ви натискаєте mod (Window / Alt) + Printscreen.

i3-msg -t get-tree отримує всі вікна з i3 як json, тоді ми використовуємо jq, щоб отримати ідентифікатор вікна зосередженого вікна. Ми передаємо його команді імпорту imagemagicks і передаємо результат xclip, який поставить його в буфер обміну!


2

Flameshot - гідна альтернатива.

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

Ви можете скористатися опцією, -p /path/to/directoryщоб пропустити вибір каталогу збереження.


1

Дуже простий варіант, якщо ви встановили його або не проти встановити його, використовуючи xfce4-screenhooter, а i3 config буде:

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

Caveat: хоча досить легкий, є деякі залежності, якщо ви не використовуєте жодної іншої програми xfce4


1

Використовуйте майм . Це більш активно розвивається і залежить від похилості, що набагато краще.

Не використовуйте мошонку. Його вікно вибору псується і залишає враження на скріншоті (також поле деформується при зміні розміру) при використанні над вікном оновлення (скажімо, htop).


(1) Що таке "похилий"? (2) Що саме, чим краще? (3) Чому?
G-Man каже: "Відновіть Моніку"

1. Виберіть операцію, яка використовується для вибору регіонів вікна [ github.com/naelstrof/slop] 2. Краще, ніж scrot, оскільки він не зазнає пошкодження вікна вибору (Спробуйте прокрутити htop). 3. ідк.
Хрітік

1

Мені подобається затвор за свої можливості після обробки (червоні кола намальовані вручну!) Та вичерпні параметри конфігурації.

Ви можете захопити область екрана, запустивши

shutter --select

Ви можете встановити прив'язки ключів .config/i3/configтак:

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

Завантаження потрібна секунда, тому ви, можливо, захочете її автозапустити у фоновому режимі:

exec shutter --min_at_startup

Затвор буде доступний через піктограму лотка, що надає вам безліч корисних варіантів, ніж вище.


На даний момент затвор неможливо легко встановити повністю на Ubuntu 18.04 (інструмент редагування залежить від недоступної бібліотеки; користувацький PPA не оновлений). Сумно.
Рафаель

1

Цей сценарій perl6 отримує корінь, область, вікно або затримує ScreenShots за допомогою імпорту та зберігає їх у файлі $ та у буфері обміну.

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

Це ключові прив’язки в i3 для запуску сценарію:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.