Capture d'écran de X de tty

15

En utilisant Xvfb, je peux lancer une application et faire une capture d'écran.

Ce que je me demande, c'est comment capturer à partir d'une session X existante (dormante).

Dites de tty ou sur ssh.

D'après ce que je comprends, les fenêtres ne sont pas mappées et n'existent pas pour préserver les ressources. Existe-t-il un outil qui peut mapper les fenêtres existantes, les espaces de travail, etc. dans un gestionnaire de fenêtres virtuel et prendre une photo?

Ou peut-on peut-être utiliser libx11et créer un composant logiciel enfichable en utilisant XShmCreateImageou similaire?

Runium
la source
2
Est xwd -root | convert - /tmp/image.jpgce que vous cherchez?
jippie
3
@jippie: Peut-être. Le problème est que, comme les fenêtres ne sont pas mappées, il n'y a rien pour xwd à vider - résultant en une image noire. (Essayez cette commande depuis ie tty1 xwd -display :0 -root | convert xwd:- /tmp/0.png)
Runium
vous ne savez pas ce que vous entendez par «non cartographié»
jippie
4
@jippie: Ils ne résident pas en mémoire. Si je comprends bien: lorsque vous êtes sur votre espace de travail - il est actif - les pixels sont mappés en mémoire pour que le GPU les traite et les rende à l'écran. Lorsque l'espace de travail est changé ou quitté (c'est-à-dire par Ctrl-Alt-F1), ces cartes ne sont pas mappées (pour libérer des ressources) - il n'y a donc rien dans le "tampon d'affichage" - et donne une image noire.
Runium
Je vois ce que tu veux dire, merci pour l'explication. Je ne connais pas la réponse dans ce cas cependant.
jippie

Réponses:

7

Nous pouvons "allumer" le X tty manuellement depuis la ligne de commande, sans ctrl-alt-F (x).

Si X est sur tty 7 et que vous vous connectez à un terminal texte

chvt 7 ; DISPLAY=0.0 xwd -root > screendump.xwd ; chvt 1

Cependant, xhost + localhost doit être émis dans la session xs, sinon xwd ne peut pas se connecter au serveur x.

Cela vous permet de le faire à partir de la session ssh.

PS: En théorie, avec MTD , il devrait être possible de faire une capture d'écran à partir de la mémoire de la carte vidéo. Ainsi sans d'abord "réveiller" la session X.

John Siu
la source
Merci pour un bon post. J'y regarde. Un de mes problèmes majeurs est que je suis un vieux windowser et que j'ai du mal à comprendre comment tout est tricoté ensemble. Serveur X, gestionnaire de fenêtres X, accès et composition. Mais pour y arriver.
Runium
@Sukminder Avez-vous des difficultés à configurer cela ou avez-vous besoin de plus d'instructions à ce sujet?
John Siu