Effraie@Blog!

Contenu | Menu | Recherche | Photos | Stats | Admin | Clef GPG | Contact

flux RSS des commentaires flux RSS des commentaires

mercredi 09 avril 2008

Calibration d'écran, profil ICC et gestion des couleurs sous Ubuntu

Ceux d'entre vous qui suivent savent que je m'intéressent à la photo numérique, et en particulier à sa pratique sur notre plate-forme préférée: GNU/Linux.

Mon dernier billet important sur le sujet, Flux de travail numérique pour le photographe sous Ubuntu, tentait de montrer comment il était possible d'utiliser des outils, si ce n'est professionnels, au moins des très haut niveau pour gérer son workflow sous ubuntu.
Cependant, la question de la calibration de l'écran, et donc de la gestion des couleurs semblait poser quelques problèmes, et les solutions que j'avançais à l'époque n'étaient que des bricolages.

Je ferais prochainement un billet (à jour) plus extensif sur la gestion de mon flux, depuis la prise de vue jusqu'à la publication web et/ou l'impression, mais je n'en ai pas le temps ni le courage immédiatement. Je vais donc me contenter d'expliquer la démarche que j'ai suivie pour calibrer mon écran, entièrement sous GNU/Linux (Ubuntu Hardy Heron, mais ça devrait être facilement transposable sous n'importe quelle distribution), parce que j'imagine que ça intéressera fortement un certains nombre...

Pré-requis

  • Argyll Color Management System : Ce logiciel, bien qu' austère et peu engageant, est aujourd'hui ce qui se fait de mieux pour la gestion des couleurs. le site web est explicite: il s'agit d'une collection de codes sources, qui, une fois compilés, fournissent des outils en lignes de commandes permettant, de façon quasi exhaustive, de calibrer toute une chaîne graphique.
  • Une sonde colorimétrique reconnue par Argyll. La liste du matériel supporté est disponible ici. Je me suis servi de la version 0.70 Beta 8, pour profiter du support de la sonde Spyder 2 de colorvision, un des matériel les plus répandu dans le grand public, et surtout, un des moins chers (j'ai acheté la mienne 70€ d'occasion). Inutile de payer plus cher une version «pro», seul le logiciel change, et seule la sonde (matériel) nous sera utile sous GNU/Linux
  • Un écran...

Procédure

Installation de Argyll 0.70 Beta 8

Argyll est un logiciel non-présent dans les dépôt, et d'usage très spécifique.. inutile de l'installer si vous n'en avez pas vraiment besoin, vous risqueriez d'abîmer quelque chose sur votre beau système.

J'ai choisi d'utiliser la version précompilée de Argyll: inutile de se compliquer la tâche pour un logiciel si spécifique. L'installation est donc très simple: il suffit de télécharger cette archive, de l'extraire, et de placer le contenu de son répertoire bin/ dans votre $PATH (personnellement, j'ai choisi /home/effraie/bin , mais libre à vous de faire autre chose, /usr/local/bin étant par exemple tout indiqué.

Le firmware de la sonde Spyder2 étant propriétaire, il n'est pas inclus dans Argyll, et il vous faudra l'extraire. c'est trés simple, et ça se fait en 2 étapes:

  • introduire le cd d'installation de la sonde dans votre lecteur,
  • tapez simplement spyd2en dans une console pour extraire le firmware et l'injecter dans Argyll

Votre sonde Spyder2 devrait désormais être utilisable! Passons donc aux choses sérieuse, la calibration (et la caractérisation) de l'écran proprement dit.

spyder2

Argyll est un outil en ligne de commande, mais pas si compliqué à utiliser, finalement. Enfin, au moins quand, comme moi, on se contente de l'utiliser pour un usage basique, parce qu'il embarque tout un tas d'outils dont je ne saurait que faire...

Voici donc les étapes que je suivie, avec (quelques) détails:

Je me suis placé dans les conditions de luminosités qui sont celles dans lesquelles je travaille mes images (généralement), et j'ai fait le vide sur mon Desktop. Ensuite:

  • Branchez la sonde a une prise USB,
  • sudo chmod 777 -R /dev/bus/usb pour avoir accés, comme simple utilisateur, au bus USB. (il y a sans doute plus élégant, mais là n'est pas le propos),
  • dispcal -v -qm -yl mon_profil (-v pour le mode verbeux, -qm pour une qualité moyenne, -yl pour un écran LCD (-yc pour un CRT) et mon_profil, pour le nom a donner au profil (et aux fichiers intermédiaires). Un patch noir appariait a l'écran, sur lequel placer la sonde, et vous devriez avoir cet affichage dans votre console:
Setting up the instrument
Instrument Type:   Spyder 2
Serial Number:     00617511
Hardwar version:   0x0307
Place instrument on test window.
Hit Esc, ^C or Q to give up, any other key to continue:

  • Tapez donc entrée après avoir placé la sonde, et vous voila avec le menu suivant:
Display adjustment menu:
Press 1 .. 7
1) Black level (CRT: Brightness)
2) White point (Color temperature, R,G,B, Gain)
3) White level (CRT: Contrast, LCD: Brightness)
4) Black point (R,G,B, Offset)
5) Check all
6) Continue on to calibration
7) Exit

