Как я могу легко сделать скриншоты областей экрана на Arch Linux с i3 WM?

27

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

Я использую i3 WM. Итак, мой вопрос: как я могу настроить поведение скриншотов в стиле Unity, чтобы иметь возможность привязывать области экрана или окна с помощью сочетания клавиш или чего-то еще (не копаясь в идентификаторе окна и консольном материале)?

ddnomad
источник

Ответы:

29

Вы можете использовать import, часть ImageMagick.

Захват региона

Это изменит ваш курсор на перекрестие, и когда вы щелкните и перетащите, чтобы сформировать поле, это поле будет сохранено как ss.png.

import ss.png

Захват всего дисплея

import -window root ss.png

Вы также можете заменить слово rootидентификатором окна, чтобы захватить определенное окно.

Casey
источник
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/"
ddnomad
источник
6

вы пробовали scrot , простую утилиту захвата экрана командной строки

ссылка: https://faq.i3wm.org/question/202/what-do-you-guys-use-for-printscreen/

Корлеоне
источник
Вау, после поиска в Google я понял, что мошенник действительно способен на все, что мне нужно. Слишком странно, я не нашел это сам. Спасибо чувак!
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-screenshooter, а конфигурация i3 будет выглядеть так:

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

Предостережение: хотя и довольно легкий, есть некоторые зависимости, если вы не используете другие программы xfce4

Даниил
источник
1

Используй увечье . Это более активно развивается и зависит от помоев , который намного лучше.

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

Hritik
источник
(1) Что такое «помои»? (2) Что именно это лучше, чем? (3) почему?
G-Man говорит «Восстановить Монику»
1. Операция select, используемая для выбора областей окна [ github.com/naelstrof/slop] 2. Это лучше, чем scrot, потому что он не подвергается повреждению поля выбора (попробуйте scrot over htop). 3. Ид.
Hritik
1

Мне нравится затвор из- за его возможностей постобработки (нарисованные от руки красные круги!) И всесторонних опций конфигурации.

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

shutter --select

Вы можете настроить привязки клавиш .config/i3/configследующим образом:

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

Загрузка занимает секунду, поэтому вы можете автоматически запустить ее в фоновом режиме:

exec shutter --min_at_startup

Затвор будет доступен через иконку в трее, что дает вам много полезных опций, помимо вышеперечисленного.

Рафаэль
источник
На данный момент Shutter не может быть полностью установлен в Ubuntu 18.04 (инструмент редактирования зависит от недоступной библиотеки; пользовательский PPA не обновлен). Печальный.
Рафаэль
1

Этот сценарий perl6 получает root, area, window или задержку 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
Mimosinnet
источник