Как я могу легко сделать скриншоты областей экрана на 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идентификатором окна, чтобы захватить определенное окно.


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 , простую утилиту захвата экрана командной строки

ссылка: 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).


(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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.