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

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

enter image description here

То есть не места на одном экране, а система с двумя мониторами на двух экранах.

4
задан 28 May 2016 в 11:03

2 ответа

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

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

Пример

Сценарий далее ниже желания:

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

    cropped_<image>.png
    

Для предотвращения перезаписи более ранние снимки экрана эти кадрированные изображения пронумерованы как их oroginals.

снимок экрана

enter image description here

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

enter image description here

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

enter image description here

Сценарий

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

    Результат:

    enter image description here

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

    python3 /path/to/crop_screenshot.py
    

Примечание:

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

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

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

3
ответ дан 28 May 2016 в 21:03

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

1
ответ дан 1 December 2019 в 09:46

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

Похожие вопросы: