Сценарій, використовуючи затвор
Я не думаю, що вона існує, але як і все, це можна зробити.
Якщо ви зробите скрипт нижче доступним у комбінації клавіш (пояснення далі нижче), з'явиться вікно, що дозволяє встановити поля вашого екрана зліва, справа, вгорі та внизу , розділені пробілом:
результат:
або:
результат:
тощо.
Я встановив за замовчуванням 30 px, але ви можете встановити будь-яке значення за замовчуванням (див. Нижче).
Як користуватись
Сценарій використовує Shutter
і wmctrl
. Якщо припустимо Shutter
, що у вашій системі вже є (оскільки ви це згадали), встановіть wmctrl
:
sudo apt-get install wmctrl
Примітка: Якщо ви використовуєте Kubuntu , Zenity
він не встановлений за замовчуванням:
sudo apt-get install zenity
Скопіюйте сценарій нижче в порожній файл. Якщо ви хочете, ви можете змінити мардж "за замовчуванням" у рядку сценарію:
`arg =`
збережіть як custom_screenshot.py
.
Додайте скрипт до комбінації комбінацій клавіш: виберіть: Налаштування системи> "Клавіатура"> "Ярлики"> "Спеціальні ярлики". Клацніть "+" і додайте команду:
python3 /path/to/custom_screenshot.py
Примітка
Сценарій використовує wmctrl
для визначення положення вікна. Однак у різних менеджерів вікон висновок wmctrl -lG
команди показує невеликі відмінності у y-положенні вікна. Ці відмінності усуваються значенням, заданим у рядку deviation=
-line сценарію. Поточне значення (0) підходить для Unity та KDE.
Сценарій також перевірений, він працює добре Xfce
і Gnome
, але значення потрібно змінити, як це пояснено в головному розділі сценарію.
Сценарій
#!/usr/bin/env python3
import subprocess
import time
"""
On different window managers, the window geometry as output of wmctrl differs slightly.
The "deviation" should compensate these differences. Most likely appropriate (tested) settings:
Unity: 0, Gnome: -36, Xfce (Xubuntu): -26, KDE (Kubuntu): 0
"""
#---
deviation = 0
#---
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
try:
arg = get('zenity --entry --entry-text "30 30 30 30" --text "border left, right, top, bottom" --title "Screenshot margins"').strip().split()
except:
pass
else:
time.sleep(0.5)
# frontmost window pos
frontmost = [l.split()[4] for l in get("xprop -root").splitlines() if "ACTIVE_WINDOW(WINDOW)" in l][0].replace(",", "")
frontmost = frontmost[:2]+"0"+frontmost[2:]
f_data = [l.split() for l in get("wmctrl -lG").splitlines() if frontmost in l][0][2:6]
# extent
xt_data = get("xprop -id "+frontmost).split()
xt_i = xt_data.index("_NET_FRAME_EXTENTS(CARDINAL)")
xt = [int(n.replace(",", "")) for n in xt_data[xt_i+2:xt_i+6]]
# set data for screenshot command
x = str(int(f_data[0])-int(arg[0])-xt[0])
y = str(int(f_data[1])-int(arg[2])-xt[2]+deviation)
w = str(int(f_data[2])+int(arg[0])+int(arg[1])+xt[0]+xt[1])
h = str(int(f_data[3])+int(arg[3])+int(arg[2])+xt[2]+xt[3])
command = "shutter -s="+(",").join([x,y,w,h])+" -e"
subprocess.call(["/bin/bash", "-c", command])