Fedora-Fr - Communauté francophone Fedora - Linux

Planet de Fedora-Fr : la communauté francophone autour de la distribution Linux Fedora

A propos

Cette page est actualisée toutes les heures.

Cette page est une sélection de blogs autour de Fedora. Fedora-Fr.org décline toute responsabilité au sujet des propos tenus par les auteurs des blogs de ce planet. Leurs propos sont leur entière responsabilité.

Le contenu de ce planet appartient à leurs auteurs respectifs. Merci de consulter leur blogs pour obtenir les licences respectives.

Mot-clefs : image

Typescript to gif - convertir une capture terminal vers un gif animé

Patrice Ferlet

Comment utiliser la commande "script" et un peu de bash + imagemagick pour en faire une animation en GIF (ou pourquoi pas une vidéo par la suite)

Cette semaine, un administrateur système m'a montré une commande que je ne connaissais pas du tout... "script". Ce petit utilitaire permet d'enregistrer le flux terminal vers un fichier afin d'être relu. En grattant dans le "man" j'ai découvert deux options intéressantes, l'une d'elle permet de garder les "temps" de commande + le nombre de caractères à lire... On peut alors utiliser "scriptreplay" pour relire la session ou bien, comme moi, jouer avec et créer une animation

Prenons le temps de comprendre. Si je tape la commande:

script --timing=/tmp/timing /tmp/script

alors commence une session enregistrée dans le fichier /tmp/script.

Tapons alors des commandes, par exemple

echo "hello world"

Puis pressez CTRL+D. La session "script" s'arrête. Vous pouvez rejouer la session (qui ne va pas rejouer les commandes, mais les afficher avec les résultats de l'époque...) en utilisant "cat"

cat /tmp/script

Or... on a besoin de voir "à la replay" la commande. Soit:

scriptreplay -t /tmp/timing /tmp/script

Et là, c'est déjà plus joli. Mais voilà, pour partager une capture de ce genre en vidéo (ou en gif animé) ce format ne nous convient pas encore. On va donc réfléchir recréer une belle vidéo de tout ce beau monde.

Première option, on fait un screencast (avec ffmpeg) mais bon... la souris peut apparaître... et puis pour en faire un gif c'est pas encore ça.

Seconde option, celle qu'on va mettre en place, est de faire ceci: - relire le fichier /tmp/timing - prendre séquence par séquence le texte depuis le typescript (fichier généré par la commande script) - afficher ça dans le terminal et faire une capture du terminal avec la commande "import" - relire une fois de plus le timing et cette fois ci: lire les temps d'attente - utiliser "convert" avec l'option -delay pour mettre frame à frame les images dans le gif animé.

Voilà... bon je vais pas passer par 4 chemins, le but n'est pas de vous apprendre à faire du bash mais au moins vous parler des "soucis" que j'ai dut régler: - lire un fichier d'un certain endroit à un autre: on utilise "dd" - créer des images numérotées avec 5 chiffres pour être à l'aise: printf

Le reste coule presque de source... Voilà le script:

#!/bin/bash

TIMING=$1
SCRIPT=$2
W=$WINDOWID

rm -rf /tmp/script-replay-gifs/
mkdir /tmp/script-replay-gifs/

t=$(mktemp)
cp $SCRIPT $t

#remove first line
sed -i '1d' $t

#clear screen
clear

#read timing file one by one
curr=0
i=0
while read line
do
    #capture time and chars to read
    cols=($line)
    chars=${cols[1]}
   
    #read from current char the number of chars to read
    dd if=$t bs=1 skip=$curr count=$chars 2>/dev/null

    #convert to gif frame with a nice frame-number
    n=$(printf "%010d" $i)
    import -winow $WINDOWID /tmp/script-replay-gifs/$n.gif

    #and move to next position
    curr=$((curr+chars))
    i=$((i+1))
done <$TIMING
rm -f $t

#now, set gif with delay per frame
i=1
while read line
do
    cols=($line)
    timing=${cols[0]}
    #get next image
    file=$(ls -1 /tmp/script-replay-gifs/ | head -n $i | tail -n 1)
    timing=$(echo "$timing*100" | bc -l | awk '{print int($0)}')
    command=$command" -delay $timing /tmp/script-replay-gifs/$file"

    i=$((i+1))
done < $TIMING

convert $command /tmp/anim-notoptim.gif
convert /tmp/anim-notoptim.gif -coalesce -layers Optimize /tmp/anim.gif

