WikiMiNET

La documentation technique et administrative

Outils pour utilisateurs

Outils du site


wiki:services:imprimante_cups_server

Cups server

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

Services proposés par cups-server

  • L'impression par le réseau.

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.

  • L'impression sans openvpn.

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)

  • Le scan vers ftp.

Il est possible de scanner et d'envoyer directement vos document sur la machine cups-server et les récuper via ftp.

Tutos

Imprimer

Méthode rapide

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 

Méthode "proxy cups"

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.

Scanner

Sur l'imprimante quand vous voulez scanner: faites 'Scan' > 'to FTP' > 'scan_ftp'.

Pour récupérer le document:

  • Sur nextcloud dans /MiNET/Scanner

Comment c'est fait

Impression

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

Scanner

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 avec {next,own}cloud

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.

Commandes utiles

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 
wiki/services/imprimante_cups_server.txt · Dernière modification: 2020/06/27 18:16 (modification externe)