Skript mit Shutter
Ich glaube nicht, dass es existiert, aber wie alles andere kann es gemacht werden.
Wenn Sie das unten stehende Skript unter einer Tastenkombination verfügbar machen (Erklärung weiter unten), öffnet sich ein Fenster, in dem Sie die Ränder Ihres Screenshots links, rechts, oben und unten durch ein Leerzeichen voneinander trennen können:
Ergebnis:
oder:
Ergebnis:
etc.
Ich habe den Standardwert auf 30 px festgelegt, aber Sie können einen beliebigen Standardwert festlegen (siehe unten).
Wie benutzt man
Das Skript verwendet Shutter
und wmctrl
. Angenommen, Shutter
auf Ihrem System ist bereits Folgendes installiert (seitdem Sie es erwähnt haben) wmctrl
:
sudo apt-get install wmctrl
NB Wenn Sie Kubuntu verwenden , Zenity
ist standardmäßig nicht installiert:
sudo apt-get install zenity
Kopieren Sie das folgende Skript in eine leere Datei. Wenn Sie möchten, können Sie den "Standard" Rand in der Zeile des Skripts ändern:
`arg =`
Speichern Sie es als custom_screenshot.py
.
Fügen Sie das Skript einer Tastenkombination hinzu: Wählen Sie: Systemeinstellungen> "Tastatur"> "Verknüpfungen"> "Benutzerdefinierte Verknüpfungen". Klicken Sie auf das "+" und fügen Sie den Befehl hinzu:
python3 /path/to/custom_screenshot.py
Hinweis
Das Skript wmctrl
bestimmt die Position des Fensters. Bei verschiedenen Fenstermanagern wmctrl -lG
zeigt die Ausgabe des Befehls jedoch kleine Unterschiede in der y-Position des Fensters. Diese Unterschiede werden durch den Wert beseitigt, der in der deviation=
-Zeile des Skripts festgelegt ist. Der aktuell eingestellte Wert (0) ist für Unity und KDE geeignet.
Das Skript wird ebenfalls getestet und funktioniert einwandfrei mit Xfce
und Gnome
, aber der Wert muss dann geändert werden, wie im Abschnitt head des Skripts erläutert.
Das Drehbuch
#!/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])