Скриншот только активного монитора (gnome-screenshot)
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))
Как пользоваться
Скрипт нужен
xdotool
, чтобы получить положение мыши:sudo apt-get install xdotool
Кроме того, не уверен, если
python3-pil
устанавливается по умолчанию:sudo apt-get install python3-pil
- Скопируйте приведенный выше скрипт в пустой файл, сохраните его как
crop_screenshot.py
В разделе заголовка скрипта установите желаемое имя скриншота и каталог, который вы используете для своих скриншотов:
# ---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"
Тест - запустить скрипт из терминала:
python3 /path/to/crop_screenshot.py
Результат:
Если все работает нормально, добавьте его в ярлык. Выберите: "Системные настройки" > "Клавиатура" > "Ярлыки" > "Пользовательские ярлыки". Нажмите "+" и добавьте команду:
python3 /path/to/crop_screenshot.py
Заметка
Сценарий, как он есть, просто разбивает изображение по ширине левого экрана. Этого достаточно, потому что ваши экраны имеют одинаковое разрешение по y и выровнены.
Однако сценарий можно очень хорошо отредактировать для работы с любым расположением экранов, с любым количеством экранов, если экраны расположены в неперекрывающемся порядке. Однако в этом случае математика немного сложнее.
Если кому-то будет интересно, добавлю позже.
Несмотря на элегантный сценарий, описанный выше, в Ubuntu 16.04 я обнаружил, что alt-print-screen, как описано в разделе: Print Screen, захватывает два пробела, а не один. На самом деле это просто печатает текущее окно. Если цель состоит в том, чтобы захватить фон, я не думаю, что это сработает.
Один из вариантов — нажать, Shift + PrtScа затем перетащить крестик из одного угла монитора в другой угол. Отпустите, и он сделает скриншот этой области.