→ Slide 1

Impression PDF Android

Philippe Wambeke - LoliGrUB

→ Slide 2

L'objectif

Un utlisateur “Lambda” doit pouvoir imprimer simplement un PDF depuis son smartphone / sa tablette Android.

→ Slide 3

Les ingrédients

↓ Slide 4

Au niveau matériel

↓ Slide 5

Au niveau logiciel

→ Slide 6

La recette

Quel va être le parcours du PDF ?

  1. Envoyé depuis Android vers le serveur web à l'aide du protocole webdav
  2. Incron détectera qu'un nouveau fichier vient d'être “uploadé” et déclenchera l'exécution du script bash maison
  3. Le script maison vérifie qu'il s'agit bien d'un PDF et l'imprime via CUPS
→ Slide 7

Mise en place

↓ Slide 8

Installation du serveur web

sudo apt-get install apache2 cups
sudo a2enmod dav
sudo a2enmod dav_fs
↓ Slide 9

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
↓ Slide 10

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
 
<Location /webdav>
	Options Indexes MultiViews
	DAV On
	Order deny,allow
	deny from all
	allow from 192.168.2
</Location>
↓ Slide 11

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
↓ Slide 12

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
↓ Slide 13

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
↓ Slide 14

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:

↓ Slide 15

Incron

sudo su
# apt-get install incron
# echo root > /etc/incron.allow
sudo incrontab -e
/var/www/webdav IN_MOVED_TO /home/wap/printtest.sh $@ $#
↓ Slide 16

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
→ Slide 17

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.

→ Slide 18

Pour aller plus loin

Il est possible d'améliorer les choses:

→ Slide 19

Merci

Questions ?