Capture d'écran avec wmctrl+import

7 réponses
Avatar
Pierre ESTREM
Bonjour,

Sous Debian/XFCE je tente de
capturer l'écran d'un bureau qui n'a pas le focus pour le passer Í  la
moulinette de tesseract.
Par exemple dans celui-ci j'ai une instance de firefox.

Mon script :

#!/bin/bash

# window est l'ID de la fenêtre
window="$(wmctrl -l | grep -i "firefox" | cut -f1 -d" ")"

# Capture de l'image
 import -window "$window" screenshot.png

Et j'obtiens l'erreur :

import: unable to read X window image `0x05600003': Ressource
temporairement non disponible @ error/xwindow.c/XImportImage/5000.
import: missing an image filename `screenshot.png' @
error/import.c/ImportImageCommand/1293.

O͹ est mon erreur ?

Merci
pierre estrem

7 réponses

Avatar
Bernard Schoenacker
----- Mail original -----
De: "Pierre ESTREM"
À: "ML Debian User French"
Envoyé: Mardi 12 Octobre 2021 03:52:33
Objet: Capture d'écran avec wmctrl+import
Bonjour,
Sous Debian/XFCE je tente de
capturer l'écran d'un bureau qui n'a pas le focus pour le passer Í  la
moulinette de tesseract.
Par exemple dans celui-ci j'ai une instance de firefox.
Mon script :
#!/bin/bash
# window est l'ID de la fenêtre
window="$(wmctrl -l | grep -i "firefox" | cut -f1 -d" ")"
# Capture de l'image
 import -window "$window" screenshot.png
Et j'obtiens l'erreur :
import: unable to read X window image `0x05600003': Ressource
temporairement non disponible @ error/xwindow.c/XImportImage/5000.
import: missing an image filename `screenshot.png' @
error/import.c/ImportImageCommand/1293.
O͹ est mon erreur ?
Merci
pierre estrem

Bonjour Pierre,
Pourrais-tu simplement essayer de corriger ton script du fait que tu as
2 occurrences qui se marchent dessus et je suis en train de déverminer ton
script ....
En premier je fais un essai pour trouver firefox :
wmctrl -l |grep -i -w "firefox"
j'obtiens un premier résultat convenable :
0x0480002c 4 antigen 16 exemples de commandes grep pour vous aider dans le monde réel - Mozilla Firefox
je continue de vérifier ton script :
wmctrl -l |grep -i -w "firefox" | cut -f1
j'obtiens :
0x0480002c 4 antigen Zimbra: Répondre - Mozilla Firefox
Je reprends ton script Í  la base en évitant les erreurs :
wmctrl -l |grep -i -w "firefox" |awk '{print $1}' |tail -1
et le résultat donne le PID de Firefox :
0x0480002c
Pourrais-tu essayer la commande ?
Ensuite, je t'invite Í  relire le fil de discussion concernant
tesseract et les documents PDF images qui doivent impérativement
être convertis au format Tiff et non au format png ...
window="$(wmctrl -l |grep -i -w "firefox" |awk '{print $1}' |tail -1)"
import -window "$window" screenshot.png
en tout cas maintenant, c'est opérationnel pour obtenir une image png
maintenant, il te faudra convertir l'image png au format tiff :
convert screenshot.png screenshot.tiff
pour ma part je n'aime pas du tout cette façon de faire du fait qu'il me manque
un point qui peux devenir gênant en en donnant pas un "timestamp" de la capture
dans le nom du fichier
correction :
import -window "$window" screenshot-$(date +%Y-%m-%d-%H-%M).png
convert screenshot*.png screenshot*.tiff
après il te suffira de passer Í  la moulinette via tesseract
Merci pour ton aimable attention
Bien Í  toi
Bernard
Avatar
̓‰tienne Mollier
--lk5AfXc5lUmgHvHv
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Bonjour Pierre,
Pierre ESTREM, on 2021-10-12:
Sous Debian/XFCE je tente de
capturer l'̓©cran d'un bureau qui n'a pas le focus pour le passer ̓  la
moulinette de tesseract.