Ayant un écran cheap de portable, je suis passé directement à l'étape 6, mais si vous avez des contrôle manuels sur votre écrans, passer par les autres étapes n'est sans doute pas un luxe!

  • Dispcal va afficher et mesurer toute une série de patch de différente couleur, et produire un fichier mon_profil.cal. c'est un peu long, c'est normal.
  • On tape targen -v -d3 -f500 mon_profil, ce qui va générer un fichier mon_profil.ti1 contenant les nouveau patches à mesurer. Cette étape est très rapide.
  • On va maintenant utiliser la commande dispread -v -yl -k mon_profil.cal mon_profil qui va produire un fichier mon_profil.ti3. Cette étape est assez longue également.
  • On peut désormais retirer la sonde l'écran, et générer le profil lui même: profile -v -A "Fabricant de l'écran" -M "modèle de l'écran" -D "la date" -qm -as mon_profil qui va produire un (précieux!) fichier mon_profil.icc
  • On charge le profil dans X avec la commande dispwin /chemin/vers/mon_profil.icc (et on le décharge avec dispwin -c mais ça n'a aucun intérêt ;) ). Votre écran devrait prendre une surprenante teinte jaunâtre, (c'est normal mais moche). Votre écran est désormais calibré, et vous n'avez plus qu'à configurer correctement vos application (supportant les couleurs gérées, comme bibble, ou le dernier gimp). Attention, si vous utilisez un économiseur d'écran, celui ci déchargera le profil. Pensez à le recharger (ou à désactiver l'économiseur d'écran).



Mille merci à Jcornuz pour ses précieuse informations, et bienvenu dans le monde merveilleux des couleurs gérées sous GNU/Linux!

samedi 08 décembre 2007

Sauvegardes extensives

Effraie.org héberge pas mal de sites, et la question des sauvegardes est devenue cruciale.
Bien sur, je pourrais renvoyer les utilisateur-ices à leur responsabilités, et leur demander de faire leurs propres sauvegardes. Cela dit, rien ne dit qu'elles/ils les fassent régulièrement, ni qu'ils sachent comment sauvegarder une base de données.

Je me suis donc penché sur la question, et j'ai amélioré mon rsync quotidien pour obtenir un système qui me convient mieux,

Pour assurer que les données seront à l'abri en cas de crash des disques durs internes, mon répertoire backups/ est situé sur un disque usb externe. Prochainement, je cherche également à automatiser une sauvegarde de ce répertoire sur un serveur distant

Sauvegardes des bases de données

J'utilise, suivant les conseils avisé d'un copain, le script autoMYSQLBackup.sh qu'on trouve ici. Après configuration de quelques variables, le script est opérationnel, et il ne vous reste qu'a le lier dans /etc/cron.daily/ pour obtenir une sauvegarde automatisée de chacune de vos bases. Le script conserve les backups des derniers 7 jours, une par semaine pendant un mois, et une par mois indéfiniment.
Au final, cela me permet de conserver une trace des données sur le long terme, sans pour autant user une espace disque démesuré, dans backups/sql.

