Скриншот только активного монитора (gnome-screenshot)

Нажатие экрана печати или нажатие на скриншоте приведет к захвату обоих экранов. Что, если я хочу, чтобы только снимался активный монитор, возможно ли это? Или я должен использовать затвор или STH?

Так что не пространства одного экрана, а система двойного монитора два экрана.

3 ответа

Решение

Снимать только текущий экран не по умолчанию, и это не вариант в gnome-screenshot ни какое-либо другое приложение скриншотов, насколько я знаю.

Как и практически все, однако, это может быть заскриптовано

Пример

Скрипт ниже будет:

  • сделать скриншот
  • автоматически создавать (нумерованное) изображение в произвольном каталоге
  • автоматически обрезать изображение в той части экрана, на которой вы находитесь в данный момент (получено с позиции мыши), и создать обрезанное изображение с именем:

    cropped_<image>.png
    

Чтобы предотвратить перезапись более ранних снимков экрана, эти обрезанные изображения нумеруются как их оргиналы.

Скриншот

если я на левом экране:

если я нахожусь на правильном экране:

Сценарий

#!/usr/bin/env python3
import os
from PIL import Image
import subprocess

# ---set the name of your (automatically numbered) screenshots (no extension)
imagename = "screenshot"
# ---set the path to where you (want to) save your screenshots
savepath = "/home/jacob/Bureaublad"

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8")

n = 1 
while True:
    name = imagename+"_"+str(n)+".png"
    path = os.path.join(savepath, name)
    if os.path.exists(path):
        n += 1
    else:
        break

# make the shot
subprocess.call(["gnome-screenshot", "-f", path])
# get the width of the left screen
screenborder = [int(n) for n in [s for s in get("xrandr").split()\
                if "+0+0" in s][0].split("+")[0].split("x")]
# read the screenshot
im = Image.open(path)
width, height = im.size
# get the mouse position
mousepos = int(get(["xdotool", "getmouselocation"]).split()[0].split(":")[1])
top = 0
bottom = height

if mousepos <= screenborder[0]:
    left = 0
    right = screenborder[0]
else:
    left = screenborder[0]
    right = width
# create the image
im.crop((left, top, right, bottom)).save(os.path.join(savepath, "cropped_"+name))

Как пользоваться

  1. Скрипт нужен xdotool, чтобы получить положение мыши:

    sudo apt-get install xdotool
    

    Кроме того, не уверен, если python3-pil устанавливается по умолчанию:

    sudo apt-get install python3-pil
    
  2. Скопируйте приведенный выше скрипт в пустой файл, сохраните его как crop_screenshot.py
  3. В разделе заголовка скрипта установите желаемое имя скриншота и каталог, который вы используете для своих скриншотов:

    # ---set the name of your (automatically numbered) screenshots (no extension)
    imagename = "screenshot"
    # ---set the path to where you (want to) save your screenshots
    savepath = "/home/jacob/Bureaublad"
    
  4. Тест - запустить скрипт из терминала:

    python3 /path/to/crop_screenshot.py
    

    Результат:

  5. Если все работает нормально, добавьте его в ярлык. Выберите: "Системные настройки" > "Клавиатура" > "Ярлыки" > "Пользовательские ярлыки". Нажмите "+" и добавьте команду:

    python3 /path/to/crop_screenshot.py
    

Заметка

Сценарий, как он есть, просто разбивает изображение по ширине левого экрана. Этого достаточно, потому что ваши экраны имеют одинаковое разрешение по y и выровнены.

Однако сценарий можно очень хорошо отредактировать для работы с любым расположением экранов, с любым количеством экранов, если экраны расположены в неперекрывающемся порядке. Однако в этом случае математика немного сложнее.

Если кому-то будет интересно, добавлю позже.

Несмотря на элегантный сценарий, описанный выше, в Ubuntu 16.04 я обнаружил, что alt-print-screen, как описано в разделе: Print Screen, захватывает два пробела, а не один. На самом деле это просто печатает текущее окно. Если цель состоит в том, чтобы захватить фон, я не думаю, что это сработает.

Один из вариантов — нажать, Shift + PrtScа затем перетащить крестик из одного угла монитора в другой угол. Отпустите, и он сделает скриншот этой области.

Другие вопросы по тегам