LinuxPedia

Wiki libre et indépendant dédié à GNU-Linux et BSD.

Outils pour utilisateurs

Outils du site


commande:fbgrab

fbgrab : copie d'écran en console

Le programme “fbgrab” permet d'effectuer des captures d'écran en console, en utilisant pour cela les possibilité du “framebuffer” (mémoire tampon video). C'est très pratique pour réaliser un tutoriel sur un programme qui ne s'utilise que en console et en dehors de toute session graphique, pour réaliser des captures lors de session de récupération sur un système où le serveur graphique est absent/cassé, etc… .

<note>Un signe $ précède les commandes qui ne nécessitent pas de droits administrateur ; un signe # précède celles qui nécessitent des droits administrateur (ces signes ne font <color red>PAS</color> partie des commandes). Les lignes qui ne commencent pas par un signe $ ou # correspondent au résultat de la commande précédente.
Les touches utilisées sont indiquées entre crochets, exemple [ctrl] pour la touche “contrôle”</note>

"Framebuffer" ?

Pour que “fbgrab” puisse fonctionner il faut que vous utilisiez le “framebuffer”, ou mémoire tampon video, tout le nécessaire (modules noyaux) devrait être en place si vous utilisez le noyau par défaut de votre distribution, en place mais pas nécessairement activé.

<note>Utiliser la mémoire tampon vidéo ou “framebuffer” peut ralentir légèrement le démarrage, mais plus ennuyeux cela peut entraîner des problèmes d'affichage avec certains pilotes de cartes graphiques, en particulier le pilote propriétaire “fglrx” pour cartes AMD/ATI, lors du changement de console virtuelle.</note>

Si vous compilez vous-même votre noyau, vérifiez que vous ayez bien activé au minimum l'option de “framebuffer” générique :

$ grep CONFIG_FB= /boot/config-$(uname -r)

Si vous avez comme réponse “CONFIG_FB=y” c'est bien partie, sinon retour à la case configure et compil du noyau, rubrique “device driver > graphic support”.


Pour que le “framebuffer” soit activé il faut généralement passer une option au noyau, celle-ci est de la forme “vga=” suivi d'un code correspondant à un couple résolution/nombre de couleurs. Un moyen simple de déterminer les résolutions supportées par votre matériel est d'utiliser le programme “hwinfo” (à installer si nécessaire) :

# hwinfo --framebuffer
[...]                   
Mode 0x0300: 640x400 (+640), 8 bits                           
Mode 0x0301: 640x480 (+640), 8 bits                           
Mode 0x0303: 800x600 (+800), 8 bits                           
Mode 0x0305: 1024x768 (+1024), 8 bits                         
Mode 0x0307: 1280x1024 (+1280), 8 bits                                               
Mode 0x0311: 640x480 (+1280), 16 bits                         
Mode 0x0312: 640x480 (+2560), 24 bits                         
Mode 0x0314: 800x600 (+1600), 16 bits                         
Mode 0x0315: 800x600 (+3200), 24 bits                         
Mode 0x0317: 1024x768 (+2048), 16 bits                        
Mode 0x0318: 1024x768 (+4096), 24 bits
Mode 0x031a: 1280x1024 (+2560), 16 bits
Mode 0x031b: 1280x1024 (+5120), 24 bits
Mode 0x033d: 640x400 (+1280), 16 bits
Mode 0x033e: 640x400 (+2560), 24 bits
Mode 0x0345: 1600x1200 (+1600), 8 bits
Mode 0x0346: 1600x1200 (+3200), 16 bits
Mode 0x0347: 1400x1050 (+1400), 8 bits
Mode 0x0348: 1400x1050 (+2800), 16 bits
Mode 0x0349: 1400x1050 (+5600), 24 bits
Mode 0x034a: 1600x1200 (+6400), 24 bits
Mode 0x0352: 2048x1536 (+8192), 24 bits
Mode 0x0360: 1280x800 (+1280), 8 bits
Mode 0x0361: 1280x800 (+5120), 24 bits
Mode 0x0362: 768x480 (+768), 8 bits
Mode 0x0364: 1440x900 (+1440), 8 bits
Mode 0x0365: 1440x900 (+5760), 24 bits  <<< exemple choisit ci-dessous
Mode 0x0368: 1680x1050 (+1680), 8 bits
Mode 0x0369: 1680x1050 (+6720), 24 bits
Mode 0x037c: 1920x1200 (+1920), 8 bits
Mode 0x037d: 1920x1200 (+7680), 24 bits

Le listing a été débarrassé des valeurs les plus faibles pour le raccourcir. La valeur qui nous intéresse est la notation hexadécimale qui correspond à la résolution désirée, par exemple ici pour utiliser une résolution de 1440×900 avec des couleurs codées sur 24 bits on utilisera “vga=0x0365”.
La résolution peut également être notée sous forme d'entiers, par exemple “vga=799” pour une résolution de 1280×1024 avec des couleurs codées sur 24bits. En demandant à votre moteur de recherche préféré vous trouverez sur Internet des listes de ce type de notation.

