~~NOCACHE~~
~~REVEAL theme=sky&transition=convex&controls=1&show_progress_bar=1&build_all_lists=1&open_in_new_window=1~~
====== Impression PDF Android ======
Philippe Wambeke - LoliGrUB
===== L'objectif =====
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
===== Les ingrédients =====
==== Au niveau matériel ====
* 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
==== Au niveau logiciel ====
* 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
===== La recette =====
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
===== Mise en place =====
==== Installation du serveur web ====
* Installer Apache et CUPS:
sudo apt-get install apache2 cups
* Activer le module webdav:
sudo a2enmod dav
sudo a2enmod dav_fs
==== Configuration du serveur web (1/3) ====
=== Dossier de destination ===
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
==== Configuration du serveur web (2/3) ====
=== Configurer Apache et le module webdav ===
Il faut aussi l'indiquer à Apache dans le dossier sites-available par le fichier /var/www/webdav:
Alias /webdav /var/www/webdav
Options Indexes MultiViews
DAV On
Order deny,allow
deny from all
allow from 192.168.2
==== Côté serveur web: configuration (3/3) ====
Il faut ensuite activer le module webdav et recharger la configuration de Apache:
sudo a2ensite webdav
sudo service apache2 reload
==== Configuration de CUPS (1/2) ====
=== Port d'écoute ===
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
==== Configuration de CUPS (2/2) ====
Permettre d'accéder à l'interface d'administration de CUPS:
sudo cupsctl --remote-admin
Finalement, on redémarre CUPS:
sudo systemctl restart cups
==== Ajouter l'imprimante ====
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
==== Incron ====
* 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 $@ $#
==== Le script bash ====
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
===== Côté Android =====
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.
===== Pour aller plus loin =====
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)
===== Merci =====
Questions ?