Avr 162013
 

J’étais déjà très content de ma Raspberry Pi en tant que serveur CUPS pour ma HP LaserJet 4 : elle ne consomme que quelques watts, ce qui permet de la laisser tourner en permanence sans problème de conscience en matière d’économie d’énergie.
Elle est donc prête à recevoir un travail d’impression à tout moment, depuis n’importe quel ordinateur de mon réseau, ce qui est plutôt pratique.
Par contre, ma vieille HP LaserJet n’est pas très économique, d’abord parce la technologie laser est gourmande en elle-même, et ensuite parce qu’on ne se souciait pas trop de cette problématique dans les années 90. D’après la fiche technique : 660 Watts en mode marche, 55 Watts en veille / sommeil.
Et puis, même au repos, elle est assez bruyante.
Je ne l’allume donc que quand j’en ai besoin, et puis je l’éteins dès que je pense que je n’en aurai plus besoin, ce qui n’est pas trop fastidieux quand je suis au bureau mais bien plus quand je suis ailleurs.
Je me suis donc dit récemment qu’il me restait un canal non utilisé sur le relais électrique branché à ma Raspberry Pi et que j’allais l’utiliser pour gérer automatiquement l’allumage et l’extinction de ma LaserJet !
Voici donc comment j’ai mis en place le script d’allumage qui s’exécute quand un travail d’impression est reçu par CUPS, avant que le travail ne soit envoyé à l’imprimante, et le script d’extinction qui éteint l’imprimante après un temps défini d’inactivité.
 

Script d’allumage

Voici le script d’allumage que j’ai appelé /root/prnpoweron.sh (penser à le chmod +x )

#!/bin/bash
# on consigne la date à laquelle ce script est exécuté
date +"%Y-%m-%d %H:%M:%S" > /etc/cups/power.lock
# le canal du relais est commandé par le pin 11
power=`/usr/local/bin/gpio read 0`
# si l'imprimante est éteinte
if [ $power -eq 0 ]
then
        /usr/local/bin/gpio mode 0 out ;
        /usr/local/bin/gpio write 0 1 ;
        # attendre une minute que l'imprimante démarre
        sleep 60 ;
fi

Ce script sera lancé par tea4cups quand un travail d’impression arrivera pour cette imprimante.
 

Installation de tea4cups

  • Copier tea4cups.conf dans le dossier de configuration de CUPS, habituellement /etc/cups/
  • Copier tea4cups dans le dossier des backends CUPS, habituellement /usr/lib/cups/backend/
  • Modifier les droits du fichier tea4cups :
 chown root:root /usr/lib/cups/backend/tea4cups ; chmod 700 /usr/lib/cups/backend/tea4cups ;

 

Configuration de tea4cups

  • Éditer le fichier /etc/cups/tea4cups.conf et rajouter les lignes :
serialize : yes
prehook_poweron : /root/prnpoweron.sh
  • Éditer le fichier /etc/cups/printers.conf et rajouter « tea4cups:// » devant l’URI de l’imprimante à gérer :
DeviceURI tea4cups://usb://HP/LaserJet%204%20Plus
  • Redémarrer CUPS :
service cups restart

 
Dès à présent, la Raspberry devrait allumer l’imprimante quand on lui envoie un travail d’impression.
 

Script d’extinction

Voici le script d’extinction que j’ai appelé /root/prnpoweroff.sh (penser à le chmod +x ), et qui éteint l’imprimante si la date du dernier travail d’impression est supérieure à 30 minutes.

#!/bin/bash
datepoweron=`cat /etc/cups/power.lock`
datepoweroff=`date --date "$datepoweron 30 minutes" +"%s"`
datenow=`date +"%s"`
if [ "$datenow" -gt "$datepoweroff" ]
then
    /usr/local/bin/gpio mode 0 out ;
    /usr/local/bin/gpio write 0 0 ;
fi

 

Configuration du cron

Il suffit d’éditer les tâches cron

crontab -e

Et de rajouter le script d’extinction toutes les 5 minutes

*/5 *   * * *   /root/prnpoweroff.sh

 

Sources :

Tea4Cups : http://www.pykota.com/software/tea4cups/download
Calculs dates : http://www.unix.com/tips-tutorials/31944-simple-date-time-calulation-bash.html

Déc 152011
 

Bien que la plupart des équipements réseau gigabit puissent accepter un MTU allant jusqu’à 9000, il est réglé par défaut à 1500. Ceci parce que l’IETF n’a jamais rien standardisé au-dessus de 1500.
Ainsi, les paquets dont la taille dépasse les 1500 octets sont appelés « Jumbo frames ».
Mais comme il n’y a pas de standard, chaque équipement (carte réseau, switch, routeur…) accepte une MTU maximum différente qui n’est pas forcément 9000.
Nous allons donc devoir tâtonner pour trouver le dénominateur commun et ainsi optimiser le réseau entre tous les équipements.
 
Première étape :
Il faut trouver la MTU maximum sur chaque ordinateur en utilisant ifconfig et en partant de 9000. Si on obtient un message d’erreur, on réessaye avec une MTU de 8000, et ainsi de suite jusqu’à ce que le message d’erreur ne s’affiche plus. On peut ensuite affiner.
Par exemple (la carte réseau est eth0)  :