Avec les dernières versions du noyau Linux a commencé à apparaître un avertissement concernant l'option “vga=”, celle-ci sera bientôt abandonnée au profit de “gfxpayload=”. C'est une bonne chose car la nouvelle option permet d'indiquer simplement un résolution avec par exemple :

gfxpayload=1440x900x24

C'est plus parlant que les codes ésotériques de “vga=”.

Où mettre cette option ? Ça dépend de votre chargeur d'amorçage, mais en règle générale elle doit figurer sur la ligne de chargement du noyau.
Pour grub "legacy" vous pouvez éditer directement le fichier /boot/grub/menu.lst et ajouter “vga=” ou “gfxpayload=” parmi les options de la ligne “kernel”.
Pour grub2 vous pouvez ajouter “vga=” dans /etc/default/grub, dans la variable GRUB_CMDLINE_LINUX_DEFAULT= . Pour “gfxpayload” la situation est plus mitigée, pour le moment grub2 ne supporte pas cette variable dans /etc/default/grub, on peut cependant l'ajouter à /etc/grub.d/00_header dans le passage suivant :

set gfxmode=${GRUB_GFXMODE}                                               
  insmod gfxterm                                                            
  insmod ${GRUB_VIDEO_BACKEND}                                              
  set gfxpayload=keep    <<<<<<<<< ajoutez l'option ici

Si vous utilisez déjà une résolution personnalisée pour grub2 (variable GRUB_GFXMODE=) vous pouvez mettre comme dans l'exemple “set gfxpayload=keep”, sinon indiquez la valeur souhaitée à la place de “keep”.

Après ces modifications n'oubliez pas mettre à jour votre chargeur d'amorçage en exécutant “update-grub” ou “grub-mkconfig”.

Si le “framebuffer” est correctement activé vous constaterez que la résolution de vos consoles virtuelles sera similaire à celle de votre écran, si vous avez de gros caractères pixellisés c'est raté, inutile d'aller plus loin… Reprenez la mise en place du “framebuffer”.

Utiliser "fbgrab"

Une fois installé à l'aide de votre gestionnaire de paquets favori, “fbgrab” est très simple à utiliser. Connectez vous dans quelques consoles virtuelles de votre système, pour rappel celles-ci s'activent avec le raccourci [ctrl][alt][F1-6] (touches “contrôle”, “alt” et touches de fonction de 1 à 6), la console “7” étant dédiées au serveur graphique [ctrl[alt[F7] vous ramènera à votre environnement graphique).

Pour effectuer votre première capture avec “fbgrab”, tapez simplement :

$ fbgrab fbgrab1.png

Vous venez de créer une image “fbgrab1.png” dans le répertoire courant, qui est une image de la commande que vous venez de taper, ressemblant à celle-ci :


Jusque là rien de bien impressionnant, “fbgrab” devient réellement pratique pour capturer une image d'une autre console virtuelle, par exemple si vous êtes connecté dans la seconde console ([ctrl][alt][F2]), et que vous ayez lancé une application dans la première console, utilisez :

# fbgrab -c 1 capture.png

Ici l'image “capture.png” sera celle de la console n°1, vous l'avez désigné avec l'option “-c 1” de “fbgrab”. Notez que vous aurez sans doute besoin des droits “root” (ou de “sudo”) pour utiliser fbgrab de cette manière.

L'option “-c” suivie du numéro de la console prend une capture immédiate, si vous voulez une capture différée vous pouvez ajouter l'option “-s” suivie d'une durée en secondes. “fbgrab” ne verrouille pas les consoles ce qui permet de retourner sur le programme dont on veut capturer l'image pour y effectuer une opération.

Pour capturer la console numéro 2 depuis n'importe quelle autre, après un délai de 20 secondes, faites :

# fbgrab -c 2 -s 20 capture.png

Les deux images suivantes ont été prises avec cette méthode :

Navigateur Internet “elinks” en action :


Son ancêtre “lynx” sur la même page :


Limitations de "fbgrab"

“fbgrab” ne permet pas d'afficher les images créées, ça serait pourtant bien pratique et la page de manuel suggère que l'auteur du programme le pense également… Peut-être un jour ?

Il vaut mieux éviter d'essayer de capturer la console où tourne le serveur graphique avec “fbgrab”, il y a d'autres outils pour ça et vous risquez d'aboutir à des résultats surprenants, allant du simple écran noir à la corruption irrémédiable de l'affichage nécessitant le redémarrage du serveur graphique. Ceci est particulièrement vrai avec des pilotes propriétaires de carte vidéo. Par contre aucun problème à utiliser “fbgrab” depuis une console en environnement graphique, pour capturer une console virtuelle.

“fbgrab” ne peut pas capturer certaines images affichées de manière complexe par des programmes en console, comme le navigateur Internet “w3m”. Un exemple avec la page d'accueil de votre wiki préféré :

Ce que “fbgrab” a capturé :

Ce que “w3m” affichait réellement :

C'est bien plus joli au naturel ! ;-)

Amusez-vous bien avec “fbgrab”.

Liens

commande/fbgrab.txt · Dernière modification: 2018/11/17 13:52 (modification externe)