Le container cups-server à été crée pour simplifier l'utilisation de l'imprimante MiNET. Son ip (192.168.102.100)
— Kevin Cazal 2017/04/05 16:15
L'imprimante imprime par défaut en noir et blanc. Pour imprimer en couleur :
lp -o BRMonoColor=Auto filename.docx
L'avantage de cups server est que cette machine est déjà configurée pour l'imprimante MiNET. Les pilotes Brother sont déjà installés, pas besoin de les installer sur votre PC. Pas besoin d'installer des pilotes génériques (qui donnent souvent un résultat aléatoire) non plus.
Si vous n'avez pas d'accès openvpn (que les accès SSH sur vpn1 ou 2) vous pouvez quand même faire un scp du fichier que vous souhaitez imprimer sur la machine cups-server et imprimer grace à la commande
lp /chemin/vers/le_document_a_imprimer.pdf
(par défaut l'impression est sur le recto et en couleur)
Il est possible de scanner et d'envoyer directement vos document sur la machine cups-server et les récuper via ftp.
l'utilisateur qui lance la commande lp doit faire partie du groupe lp ou s'appeller root
[user@mon_pc]$ scp mon_fichier.pdf user@192.168.102.100:.
[user@mon_pc]$ ssh user@192.168.102.100
[user@cups-server]$ lp mon_fichier.pdf
Vous pouvez installer cups sur votre PC et configurer une imprimante réseau. Sauf que au lieu de mettre l'IP de l'imprimante MiNET vous pouvez mettre l'IP de cups-serveur qui est déjà configuré avec les bons drivers.
Sur l'imprimante quand vous voulez scanner: faites 'Scan' > 'to FTP' > 'scan_ftp'.
Pour récupérer le document:
On installe cups sur le CT:
apt install cups
on installe les drivers Brother dispo sur http://support.brother.com/g/b/producttop.aspx?c=us_ot&lang=en&prod=mfc9340cdw_all
Sinon les drivers se trouvent sur le CD fourni avec l'imprimante. Un ISO de ce CD se trouve sur nextcloud dans MiNET/Firmware https://nextcloud.minet.net/index.php/apps/files/?dir=/MiNET/Firmware.
On s'assure que le service cups est bien démarré.
On configure cups, soit via l'interface WEB sur http://192.168.102.100:631 (à noter que par défaut cups autorise la connexion que depuis 127.0.0.1, pour se connecter sur l'interface Web depuis une autre machine il faut changer la conf de cups et rélancer le service) soit en ligne de commande (cf la doc de cups).
TODO: interface web pour imprimer quand on est vraiment mauvais avec la ligne de commande
Pour relier le scanner à un ftp:
On installe un serveur ftp:
apt install pure-ftpd xmlstarlet curl
Obsolète: J'ai choisi pure-ftpd car sa configuration initiale fait tout ce dont on a besoin: pas de ftp anonyme, les home directories des utilisateurs standard sont disponible en ftp (avec authetification PAM), pas de ftp pour le compte root.
Il nous reste donc à créer un utilisateur et définir son home directory (qui va être l'endroit où seront stockés les fichiers scannés)
adduser --home /srv/scanner_ftp/ scanner_minet
pure-ftpd est maintenant configuré avec un utilisateur virtuel chrooté (il n'est plus possible de se logger avec PAM et de voir le contenu des dossiers autre que la racine du serveur ftp). De plus un script transfère automatiquement les fichiers uploadés sur le ftp sur Nextcloud (dans /MiNET/Scanner)
Configuration de pure-ftpd:
# Creation de la DB pour les utilisateurs virtuels echo '/etc/pure-ftpd/pureftpd.pdb' > /etc/pure-ftpd/conf/PureDB cd /etc/pure-ftpd/auth ln -s /etc/pure-ftpd/conf/PureDB 50pure # Desactivation du login UNIX et PAM echo 'no' > /etc/pure-ftpd/auth/65unix echo 'no' > /etc/pure-ftpd/auth/70pam # Creation de notre utilisateur virtuel groupadd ftpgroup useradd -g ftpgroup -d /dev/null -s /etc ftpuser pure-pw useradd scanner_minet -u ftpuser -g ftpgroup -d /srv/scanner_ftp pure-pw mkdb # On met a jour les UID et GID de l'utilisateur qui lancera le script appelé à la fin d'un upload MYUID=$(id -u ftpuser); sed -i -e "s/UPLOADUID=.*/UPLOADUID=${MYUID}/g" /etc/default/pure-ftpd-common MYGID=$(id -g ftpuser); sed -i -e "s/UPLOADGID=.*/UPLOADGID=${MYGID}/g" /etc/default/pure-ftpd-common # On active le lancement de script custom à la fin de l'upload echo 'yes' > /etc/pure-ftpd/conf/CallUploadScript # On s'assure que tous les utilisateurs sont chrooté echo 'yes' > /etc/pure-ftpd/conf/ChrootEveryone # Pas d'utilisateur anonyme echo 'yes' > /etc/pure-ftpd/conf/NoAnonymous # On s'assure que pure-ftpd n'écoute que sur l'interface dans le 102 sur le port 21 echo '192.168.147.5,21' > /etc/pure-ftpd/conf/Bind
On crée le script qui va transférer les fichiers uploadé sur le ftp sur le {own,next}cloud (/opt/uploadhandler.sh)
#!/bin/bash # Lorsque pure-ftpd appelle un script il passe le chemin absolu du fichier uploadé en $1 PROXY="http://192.168.102.61:82" OC_USER="scanner" ###### Utilisateur nextcloud faisant partie du groupe "MiNET" OC_PASS="xxxxxxxxxxxxxxxxxx" ###### MDP de l'utilisateur scanner sur nextcloud OC_WEBDAV_URL="https://nextcloud.minet.net/remote.php/webdav/" OC_UPLOAD_DIR="MiNET/Scanner" FILENAME=$(basename "$1") # upload_exit_code vaut 0 si la commande n'a pas retournée d'erreur # cependant ça ne veut pas dire que le fichier a bien été uploadé sur # nextcloud curl -s -x $PROXY -u $OC_USER:$OC_PASS -T "$1" $OC_WEBDAV_URL/$OC_UPLOAD_DIR/$FILENAME upload_exit_code=$? # Verifie que le fichier se trouve bien sur nextcloud # si dans le XML renvoyé par la requête on trouve # un élément "error" dans lequel on trouve un élément "exception" # check_exit_code vaut 0 -> en d'autres termes ça sent pas bon curl -s -x $PROXY -u $OC_USER:$OC_PASS -XPROPFIND $OC_WEBDAV_URL/$OC_UPLOAD_DIR/$FILENAME | xmlstarlet select -t -v //d:error/s:exception check_exit_code=$? # On supprime le fichier de cups-server seulement si le fichier a # bien été envoyé sur nextcloud if [ $upload_exit_code -eq 0 ] && [ $check_exit_code -ne 0 ]; then rm -r "$1" fi
Ensuite:
chmod +x /opt/uploadhandler.sh
On s'assure que la conf globale de pure-ftpd est bonne (/etc/default/pure-ftpd-common):
STANDALONE_OR_INETD=standalone VIRTUALCHROOT=true UPLOADSCRIPT=/opt/uploadhandler.sh UPLOADUID=1008 #uid de l'utilisateur qu'on vient de créer UPLOADGID=1008 #gid de l'utilisateur qu'on vient de créer
On oublie pas de relancer le daemon.
Ensuite aller sur l'interface WEB de l'imprimante: http://192.168.147.5/scan/scanprofile.html
Cliquez sur un profil et remplissez les champs:
Profile Name
Host Address (l'address IP de cups-server)
Username (le nom d'utilisateur virtuel que vous venez créer)
Password (le mot de passe de cet utilisateur) Store Directory (le dossier dans lequel les documents seront stockés, mettre '.' pour stocker à la racine du ftp).
Les autres champs peuvent être laissés à leur valeur par défaut.
Validez le formulaire et normalement le profile devrait apparaitre dans le menu 'Scan to FTP' de l'imprimante.
Lister les imprimantes disponibles:
lpstat -p
Sélectionner une imprimante:
lp -d printer filename
Imprimer avec un bandeau topsecret:
lp -o job-sheets=standard filename
Spécifier un range de page à imprimer:
lp -o page-ranges=1-4 filename
Empêcher les débordements
lp -o fit-to-page filename