Sauvegardes des données:

Pendant longtemps, je me suis contenté d'utiliser rsync pour sauvegarder les données du serveur. Cependant, je souhaitais bénéficier, comme pour les bases de données, de la possibilité de restaurer une sauvegarde plus ancienne. Pour cela, j'ai utilisé des outils standards, rsync, cp, rm, date, find et crontab.

Le fonctionnement est simple:

sauvegarde principale:

Chaque nuit, à 2h30, je sauvegarde l'ensemble des données que je veux pouvoir restaurer dans un répertoire backups/main, avec le "mini script" suivant, qui synchronise la racine du serveur avec ma sauvegarde:


#!/bin/sh
rsync -azh  --exclude=/pattern/à/ne/pas/sauver --exclude=/dev --exclude=/proc --exclude=/tmp --exclude=/sys   --delete-after --delete-excluded --stats / /chemin/vers/backups/main



et cette ligne dans la crontab de root:

30 02  *  *  * /chemin/vers/le/script/main_backup 2>&1 | mail votre@email.tld -s "[Rsync] rapport du `date +%A\ %d\ %B\ %Y`"



Je reçois ainsi chaque jour un rapport statistique sur la synchronisation, de cette forme:


Number of files: 208552
Number of files transferred: 1038
Total file size: 8.23G bytes
Total transferred file size: 354.84M bytes
Literal data: 354.86M bytes
Matched data: 0 bytes
File list size: 6230145
File list generation time: 98.647 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 70.71M
Total bytes received: 24.00K

sent 70.71M bytes  received 24.00K bytes  344.18K bytes/sec
total size is 8.23G  speedup is 116.42



En cas de problème, le mail contient la sortie d'erreur de la commande.

Journalisation des sauvegardes

Pour pouvoir restaurer des sauvegardes plus anciennes, ou des fichiers effacés il y a plusieurs jours sur le serveur (et donc absent de backups/main), j'utilise trois petits scripts simplistes, qui, associés à une ligne adéquate dans la crontab de root, me permettent de conserver l'ensemble des sauvegardes des 7 derniers jours, une sauvegarde par semaine pendant un mois, et une sauvegarde par mois pendant 6 mois.

attention.png Note ajoutée à la suite de quiproquo dans les commentaires
Le systéme de journalisation/rotation des backups utilise l'option -l de cp, pour créer des hardlinks au lieu de recopier les fichiers, dans tt les cas ou le fichier n'a pas été modifié. C'est le moyen de n'utiliser que l'espace disque minimum requis. Compresser les données dans une archive ferait perdre cet avantage, et utiliserait, finalement, plus d'espace disque.



Voici les scripts et les entrées dans la crontab qui vont avec:

daily_backup

le script:

#!/bin/sh
find /chemin/vers/backups/timed/daily/* -ctime +7 -exec rm -rf {} \;
cp -al /chemin/vers/backups/main /chemin/vers/backups/timed/daily/`date +%F` 2> /dev/null;



L'entrée dans la crontab:

30 03  *  *  * /home/effraie/scripts/daily_backup



weekly_backup

le script:

#!/bin/sh
find /chemin/vers/backups/timed/weekly/* -ctime +33 -exec rm -rf {} \;
cp -al /chemin/vers/backups/main /chemin/vers/backups/timed/weekly/`date +%U_%F` 2> /dev/null;



L'entrée dans la crontab:

40 03  *  *  0 /home/effraie/scripts/weekly_backup



monthly_backup

Le script:

#!/bin/sh
find /chemin/vers/backups/timed/monthly/* -ctime +183 -exec rm -rf {} \;
cp -al /chemin/vers/backups/main /mnt/usb-data/backups/timed/monthly/`date +%m-%Y` 2> /dev/null;



L'entrée dans la crontab:

50 03  1  *  * /home/effraie/scripts/monthly_backup



Avec ça, je pense être habillé pour l'hiver! Cela dit, toute suggestion d'amélioration est la bienvenue.