[Í¢€¦]
͂ import -window "$window" screenshot.png
Et j'obtiens l'erreur :
import: unable to read X window image `0x05600003': Ressource temporairement
non disponible @ error/xwindow.c/XImportImage/5000.
import: missing an image filename `screenshot.png' @
error/import.c/ImportImageCommand/1293.
O̓¹ est mon erreur ?

C'est une limitation de "import", le programme ne prend pas en
charge la capture des fen̓ªtres qui ne sont pas rendues ̓ 
l'̓©cran. Une mani̓¨re de contourner ̓§a serait de rapatrier la
fen̓ªtre sur le bureau courant, le temps de la capture, puis de
la renvoyer ̓  son bureau d'origine, une fois que c'est fini.
Aux fautes de frappe pr̓¨s, ̓§a donnerait un script du genre͂ :
#! /bin/sh
# Identification du firefox
window="$(wmctrl -l | grep -i firefox | cut -f1 -d" ")"
orig_desktop="$(wmctrl -l | grep -i firefox | cut -f3 -d" ")"
# Bureau en cours d'utilisation
cur_desktop="$(wmctrl -d | grep ' +* DG: ' | cut -f1 -d" ")"
# Transfert du firefox sur le bureau courant
wmctrl -i -r "$window" -t "$cur_desktop"
# Capture de la fen̓ªtre du firefox
import -window "$window" screenshot.png
# Renvoi du firefox ̓  son emplacement d'origine
wmctrl -i -r "$window" -t "$orig_desktop"
# Fin
D'apr̓¨s mes tests, la fen̓ªtre du navigateur ne vole pas le focus
pendant la manœuvre, donc il ne devrait pas y avoir trop
d'interf̓©rences de ce c̓´t̓© l̓ . Le script n'est pas encore au
top niveau͂ : si le firefox est iconifi̓©, alors l'import va tout
de m̓ªme planter, mais je crois que l'option -b de wmctrl
permettrait de faire les ajustements n̓©cessaires, s'il y a
besoin de traiter ce cas de figure plus en d̓©tail.
Bonne soir̓©e, :)
--
̓‰tienne Mollier
Fingerprint: 8f91 b227 c7d6 f2b1 948c 8236 793c f67e 8f0d 11da
Sent from /dev/pts/2, please excuse my verbosity.
--lk5AfXc5lUmgHvHv
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEj5GyJ8fW8rGUjII2eTz2fo8NEdoFAmFl64UACgkQeTz2fo8N
Edr5cxAAnOOpQFIPqFVADk8VCi6Hbvi6ikEcyu98kbDoDeVQG68a0OlVrT+GMBKn
E9zjYs/+kqc14peKAzIHbmVwpb/VkXZ7TPJFNk41tZp/QfyNeNoFl+ff7H1fTlvh
7nqMKqcAdXZwKP4KMLZQqp9Jylkeav96ztUaburAQ0HlBiwqmK5iENOES3+IlM6H
2wtIwMaBLxrUwOj0x7mjRkVlaIVcIVz48oPkvvKt7zTHhI2ugeIjTLosL/aYUdcg
s2q47gtYcUtMSNaScFzatmGi7T8Q7Amjz32RpXwLpqfoxJUOefMyMr2t0J9OkfCL
9oPVK9O33wMomGZMI7jPtUTlKVIRKVzNS3Y6+gsAMDdwhldv745ojhkv6Sy72sgi
xHV7R0jf0QmfJTtCYpusxq7PgTUJLwO38ncWB8qDSdjNdrbQ4SFPFcZiqiTvjjZW
GbyLw/VFpoWuEv9sjyqM24jfR17Ca1P6u2BMP/e42PIU0NRlpiuSaHiF0WMn/Cmc
HVI1iRS1DAgKBrODTlHk0auRr0GOExusjhVEudptA+BT+NQwG9ITfYwcrhToDRKf
XcO3MKjpD5X0Fj0PQLAZr8DYHwmpm0DlrIFk34XXdsTRF43NkqyO2U9kmFTZOyXb
K1vcAeu5mCJOsNOt9Q6H3rAzVxOnPWEnAkoq8sX6yIC4s7Qn60Y=wAZc
-----END PGP SIGNATURE-----
--lk5AfXc5lUmgHvHv--
Avatar
didier gaumet
Le mardi 12 octobre 2021 Í  03:52 +0200, Pierre ESTREM a écrit :
Bonjour,
Sous Debian/XFCE je tente de
capturer l'écran d'un bureau qui n'a pas le focus pour le passer Í  la
moulinette de tesseract.
Par exemple dans celui-ci j'ai une instance de firefox.
Mon script :
#!/bin/bash
# window est l'ID de la fenêtre
window="$(wmctrl -l | grep -i "firefox" | cut -f1 -d" ")"
# Capture de l'image
  import -window "$window" screenshot.png