rm -f /tmp/anim-notoptim.gif
rm -rf  /tmp/script-replay-gifs/

Ce script est très très lent à cause de "import" qui prend près d'une seconde par capture... de ce fait pour le moment c'est pas un modèle du genre... et en plus, vous ne pouvez pas quitter le bureau dans lequel vous être pour créer l'animation sous peine de messages d'erreur. Notez que ce n'est un qu'un petit test

Cela donne: Animation terminal

Pour le coup, j'ai quand même posé un petit coup de "gimp" pour optimiser le gif animé. Je vous laisse maître de me faire des remarques et pourquoi pas (si vous le demandez) je créerai un dépôt git quelque part pour qu'on le fasse évoluer.

Update: j'ai ajouté une opération d'optimisation de taille à la fin du script

Quelques astuces pour Fluxbox - part. II

Mehdi Bahri

Bonjour !

Dans ce deuxième article, nous allons voir comment obtenir certaines fonctionnalités apportées par des environnements de bureau complets tels que Gnome et KDE, à savoir :

  • Une gestion aisée du son et des touches de volume fonctionnelles
  • Un économiseur d'écran avec verrouillage de la session
  • Des captures d'écran faciles à faire avec raccourcis clavier

Ainsi que les solutions à quelques soucis mineurs que vous pourriez rencontrer.

Gestion du son

Il est commode de touches de volume fonctionnelles ainsi que de raccourcis claviers vers Alsamixer.

Raccourcis clavier

Vous aurez besoin ici de xev. Lancez le et relevez les codes des touches mute, volume + et volume -. Ensuite, adaptez les raccourcis à votre convenance :

# Son

Mod1 s :Exec roxterm -n Alsamixer -e alsamixer
121 :Exec amixer set "Master" toggle
122 :Exec amixer set "Master" 5%-
123 :Exec amixer set "Master" 5%+

Explications: on utilise le mixer alsa en ligne de commande. La première ligne permet de faire fonctionner la touche mute, les suivantes permettent d'augmenter/diminuer le volume du canal Master de 5% à chaque pression sur la touche.

Mod1 s :Exec roxterm -n Alsamixer -e alsamixer

Ceci permet de lancer Alsamixer dans un terminal tout en nommant la fenêtre afin de la rendre plus facilement reconnaissable dans le panel.

J'ai également ajouté un lien vers Alsamixer au menu principal de Fluxbox :

[exec] (Terminal) {roxterm}
[exec] (Gestionnaire de fichiers) {pcmanfm}
[exec] (Alsamixer) {roxterm -n Alsamixer -e alsamixer}

Applet Gnome

Pour achever le tout, j'ai choisi de lancer au démarrage de ma session l'applet Gnome de gestion du son :

gnome-sound-applet &

Captures d'écran

On utilise l'outil import de ImageMagick. On recrée ici le comportement par défaut sur la majorité des environnements de bureau : Impr seul capture l'écran entier tandis que Alt + Impr ne capture qu'une fenêtre. Bonus : on a ici la possibilité de sélectionner la fenêtre à capturer qui n'est pas nécessairement celle active (le curseur se transforme en une croix et il faut alors cliquer sur la fenêtre à capturer).

On crée d'abord deux scripts que l'on va placer dans un dossier choisi (ici ~/.scripts) et rendre exécutables à l'aide de la commande chmox +x :

Capture de l'écran entier :

#!/bin/bash
PRTSCR="$HOME/Images"


DATE=`date +%d%b%Y-%H:%M:%S`


if [ ! -d ${PRTSCR} ]
then
mkdir -p ${PRTSCR}
fi


# import
import -window root "$PRTSCR"/"$DATE".jpg

Capture d'une fenêtre seule

#!/bin/bash
PRTSCR="$HOME/Images"


DATE=`date +%d%b%Y-%H:%M:%S`


if [ ! -d ${PRTSCR} ]
then
mkdir -p ${PRTSCR}
fi


# import
import "$PRTSCR"/"$DATE".jpg

Raccourcis clavier

# Captures d'écran

107 :Exec ~/.scripts/impr
Mod1 107 :Exec ~/.scripts/impr_w

Vous l'aurez compris, 107 est le code de la touche Impr écran (valable partout normalement). Les captures sont enregistrées dans le dossier ~/Images sous le nom "date-heure".jpg.

L'économiseur d'écran

