Script, à l'aide de Shutter
Je ne pense pas que cela existe, mais comme tout, cela peut être fait.
Si vous rendez le script ci-dessous disponible sous une combinaison de touches (explication plus loin ci-dessous), une fenêtre apparaîtra, vous permettant de définir les marges de votre capture d'écran à gauche, à droite, en haut et en bas , séparées par un espace:
résultat:
ou:
résultat:
etc.
J'ai défini la valeur par défaut à 30 px, mais vous pouvez définir n'importe quelle valeur par défaut (voir ci-dessous).
Comment utiliser
Le script utilise Shutter
et wmctrl
. En supposant qu'il Shutter
est déjà sur votre système (puisque vous l'avez mentionné), installez wmctrl
:
sudo apt-get install wmctrl
NB Si vous utilisez Kubuntu , Zenity
n'est pas installé par défaut:
sudo apt-get install zenity
Copiez le script ci-dessous dans un fichier vide. Si vous le souhaitez, vous pouvez modifier la marge "par défaut" dans la ligne du script:
`arg =`
enregistrez-le sous custom_screenshot.py
.
Ajoutez le script à une combinaison de raccourcis clavier: choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:
python3 /path/to/custom_screenshot.py
Remarque
Le script utilise wmctrl
pour déterminer la position de la fenêtre. Sur différents gestionnaires de fenêtres cependant, la sortie de la wmctrl -lG
commande montre de petites différences dans la position y de la fenêtre. Ces différences sont éliminées par la valeur fixée dans ledeviation=
ligne du script. La valeur actuellement définie (0) est appropriée pour Unity et KDE.
Le script est également testé et fonctionne très bien sur Xfce
etGnome
, mais la valeur doit être modifiée ensuite, comme expliqué dans la section head du script.
Le script
#!/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])