Outils pour utilisateurs

Outils du site


printing:linux:cups

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
printing:linux:cups [2017/09/12 13:35]
florian créée
printing:linux:cups [2023/12/12 08:22] (Version actuelle)
florian ↷ Page déplacée de linux:cups à printing:linux:cups
Ligne 1: Ligne 1:
 +===== CUPS =====
 +CUPS (Common Unix Printing System) est le système qui gère l'​impression sur les sytèmes Unix.
 +
 +Si cups n'est pas déjà installé :
 +  apt-get install cups
 +  ​
 +Notre but est de proposer une imprimante virtuelle pour imprimer dans un fichier PDF.
 +Pour cela nous allons installer un "​backend"​ (ou filtre) dans cups.
 +
 +Ci-dessous le code du backend :
 +<file pdf-writer>​
 +#!/bin/sh
 +#################################################################################​
 +#
 +#       ​File: ​                  ​pdf-writer
 +#
 +#       ​Description: ​   A simple PDF Writer for CUPS
 +#
 +#       ​Copyright: ​             (c) 2006  Axel Schmidt, ​ SUSE LINUX GmbH, Nuernberg, Germany
 +#                               (c) 2001  Michael Goffioul (kdeprint <at> swing <dot> be)
 +#
 +#       ​License: ​               GPL
 +#
 +#################################################################################​
 +
 +PS2PDF=`which ps2pdf`
 +DATE=`date +%Y-%m-%d-%H-%M-%S`
 +
 +# USERMODE="​on"​ changes PDFPATH to "​$HOME/<​user-name>/​PDF"​
 +#
 +USERMODE="​off"​
 +DEFGROUP="​www-data"​
 +HOME="/​home"​
 +JOB=$1
 +PRTUSER=$2
 +PRTNAME=$3
 +
 +# Create user based file name
 +#
 +create_user_fname()
 +{
 +        if [ "​$PRTUSER"​ != ""​ ]; then
 +                FILENAME="​$PDFPATH/​$PRTNAME-$PRTUSER-$DATE.pdf"​
 +                logger "​pdf-writer:​ \"​$PRTNAME-$PRTUSER-$DATE.pdf\"​ was placed in: $PDFPATH"​
 +        else
 +                FILENAME="​$PDFPATH/​$DATE.pdf"​
 +                logger "​pdf-writer:​ \"​$DATE.pdf\"​ was placed in: $PDFPATH"​
 +        fi
 +}
 +
 +
 +# Check DEVICE DISCOVERY + test PS2PDF
 +#
 +if [ "​$JOB"​ = ""​ ]; then
 +        if test -f "​$PS2PDF"​ ; then
 +                echo "​network pdf-writer:/​export/​share/​pdf \"​unkown\"​ \"pdf writer\"​ "
 +                logger "​pdf-writer:​ INFO: USERMODE=\"​$USERMODE\""​
 +                if [ "​$USERMODE"​ = "​on"​ ]; then
 +                   ​logger "​pdf-writer:​ CUPS user must be set to root with USERMODE=\"​on\"​!"​
 +                fi
 +                exit 0
 +        else
 +                echo "​Error:​ $0 - ps2pdf is not available!"​
 +                logger "​pdf-writer:​ ERROR: ps2pdf is not available!"​
 +                exit 1
 +        fi
 +fi
 +
 +logger "​pdf-writer started: $1 $2 $3 $4 $5 $6"
 +
 +# Check number of command line arguments
 +#
 +if [ $# -ne 5 -a $# -ne 6 ]; then
 +        echo "​Usage:​ $0 job-id user title copies options [file]"​
 +        logger "​pdf-writer:​ CRITICAL: Printer stopped !"
 +        exit 1
 +fi
 +
 +
 +# get PDF-WRITER directory from device URI
 +#
 +PDFPATH=${DEVICE_URI#​pdf-writer:​}
 +
 +
 +# Create output filename based on user name and user mode
 +#
 +if [ "​$USERMODE"​ = "​on"​ -a "​$PRTUSER"​ != ""​ ]; then
 +        mkdir -p $HOME/​$PRTUSER/​PDF
 +        chown $PRTUSER $HOME/​$PRTUSER/​PDF
 +
 +# check if cups run as lp or root
 +# user lp may not run chown
 +#
 +        if [ $? -eq 1 ]; then
 +                create_user_fname
 +        else
 +                chgrp $DEFGROUP /​home/​$PRTUSER/​PDF
 +                PDFPATH=$HOME/​$PRTUSER/​PDF
 +                FILENAME="​$PDFPATH/​$DATE.pdf"​
 +                logger "​pdf-writer:​ \"​$DATE.pdf\"​ was placed in: $PDFPATH"​
 +        fi
 +else
 +        create_user_fname
 +fi
 +
 +# Check write status
 +#
 +if [ ! -d "​$PDFPATH"​ -o ! -w "​$PDFPATH"​ ]; then
 +        logger "​pdf-writer:​ ERROR: directory $PDFPATH not writeable"​
 +        exit 1
 +fi
 +chmod 777 $PDFPATH
 +# Run ps2pdf (ghostscript)
 +if [ $# -eq 6 ]; then
 +        $PS2PDF $6 "​$FILENAME"​ #>& /dev/null
 +else
 +        $PS2PDF - "​$FILENAME"​ #>& /dev/null
 +fi
 +
 +# Chown + set permissions for the user
 +# Note: this will no work if CUPS runs as lp
 +if [ "​$PRTUSER"​ != ""​ ]; then
 +        chmod 664 "​$FILENAME"​
 +        chown www-data:​www-data "​$FILENAME"​
 +fi
 +logger "​pdf-writer:​ exit 0"
 +exit 0
 +
 +#
 +######################### ​ CUPS pdf-writer ends here  ########################​
 +#
 +</​file>​
 +
 +A écrire dans le fichier :
 +  /​usr/​lib/​cups/​backend/​pdf-writer
 +  ​
 +que l'on rend executable :
 +  chmod +x /​usr/​lib/​cups/​backend/​pdf-writer
 +
 +Nous allons aussi installer un driver PDF d'​Adobe : {{:​adist5.zip| Driver Adobe Distiller}}
 +
 +On télécharge le fichier :
 +  wget https://​wiki.ezdev.fr/​lib/​exe/​fetch.php?​media=adist5.zip -O adist5.zip
 +
 +On extrait
 +  unzip adist5.zip
 +  ​
 +On copie le fichier du driver vers le répertoire suivant:
 +  cp ADIST5.PPD /​usr/​share/​ppd/​cupsfilters/​
 +  ​
 +Dès lors nous pouvons créer une imprimante qui utilisera ce backend et ce driver.
 +La création d'une imprimante peut se faire via l'​interface web de cups ou en ajoutant sa définition dans le fichier ​
 +  /​etc/​cups/​printers.conf
 +  ​
 +Ci-dessous la définition d'une imprimante (à écrire dans /​etc/​cups/​printers.conf):​
 +<​code>​
 +<Printer EzGED>
 +UUID urn:​uuid:​8df712d7-9396-3700-7d21-6b7999f2de89
 +Info EzGED
 +Location
 +MakeModel Acrobat Distiller 3011.104
 +DeviceURI pdf-writer:/​ezged-pdf/​
 +State Idle
 +StateTime 1476371738
 +ConfigTime 1476371730
 +Type 8433740
 +Accepting Yes
 +Shared Yes
 +JobSheets none none
 +QuotaPeriod 0
 +PageLimit 0
 +KLimit 0
 +OpPolicy default
 +ErrorPolicy retry-job
 +</​Printer>​
 +</​code>​
 +
 +Les parties les plus importantes que vous êtes libre de modifier (et que vous devrez modifier si vous souhaitez copier cette déclaration pour de nouvelles imprimantes):​
 +  * **<​Printer EzGED>** Ici notre imprimante s'​appelle EzGED.
 +  * **MakeModel Acrobat Distiller 3011.104** Indique le driver à utiliser.
 +  * **DeviceURI pdf-writer:/​ezged-pdf/​** Indique le backend utilisé, ici //​pdf-writer//​ et surtout le répertoire vers lequel les impressions vont être écrites, ici ///​ezged-pdf///​
 +
 +Le répertoire /ezged-pdf/ doit avoir les droits suivants :
 +  drwxrwxrwx ​  2 www-data www-data ​ 4096 oct.  14 09:19 ezged-pdf
 +  ​
 +Nous allons par commodité créer un lien symbolique sur ce répertoire dans /​var/​spool/​ezged/​instance/​ps2pdf/​wait
 +  ln -s /ezged-pdf/ /​var/​spool/​ezged/​instance/​ps2pdf/​wait/​ezged-pdf
 +  ​
 +Et c'est donc sur ce répertoire /​var/​spool/​ezged/​instance/​ps2pdf/​wait/​ezged-pdf que vous ferez pointer votre lanceur COLD.
 +
 +  ​
 +/!\ La configuration de base de AppArmor (https://​guide.ubuntu-fr.org/​server/​apparmor.html) va certainement contraindre cups en terme de droits d'​écritures. La configuration de apparmor n'​entre pas dans le cadre de cette documentation. ​
 +
 +Vous pouvez désactiver apparmor de la manière suivante (Il est toutefois vivement recommandé de configurer le profil de cups dans apparmor)
 +
 +<​code>​
 +service apparmor stop
 +update-rc.d -f apparmor remove
 +</​code> ​
 +Il faudra rebooter la machine.
 +
 +
 ====== Liens utiles ====== ====== Liens utiles ======
  
Ligne 8: Ligne 210:
  
 https://​wiki.debian.org/​PrintQueuesCUPS#​The_device-uri https://​wiki.debian.org/​PrintQueuesCUPS#​The_device-uri
 +
printing/linux/cups.1505223340.txt.gz · Dernière modification: 2023/03/17 09:56 (modification externe)