Et j'obtiens l'erreur :
import: unable to read X window image `0x05600003': Ressource
temporairement non disponible @ error/xwindow.c/XImportImage/5000.
import: missing an image filename `screenshot.png' @
error/import.c/ImportImageCommand/1293.
O͹ est mon erreur ?
Merci
pierre estrem

En exécutant ces mêmes commandes en interactif ça marche mais pas en
les collant dans un fichier exécutable. Ce qui m'a fait me demander si
il ne fallait pas spécifier le chemin d'accès: en spécifiant par
exemple ~/screenshot.png au lieu de screenshot.png, chez moi ça
marche...
Avatar
Pierre ESTREM
Bonjour Etienne et le monde libre,
Exact ainsi ça devrait passer.
Ca explique pourquoi "import -window root image.png" fonctionne (la
capture ne se fait que sur la fenêtre principale).
Il faut que j'adapte ton algorithme  ͠ ma sauce.
Un truc que je ne comprends pas est que "wmctrl -d" ne me renvoie qu'UN
desktop, alors que j'en attendais 4...
Merci
pierre estrem
Le 12/10/2021 Í  22:09, Étienne Mollier a écrit :
Bonjour Pierre,
Pierre ESTREM, on 2021-10-12:
Sous Debian/XFCE je tente de
capturer l'écran d'un bureau qui n'a pas le focus pour le passer Í  la
moulinette de tesseract.

[…]
 import -window "$window" screenshot.png
Et j'obtiens l'erreur :
import: unable to read X window image `0x05600003': Ressource temporairement
non disponible @ error/xwindow.c/XImportImage/5000.
import: missing an image filename `screenshot.png' @
error/import.c/ImportImageCommand/1293.
O͹ est mon erreur ?

C'est une limitation de "import", le programme ne prend pas en
charge la capture des fenêtres qui ne sont pas rendues Í 
l'écran. Une manière de contourner ça serait de rapatrier la
fenêtre sur le bureau courant, le temps de la capture, puis de
la renvoyer Í  son bureau d'origine, une fois que c'est fini.
Aux fautes de frappe près, ça donnerait un script du genre :
#! /bin/sh
# Identification du firefox
window="$(wmctrl -l | grep -i firefox | cut -f1 -d" ")"
orig_desktop="$(wmctrl -l | grep -i firefox | cut -f3 -d" ")"
# Bureau en cours d'utilisation
cur_desktop="$(wmctrl -d | grep ' +* DG: ' | cut -f1 -d" ")"
# Transfert du firefox sur le bureau courant
wmctrl -i -r "$window" -t "$cur_desktop"
# Capture de la fenêtre du firefox
import -window "$window" screenshot.png
# Renvoi du firefox Í  son emplacement d'origine
wmctrl -i -r "$window" -t "$orig_desktop"
# Fin
D'après mes tests, la fenêtre du navigateur ne vole pas le focus
pendant la manœuvre, donc il ne devrait pas y avoir trop
d'interférences de ce cÍ´té lÍ . Le script n'est pas encore au
top niveau : si le firefox est iconifié, alors l'import va tout
de même planter, mais je crois que l'option -b de wmctrl
permettrait de faire les ajustements nécessaires, s'il y a
besoin de traiter ce cas de figure plus en détail.
Bonne soirée, :)
Avatar
̓‰tienne Mollier
--fPXTUT158Y8xSPAU
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Bonjour Pierre,
Pierre ESTREM, on 2021-10-13:
Un truc que je ne comprends pas est que "wmctrl -d" ne me renvoie qu'UN
desktop, alors que j'en attendais 4...