Une des choses les plus surprenantes lorsque l'on passe de Gnome à Fluxbox est l'absence d'économiseur d'écran et, par là même, d'écran de verrouillage de session après mise en veille de l'écran.

C'est chose faite en utilisant xscreensave disponible dans les dépôts.

Installation et configuration

# yum install xscreensaver

Configuration graphique :

$ xscreensaver-demo

Démarrage de xscreensaver avec Fluxbox :

xscreensaver &

Raccourcis de verrouillage de l'écran

Il peut être pratique de disposer de raccourcis pour verrouiller son écran, notamment lorsque l'on doit s'absenter en laisser son ordinateur dans une pièce fréquentée.

Raccourcis clavier

Mod1 l :Exec xscreensaver-command -lock

A ajouter à votre fichier keys

Raccourcis menu

[exec] (Verrouiller l'écran) {xscreensaver-command -lock}

Amélioration de l'apparence de la fenêtre de déverrouillage

Le look par défaut de la fenêtre de déverrouillage est très austère et assez peu agréable. Une astuce trouvée ici permet de la rendre bien plus jolie. Pour cela, créez le fichier ~/.Xresources et mettez-y le contenu suivant :

 xscreensaver.splash: false

!font settings
xscreensaver.Dialog.headingFont: -*-dina-bold-r-*-*-12-*-*-*-*-*-*-*
xscreensaver.Dialog.bodyFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-*
xscreensaver.Dialog.labelFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-*
xscreensaver.Dialog.unameFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-*
xscreensaver.Dialog.buttonFont: -*-dina-bold-r-*-*-12-*-*-*-*-*-*-*
xscreensaver.Dialog.dateFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-*
xscreensaver.passwd.passwdFont: -*-dina-bold-r-*-*-12-*-*-*-*-*-*-*

!general dialog box (affects main hostname, username, password text)
xscreensaver.Dialog.foreground: #ffffff
xscreensaver.Dialog.background: #111111
xscreensaver.Dialog.topShadowColor: #111111
xscreensaver.Dialog.bottomShadowColor: #111111
xscreensaver.Dialog.Button.foreground: #666666
xscreensaver.Dialog.Button.background: #ffffff

!username/password input box and date text colour
xscreensaver.Dialog.text.foreground: #666666
xscreensaver.Dialog.text.background: #ffffff
xscreensaver.Dialog.internalBorderWidth:24
xscreensaver.Dialog.borderWidth: 20
xscreensaver.Dialog.shadowThickness: 2

!timeout bar (background is actually determined by Dialog.text.background)
xscreensaver.passwd.thermometer.foreground: #ff0000
xscreensaver.passwd.thermometer.background: #000000
xscreensaver.passwd.thermometer.width: 8

!datestamp format--see the strftime(3) manual page for details
xscreensaver.dateFormat: %I:%M%P %a %b %d, %Y

Et voilà :)" class="smiley

Correction de quelques soucis mineurs

J'ai personnellement perdu le clic par tapottement sur mon touchpad Synaptic ainsi que le verouillage du pavé numérique au démarrage.

Touchpad

Ajouter la ligne suivante au fichier startup :

synclient tapButton1=1 &

Pavé numérique

Installez xnumlock et lancez le au démarrage de Fluxbox :

numlockx &

Conclusion

Cette série d'articles est terminée. Ces quelques astuces devraient vous faciliter la vie, vous verrez : vous ne pourrez plus vous en passer !

Je vous souhaite bien du plaisir à utiliser Fluxbox ;)" class="smiley

phpBB3 - redimensionner automatiquement les images trop grandes

Mehdi Bahri

Comme vous l'aurez surement remarqué si vous maintenez un forum phpbb3, le forum n'effectue par défaut aucun redimensionnement des images insérées dans les posts, ce qui peut mener à des résultats à la fois très inesthétiques et nuisibles à la lisibilité du forum pour peu que l'utilisateur insert une image trop grande.

Je propose ici une modification rapide et simple permettant de redimensionner à l'affichage les images trop grandes tout en proposant un lien vers la version pleine taille (il suffit de cliquer sur l'image). NB : Le redimensionnement se fait côté client et n'alourdit pas la charge du serveur, mais il n'est effectif qu'une fois l'image entièrement chargée.

Ouvrez le fichier includes/bbcode.php et recherchez la fonction bbcode_tpl ligne 407, vous devriez avoir à l'intérieure de la fonction l'array suivant :

