sudo apt-get install apache2 cups
Philippe Wambeke - LoliGrUB
Un utlisateur "Lambda" doit pouvoir imprimer simplement un PDF depuis son smartphone / sa tablette Android.
Sans que Google ne sache ce qui est imprimé
Sans que le document ne fasse le tour du monde
Sans devoir donner tous les droits à Google sur l’imprimante
Sans être obligé d’acheter une imprimante réseau
En utilisant des logiciels libres
Une imprimante (réseau ou USB)
Un ordinateur connecté à l’imprimante (un RPI suffit amplement)
La mise en réseau de l’ordinateur et du périphérique Android
Sur le serveur:
CUPS (Common Unix Printing Sytem)
Un serveur web (Apache par exemple) avec le module "webdav"
incron: permet d’être averti sur changements du système de fichiers
Un script Bash fait maison ;-)
Sur Android:
Un (bête) client webdav
Quel va être le parcours du PDF ?
Envoyé depuis Android vers le serveur web à l’aide du protocole webdav
Incron détectera qu’un nouveau fichier vient d’être "uploadé" et déclenchera l’exécution du script bash maison
Le script maison vérifie qu’il s’agit bien d’un PDF et l’imprime via CUPS
Installer Apache et CUPS:
sudo apt-get install apache2 cups
Activer le module webdav:
sudo a2enmod dav
sudo a2enmod dav_fs
Le dossier qui recevra les fichiers PDF sera ici /var/www/webdav. Ce dossier doit être créé et appartenir à Apache.
sudo mkdir -p /var/www/webdav
sudo chown -R www-data:www-data /var/www/webdav
Il faut aussi l’indiquer à Apache dans le dossier sites-available par le fichier /var/www/webdav:
Alias /webdav /var/www/webdav
<Location /webdav>
Options Indexes MultiViews
DAV On
Order deny,allow
deny from all
allow from 192.168.2
</Location>
Il faut ensuite activer le module webdav et recharger la configuration de Apache:
sudo a2ensite webdav
sudo service apache2 reload
Permettre d’accéder à CUPS depuis le réseau local en modifiant le fichier de configuration /etc/cups/cupsd.conf.
Remplacer la ligne:
Listen localhost:631
par:
Listen 631
Permettre d’accéder à l’interface d’administration de CUPS:
sudo cupsctl --remote-admin
Finalement, on redémarre CUPS:
sudo systemctl restart cups
En fonction de la marque et du modèle d’imprimante, il peut être nécessaire d’installer des pilotes supplémentaires. Le site https://www.openprinting.org/printers dresse une liste exhaustive des modèles et des drivers correspondant.
Une fois le bon driver installé, reste à ajouter l’imprimante:
Ouvrir l’URL http://<ip_serveur_web>:631
Choisir "Ajouter une imprimante"
Suivre les instructions de l’assistant
Installer incron et permettre à root de l’utiliser. Taper en tant que root:
sudo su
# apt-get install incron
# echo root > /etc/incron.allow
Activer la surveillance du dossier de destination:
sudo incrontab -e
Et ajouter:
/var/www/webdav IN_MOVED_TO /home/wap/printtest.sh $@ $#
Du côté serveur, il ne reste plus qu’à copier le script bash suivant dans le dossier spécifié à l’étape précédente.
#!/bin/bash
# Petit script pour imprimer un pdf en ligne de commande (trop fort GNU/Linux)
complete_file_name="$1/$2"
file_name=$(file "${complete_file_name}" | grep "PDF document" | cut -f1 -d':')
if [ -n "${file_name}" ]; then
lp -d "HP_DESKJET_990C" "${file_name}"
rm "${file_name}"
fi
Il suffit ensuite d’installer n’importe quel client webdav.
L’impression du PDF se fait simplement en "uploadant" le fichier PDF sur le serveur web.
Il est possible d’améliorer les choses:
en implémentant une authentification pour l’envoi des PDF (mode digest)
imprimer des images en faisant une conversion à la volée (mogrify)
imprimer des documents odt en faisant une conversion à la volée (mais nécessite l’installation d’une usine à gaz)
Questions ?