Bizarre, avec la configuration par d̓©faut de xfce4 de Debian 11,
j'ai bien quatre espaces de travail de mon c̓´t̓©Í‚ :
$ wmctrl -d | wc -l
4
Peut-̓ªtre que la configuration par d̓©faut a ̓©t̓© retouch̓©e͂ ?
Peut-̓ªtre que le mode verbeux en dira plus sur la configuration
des bureaux͂ :
$ wmctrl -v -d
Bonne soir̓©e,
--
̓‰tienne Mollier
Fingerprint: 8f91 b227 c7d6 f2b1 948c 8236 793c f67e 8f0d 11da
Sent from /dev/pts/4, please excuse my verbosity.
--fPXTUT158Y8xSPAU
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEj5GyJ8fW8rGUjII2eTz2fo8NEdoFAmFnIogACgkQeTz2fo8N
Edp1+g/+LWzouAe5cyvMiy2kPhspfMoOasQ6KYPHfnKdvm5YPxRDdJWcvA8eTWjN
odxA3UfxoUF9qFhxLxjeAZkt2NLahnhUd4NpDfonbo5rg9kPioD4DaoOiGE4hQUb
ofy7AoGCQCKRCDHzHGdM0QmCfA44H5icC3aOpeAa5mssWscl1QAVDVOfVaCL6zb+
KrMhOBaY0Y34OiwkIr8jPi9suWqEntxj0lsSDF/KVna2tec8IEdBb5ggbF1TKbs/
2yUsGygdo7zsh4zB80R2LEfZwK1QlJcUyxPcYOfgoLiyFXHXeeLb+cIDW5uDvNjf
WXqCpCYupVasq6P+c8FQMd7ANUwJOCaFhJxrFvS53ti6AoyhUAKwfceGNN2KNiA3
ZicPOyLdU64XdsBFKuOll2OYx44KmdDQgErQrcuDPOd4D5QnHyKsXTOC9DM2attK
qZ8cn8pXnG+OyK/NyjSzRAeB9eTMkSiD24leGSU4iRsJOhrROISLNY486d0lN9aK
xU91Y6/4SpUYUTYKO2yshvDzVObnV6h2Jjzgi8v9PdS0VNQ1/blIMoZr0vv0koGc
YCuAoviWXgFzq3ZbSeaQeuKZ5XcA49BX6uE3Ebnh4c2WtYAHddykMqTjGVpOTj9h
8bbzk3QnSquzCqePd86wJMWfwQWiNTbbmwCNwuNVOROfmiGQxrs=qft6
-----END PGP SIGNATURE-----
--fPXTUT158Y8xSPAU--
Avatar
Pierre ESTREM
Bonsoir Etienne et le monde libre,
'wmctrl -d -v" me renvoie :
envir_utf8: 1
WM provides _NET_DESKTOP_GEOMETRY value common for all desktops.
WM provides _NET_DESKTOP_VIEWPORT value only for the current desktop.
WM provides _NET_WORKAREA value only for the current desktop.
Total number of desktops: 1
Current desktop ID (counted from zero): 0
0  * DG: 7680x1080  VP: 3840,0  WA: 0,35 1920x1008  Espace de travail 1
Ca fait 1 (un) bureau/desktop ?
Pourtant je passe de l'un Í  l'autre normalement sauf dans certains cas
o͹ je n'en ai plus qu'un et alors c'est la catastrophe...
Si quelqu'un a cela parfois expliquez-moi svp (alors un ALT+F4 n'a
aucune action mais renvoie ";3s").
pierre estrem
Le 13/10/2021 Í  20:16, Étienne Mollier a écrit :
Bonjour Pierre,
Pierre ESTREM, on 2021-10-13:
Un truc que je ne comprends pas est que "wmctrl -d" ne me renvoie qu'UN
desktop, alors que j'en attendais 4...