$bbcode_hardtpl = array(
        'b_open'        => '<span style="font-weight: bold">',
        'b_close'       => '</span>',
        [...]
        'email' => '<a href="mailto:$1">$2</a>'
);

Modifiez la ligne correspondant au tag img comme suit :

'img' => '<a href="http://mehdinux.co.cc/index.php?post/2010/06/02/$1" title="Image en pleine taille"><img src="http://mehdinux.co.cc/index.php?post/2010/06/02/$1" alt="' . $user->lang'IMAGE' . '" onload="javascript:if(this.width > 640){ this.height = Math.round(((640)/this.width)*this.height); this.width = (640); }"/></a>'

Explication du code :

  • Je passe sur la balise a, en précisant juste que $1 est remplacé par l'adresse de l'image placée entre les balises.
  • On fait appel à l'attribut onload pour exécuter un code javascript, l'attribut onload d'un objet permet de gérer les actions liées à l'évènement "l'objet est chargé".

Le javascript :

  • On a une première condition if portant sur la valeur de l'image, this.width est un exemple d'utilisation de la POO en javascript (très basique je l'admet), this fait référence à l'objet dont la fonction en cours est une méthode. On accède ensuite à la propriété publique width qui n'est autre que la largeur de l'objet qu'on compare avec la valeur maximale fixée par vos soins en fonction de votre forum.
  • Ensuite, on calcule la nouvelle auteur de l'image redimensionnée, en prenant pour largeur la largeur maximale fixée et en conservant le rapport Hauteur/Largeur original (on évite ainsi de déformer l'image) que l'on donne à l'image via this.height.

Il est possible également d'intégrer une LightBox à l'aide de jQuery et du plugin qui va avec, cependant j'ai testé chez moi avec un template non officiel personnalisé par mes soins et je n'ai pas pu la faire marcher même en bidouillant et en refaisant la manip plusieurs fois à me référant à la doc. Le problème étant que l'image s'ouvre toujours dans une nouvelle fenêtre/un nouvel onglet en plus de l'effet lightbox et le tout passe très mal sous IE (lightbox affichée en permanence, problème d'icones etc.), bref j'ai laissé tomber. Si vous avez des idées là dessus par contre je suis preneur ! :)" class="smiley

ImageMagick ou comment faire en deux secondes un lot de modifications

Mehdi Bahri

Bonjour

Pour ce premier billet depuis, il faut le dire, longtemps, je vais faire dans le terre à terre. Je devais aujourd'hui transmettre à un ami de Lycée des cours qu'il a manqué. Étant occupé à coder sous Linux (en bon geek qui se respecte), j'avais une flemme profonde de redémarrer sous Windows pour scanner des feuilles, ajuster l'image et faire un pdf.

Donc je suis allé sur le site du constructeur de ma multifonction et oh, bonheur, les pilotes du scanner étaient en ligne ! L'installation est on ne peut plus simple, un paquet à installer et une commande à taper et xsane reconnait la machine en Wifi sur le réseau ! Un grand bravo à Brother pour ses efforts pour les utilisateurs linux. Un billet plus complet suivra sur l'installation de l'imprimante et du scanner.
Je scanne donc mes feuilles et me retrouve avec un dossier d'images. Me disant qu'il faudrait mieux les ajuster, je lance gimp et procède à quelques modifications pour un résultat somme toutes minime et un ratio temps/résultat assez décevant. Puis je me dis qu'il faudrait pouvoir faire ça à la chaine et tant qu'à faire, transformer ces fichiers en un seul PDF que mon pote pourra lire sans problème. Et là, oh divine illumination, le nom d'ImageMagick me revient en tête.

En deux commandes c'est réglé :

[mehdi@localhost]~% mogrify -normalize géo*.jpeg
[mehdi@localhost]~% convert géo*.jpeg géo.pdf


  • Pour les curieux, mogrify permet de modifier des images par groupe et -normalize indique au programme de procéder à un ajustement automatique du contraste.
  • Convert permet de convertir des images d'un format à un autre, de faire d'autres choses bien sur, et de fusionner plusieurs images en un PDF à 3 pages, de taille équivalente aux fichiers séparés.


Je vous réfère donc au site officiel du projet : http://www.imagemagick.org/script/index.php
Plus de détails sur le "contrast streching" et les possibilités de -normalize : http://homepages.inf.ed.ac.uk/rbf/HIPR2/stretch.htm