$ sudo ifconfig eth0 mtu 9000
SIOCSIFMTU: Invalid argument
$ sudo ifconfig eth0 mtu 8000
SIOCSIFMTU: Invalid argument
$ sudo ifconfig eth0 mtu 7000
$ sudo ifconfig eth0 mtu 7500
SIOCSIFMTU: Invalid argument
$ sudo ifconfig eth0 mtu 7300
SIOCSIFMTU: Invalid argument
$ sudo ifconfig eth0 mtu 7200

Il faut ensuite recommencer cette procédure sur chaque machine et ainsi déterminer la MTU maximum pour chacune d’entre-elles.
 
Deuxième étape :
Nous allons ensuite régler chaque machine sur la MTU maximum le plus petit trouvé lors de la première étape.
Par exemple, si nous avons trouvé 7200 sur un PC et 7000 sur l’autre, on règle la MTU à 7000 sur les deux machines :

$ sudo ifconfig eth0 mtu 7000

Il faut maintenant s’assurer que le(s) switch(es) sont compatibles avec cette MTU en essayant de pinger chaque machine entre-elle.
Par exemple, si les deux PC ont pour adresse IP 192.168.1.23 et 192.168.1.41, on exécute sur la première machine :

$ ping -s [MTU-28] -M do 192.168.1.41

(28 = entête du ping de 8 octets + entête de la pile TCP/IP de 20 octets)
S’il y a des réponses, le test est concluant, sinon cela veut dire qu’un des équipements de la chaîne ne supporte pas la MTU choisie (switches, routeurs). Il faut alors recommencer cette deuxième étape depuis le début, avec une MTU plus faible.
 
Troisième étape :
Il faut paramétrer KNetworkManager pour que la MTU choisie soit appliquée systématiquement.
Pour cela il faut aller dans la Configuration du système, rubrique Réseau et connectivité, puis icône Configuration de réseau.
Dans Connexions réseau, choisir Wired (connexions filaires), sélectionner la connexion réseau puis cliquer sur le bouton « Modifier… ».
Dans l’onglet Ethernet, régler la MTU à la valeur testée et approuvée, puis cliquer sur le bouton « Ok », et fermer l’interface de configuration.
Recommencer cette étape sur les autres machines.
 
Source : http://brainwreckedtech.wordpress.com/2009/05/20/howto-optimize-gigabit-networking-in-linux/

Déc 072011
 

Ou comment résoudre le message d’erreur lorsque vous démarrez un ordinateur Windows 7 ou Windows Vista après avoir modifié le mode SATA du lecteur de démarrage : « STOP 0x0000007B INACCESSABLE_BOOT_DEVICE »
La solution et les explications sont sur le site de Microsoft.

Sep 032011
 

Ce site vous aidera à calculer la puissance nécessaire de l’alimentation en fonction des composants présents dans un PC: http://poloastucien.free.fr/alim_calcul.html.
Je rappelle qu’il vaut mieux viser la taille au dessus pour garder une marge de sécurité, notamment pour les périphériques USB non alimentés (clés USB, webcams, …). Un manque de puissance peut rendre un PC instable, c’est un problème assez difficile à diagnostiquer.
Il faut également noter qu’une alimentation de bonne qualité optimise la puissance du courant (PFC) et ne consomme pas plus que ce que le PC lui demande.

Sep 032011
 

Certains DVD Vidéo ne sont pas lisibles sous Ubuntu car ils sont protégés (cryptés).
Pour remédier à cela, il suffit d’ouvrir une Konsole et de taper :
sudo /usr/share/doc/libdvdread3/install-css.sh
Cette commande télécharge et installe la bibliothèque nécessaire pour décrypter et lire les DVD protégés.

Sep 032011
 

Pour tester la rapidité (débit) d’un disque dur, d’une clé USB ou d’une quelconque mémoire flash, voici quelques commandes simples sous linux :
Pour la vitesse en lecture :
On considère que le disque à tester est /dev/sda :
sudo hdparm -t /dev/sda
Cela donne :
/dev/sda: Timing buffered disk reads: 60 MB in 3.00 seconds = 20.00 MB/sec)
Pour la vitesse en écriture :
On considère que le disque à tester est monté en /media/SD_2GO
cd /media/SD_2GO sudo sync;time bash -c "(dd if=/dev/zero of=bf bs=8k count=500000; sync)"
Cela donne :
dd: écriture de `bf': Aucun espace disponible sur le périphérique
251153+0 enregistrements lus
251152+0 enregistrements écrits
2057437184 octets (2,1 GB) copiés, 548,177 seconde, 3,8 MB/s

/!\ attention un fichier « bf » a été créé sur le périphérique pour tester la vitesse d’écriture. Il faut l’effacer car il consomme de l’espace disque pour rien une fois le test terminé.
 

Sep 012011
 

Ou comment gérer avec efficacité des arbres de taille conséquente : http://sqlpro.developpez.com/cours/arborescence/
Un article très intéressant, autant pour la théorie que pour la pratique.
PEAR propose un package DB_NestedSet pour gérer des arbres selon cette méthode : http://pear.php.net/package/DB_NestedSet

Suffusion theme