Bizarre, avec la configuration par défaut de xfce4 de Debian 11,
j'ai bien quatre espaces de travail de mon cÍ´té :
$ wmctrl -d | wc -l
4
Peut-être que la configuration par défaut a été retouchée ?
Peut-être que le mode verbeux en dira plus sur la configuration
des bureaux :
$ wmctrl -v -d
Bonne soirée,
Avatar
̓‰tienne Mollier
--FtNKVzAFDMCoCeik
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Bonsoir Pierre,
Pierre ESTREM, on 2021-10-13:
'wmctrl -d -v" me renvoie :
envir_utf8: 1
WM provides _NET_DESKTOP_GEOMETRY value common for all desktops.
WM provides _NET_DESKTOP_VIEWPORT value only for the current desktop.
WM provides _NET_WORKAREA value only for the current desktop.
Total number of desktops: 1
Current desktop ID (counted from zero): 0
0͂  * DG: 7680x1080͂  VP: 3840,0͂  WA: 0,35 1920x1008͂  Espace de travail 1
Ca fait 1 (un) bureau/desktop ?

Les bureaux ont l'air d'̓ªtre bien pr̓©sents sous une forme
diff̓©rente de ce ̓  quoi je m'attendais͂ : wmctrl rapporte une
largeur de bureau de 7680 pixels, ce qui correspond exactement ̓ 
quatre fois la largeur de l'espace de travail de 1920 pixels.
Je n'ai pas la moindre id̓©e de ce qui peut provoquer ce
comportement pour le moment, et je n'arrive pas ̓  le reproduire.
Potentiellement, dans ce genre de situation, les fen̓ªtres
pourraient ̓ªtre stock̓©es ̓  des coordonn̓©es en dehors de la zone
d'affichage, mais c'est juste une conjecture.
Pourtant je passe de l'un ̓  l'autre normalement sauf dans certains cas o̓¹ je
n'en ai plus qu'un et alors c'est la catastrophe...
Si quelqu'un a cela parfois expliquez-moi svp (alors un ALT+F4 n'a aucune
action mais renvoie ";3s").

Par d̓©faut, le raccourci Alt+Suppr supprime un espace de
travail, et Alt+Inser permet d'en reconstruire un, mais il ne
remet pas les fen̓ªtres ̓  leur place apr̓¨s qu'elles aient ̓©t̓©
boug̓©es par inadvertance. Il m'est d̓©j̓  arriv̓© de me prendre
les pieds dans le tapis avec ce raccourci.
Bonne soir̓©e,
--
̓‰tienne Mollier
Fingerprint: 8f91 b227 c7d6 f2b1 948c 8236 793c f67e 8f0d 11da
Sent from /dev/pts/1, please excuse my verbosity.
--FtNKVzAFDMCoCeik
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEj5GyJ8fW8rGUjII2eTz2fo8NEdoFAmFnUi0ACgkQeTz2fo8N
Edrpwg//SS+ieYQgnDHlu+PKrD0UAR4pEZsJ6vnqKxGt+LY/VtDAVZ4/xwXQrOyn
t7JIAtMwaH8grzRJCOb67Rc0XzNA4rPn19Dlyvw+Asttkg6zWtq7rnEOAbdTIkk1
hYP0tXolvH1IkM5PFbZmypt7s7rj1EHMmlCYDs6+eyOYFj4hx1KPfU7bhsaFlqlT
098BkwHRy3krPoxMEho5L/cIor2jqQq1RZlJHqsNTInrMJ+li7ohnRgraDjbMNp0
coPzXXQA4DWtaATKz2z7grVOmQU5BspPYSl5/iJ4P/JNO8VDMePrBmjKnecxcRpb
OPkVKVyYNx/VH+ENTp9UybP9o61F5B5HB7OrCpqC18tHsiBhTed6DwD88lfogi7Z
E1+O/W7wV/3M8ziySKC7w2dAI9uMNniSiRVKr1K/2czC4zDfK7Hfa5kfocxY7FpP
K1fXHiCETSveITs4NqYstlOkIguFrUmdaJlvCWTJka6nblWYj29/61wh+Uj5rUKb
0UERieXTf83+G3s+gLTPKJq3+bN2Wg+kvOlVdl9+BClaN0n3ZSyu5eKSulgbLle7
OeMqwRwdyvBrN5F2LM2Ya0JhTnSU6tA7I1EZzuj7JaIHXabCtqoyUmRpBuIQhFE9
rt53ZA3xiLCr44CYuZh5nCyQdKCB/RCL1vkqkkvdvkEJnNBtLYc=DKiZ
-----END PGP SIGNATURE-----
--FtNKVzAFDMCoCeik--