# [cups] foomatic/gnutenprint : brother HL-3040CN (Résolu)

## Chr0nos

Bonjours, j'ai actuelement un souci lors de l'installation de mon imprimante laser reseau sous gentoo: 

cups la reconais bien sur le reseau en lpd mais voila: pas de driver !

y'a pour la 2700 , pour la 3070 mais rien pour la 3040 (jai bien tenté avec ceux de la 3070 : ca ne marche pas)

je suis allé sur le site de brother: une uzine a gaz, on nous refile des .rmp / .deb moisis (plutot qu'un bon vieu .ppd hein)

du coup je me demandais s'il existait une solution pour faire marcher mon imprimante sous gentoo ou si je dois d'ors et deja renvoyer mon imprimante faute de drivers décents ??

d'avance merci  :Smile: Last edited by Chr0nos on Sun Apr 01, 2012 8:46 pm; edited 1 time in total

----------

## boozo

Je penses que tu as déjà cherché mais sait-on jamais çà : ça n'aide pas   :Sad: 

Btw, tu as toujours l'option rpm2tar (portage inside) pour transformer ce qui est fourni en qqch d'exploitable pour nous

Edit: Une confirmation peut-être et sans doutes quelques bidouillages en prévision si jamais ^^

----------

## Chr0nos

alors la, javoue ne jamais avoir utilisé rpm2tar, j'ai maintenant:

hl3040cncupswrapper-1.1.2-1.i386.tar

hl3040cnlpr-1.1.2-1.i386.tar

mais je ne sais pas du tout comment les installer du coup :s

----------

## boozo

Ben en manuel... tu "détarres" dans le /usr/local/path que tu veux et tu regardes ce qu'il y a dedans   :Wink: 

Je pense que tu dois y retrouver ton ppd qqpart ainis qu'un readme d'install manuel pour détails et après filer le chemin du fichier à cups comme indiqué dans le(s) thread cités

----------

## Chr0nos

malheureusement je ne trouve dans aucun des fichier le fichiers qu'il me manque:

 *Quote:*   

> 
> 
> E [28/Mar/2012:21:20:16 +0200] Brother_HL-3040CN_series: File "/usr/libexec/cups/filter/brlpdwrapperhl3040cn" not available: No such file or directory
> 
> E [28/Mar/2012:21:20:21 +0200] Brother_HL-3040CN_series: File "/usr/libexec/cups/filter/brlpdwrapperhl3040cn" not available: No such file or directory
> ...

 

impossible de metre la main dessus :s (mais pourquoi brother n'a pas fait un ppd "propre" ? :s )

apparement il faut forcement passer par un wrapper la

edit:

maintenant j'ai:

 *Quote:*   

> E [28/Mar/2012:22:09:43 +0200] Returning HTTP Forbidden for CUPS-Get-Devices (no URI) from localhost
> 
> E [28/Mar/2012:22:09:43 +0200] Returning HTTP Forbidden for CUPS-Get-Devices (no URI) from localhost
> 
> E [28/Mar/2012:22:09:43 +0200] Returning HTTP Forbidden for CUPS-Add-Modify-Printer (ipp://localhost:631/printers/HL3040CN) from localhost
> ...

 

apres avoir fait: cp cupswrapperhl3040cn /usr/libexec/cups/filter/brlpdwrapperhl3040cn

j'ai tenté le tout pour le tout vu que ce fichier ne semble exister nul part sur le net...

----------

## boozo

'lo

désolé suis en déplacement je n'avais pas de gentoo sous la main hier soir.

Je viens de regarder et si tu détarres les archives à la racine cela me semble bon a priori :

```
# tar xvf hl3040cncupswrapper-1.1.2-1.i386.tar

./

./opt/

./opt/brother/

./opt/brother/Printers/

./opt/brother/Printers/hl3040cn/

./opt/brother/Printers/hl3040cn/cupswrapper/

./opt/brother/Printers/hl3040cn/cupswrapper/cupswrapperhl3040cn

./opt/brother/Printers/hl3040cn/cupswrapper/brother_hl3040cn_printer_en.ppd

./opt/brother/Printers/hl3040cn/cupswrapper/brcupsconfpt1

#

# tar xvf hl3040cnlpr-1.1.2-1.i386.tar 

./

./usr/

./usr/bin/

./usr/bin/brprintconf_hl3040cn

./opt/

./opt/brother/

./opt/brother/Printers/

./opt/brother/Printers/hl3040cn/

./opt/brother/Printers/hl3040cn/lpd/

./opt/brother/Printers/hl3040cn/lpd/psconvertij2

./opt/brother/Printers/hl3040cn/lpd/filterhl3040cn

./opt/brother/Printers/hl3040cn/lpd/brhl3040cnfilter

./opt/brother/Printers/hl3040cn/inf/

./opt/brother/Printers/hl3040cn/inf/setupPrintcapij

./opt/brother/Printers/hl3040cn/inf/paperinfij2

./opt/brother/Printers/hl3040cn/inf/lut/

./opt/brother/Printers/hl3040cn/inf/lut/capt-y_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/capt-y-TS_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/capt-m_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/capt-m-TS_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/capt-k_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/capt-k-TS_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/capt-c_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/capt-c-TS_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-y_cache08b.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-y_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-y-TS_cache08b.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-y-TS_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-m_cache08b.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-m_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-m-TS_cache08b.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-m-TS_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-k_cache08b.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-k_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-k-TS_cache08b.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-k-TS_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-c_cache08b.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-c_cache08.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-c-TS_cache08b.bin

./opt/brother/Printers/hl3040cn/inf/lut/0600-c-TS_cache08.bin

./opt/brother/Printers/hl3040cn/inf/brhl3040cnrc

./opt/brother/Printers/hl3040cn/inf/brhl3040cnfunc

./opt/brother/Printers/hl3040cn/inf/brPrintListij2

#

```

Dès lors c'est le point 3°) et suivant du post où il reste à filer le fichier à cups ( /opt/brother/Printers/hl3040cn/cupswrapper/brother_hl3040cn_printer_en.ppd )

 *Quote:*   

> Now here is the key. Once you've installed the packages, no print driver for the 3040CN will show up in the menu!!!
> 
> Instead of picking a printer from the list, select Provide a PPD File.
> 
> The printer package you installed from Brother will put a ppd file in either /usr/share/cups/model/brhl3040cn.ppd and/or /usr/share/ppd/brhl3040cn.ppd. Enter this into the install dialogue.

 

Marche pas donc ?   :Sad: 

Edit: Ne serait-ce pas un pb de protocole sinon chemin de la queue inadaptée voire dns/adresse ip erronée i.e. essayer plutôt en spécifiant l'adresse au lieu du nom etc

SInon voir avec lpd pour identifier qqch qui n'irait pas...

Edit 2: J'y pense... en partant des sources du drivers est-ce-mieux ?

J'ai regardé vite fait le script cupswrapperhl3040cn pour voir ce qu'il y a dedans et je ne vois pas ce qu'il fait de plus complexe au final mais je crois qu'il manque bien ce filtre temporaire en effet d'après ton message d'erreur

```
#

#   create temporary CUPS Filter

#

cat <<!ENDOFWFILTER! >$tmp_filter

#! /bin/sh

#

# Copyright (C) 2005-2011 Brother. Industries, Ltd.

#                                    Ver1.10

# This program is free software; you can redistribute it and/or modify it

# under the terms of the GNU General Public License as published by the Free

# Software Foundation; either version 2 of the License, or (at your option)

# any later version.

#

# This program is distributed in the hope that it will be useful, but WITHOUT

# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or

# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for

# more details.

#

# You should have received a copy of the GNU General Public License along with

# this program; if not, write to the Free Software Foundation, Inc., 59 Temple

# Place, Suite 330, Boston, MA  02111-1307  USA

#

LOGFILE="/dev/null"

LOGLEVEL="1"

LOGCLEVEL="7"

DEBUG=0

NUPENABLE=1

LOG_LATESTONLY=1

errorcode=0

if [ \$DEBUG != 0 ]; then

    LOGFILE=/tmp/br_cupsfilter_debug_log

fi

PPDC=\`printenv | grep "PPD="\`

PPDC=\`echo \$PPDC | sed -e 's/PPD=//'\`

if [ "\$PPDC" = "" ]; then

    PPDC="/usr/share/cups/model/Brother/brother_${printer_model}_printer_en.ppd"

fi

if [ \$LOGFILE != "/dev/null" ]; then

  if [ \$LOG_LATESTONLY == "1" ]; then

    rm -f \$LOGFILE

    date                                                           >\$LOGFILE

  else

    if [ -e \$LOGFILE ]; then

       date                                                        >>\$LOGFILE

    else

       date                                                        >\$LOGFILE

    fi

  fi

    echo "arg0 = \$0"                                           >>\$LOGFILE

    echo "arg1 = \$1"                                           >>\$LOGFILE

    echo "arg2 = \$2"                                           >>\$LOGFILE

    echo "arg3 = \$3"                                           >>\$LOGFILE

    echo "arg4 = \$4"                                           >>\$LOGFILE

    echo "arg5 = \$5"                                           >>\$LOGFILE

    echo "arg6 = \$6"                                           >>\$LOGFILE

    echo "PPD  = \$PPD"                                         >>\$LOGFILE

fi

INPUT_TEMP_PS=\`mktemp /tmp/br_input_ps.XXXXXX\`

nup="cat"

if [ "`echo \$5 | grep 'Nup='`" != '' ] && [ \$NUPENABLE != 0 ]; then

   if   [ "`echo \$5 | grep 'Nup=64'`" != '' ]; then

      nup="psnup -64"

   elif [ "`echo \$5 | grep 'Nup=32'`" != '' ]; then

      nup="psnup -32"

   elif [ "`echo \$5 | grep 'Nup=25'`" != '' ]; then

      nup="psnup -25"

   elif [ "`echo \$5 | grep 'Nup=16'`" != '' ]; then

      nup="psnup -16"

   elif [ "`echo \$5 | grep 'Nup=8'`" != '' ]; then

      nup="psnup -8"

   elif [ "`echo \$5 | grep 'Nup=6'`" != '' ]; then

      nup="psnup -6"

   elif [ "`echo \$5 | grep 'Nup=4'`" != '' ]; then

      nup="psnup -4"

   elif [ "`echo \$5 | grep 'Nup=2'`" != '' ]; then

      nup="psnup -2"

   elif [ "`echo \$5 | grep 'Nup=1'`" != '' ]; then

      nup="cat"

   fi

   echo   "NUP=\$nup"                                      >>\$LOGFILE

   if [ -e /usr/bin/psnup ]; then

       if [ \$# -ge 7 ]; then

          cat \$6  | \$nup > \$INPUT_TEMP_PS

       else

          cat       | \$nup > \$INPUT_TEMP_PS

       fi

   else

       if [ \$# -ge 7 ]; then

          cp \$6  \$INPUT_TEMP_PS

       else

          cat    > \$INPUT_TEMP_PS

       fi

   fi

else

   if [ \$# -ge 7 ]; then

      cp \$6  \$INPUT_TEMP_PS

   else

      cat    > \$INPUT_TEMP_PS

   fi

fi

if [ -e "/opt/brother/${device_model}/${printer_model}/lpd/filter${printer_model}" ]; then

       :

else

    echo "ERROR: /opt/brother/${device_model}/${printer_model}/lpd/filter${printer_model} does not exist"   >>\$LOGFILE

    errorcode=30

    exit

fi

CUPSOPTION=\`echo "\$5 Copies=\$4" | sed -e 's/BrMirror=OFF/MirrorPrint=OFF/' -e 's/BrMirror=ON/MirrorPrint=ON/' -e 's/BrChain/Chain/' -e 's/BrBrightness/Brightness/' -e 's/BrContrast/Contrast/' -e 's/BrHalf

Cut/HalfCut/' -e 's/BrAutoTapeCut/AutoCut/' -e 's/BrHalftonePattern/Halftone/' -e 's/Binary/Binary/' -e 's/Dither/Dither/' -e 's/ErrorDiffusion/ErrorDiffusion/' -e 's/BrSheets/Sheets/' -e 's/multiple-documen

t-handling/Collate/' -e 's/separate-documents-collated-copies/ON/' -e 's/separate-documents-uncollated-copies/OFF/'\`

if [ -e "/opt/brother/${device_model}/${printer_model}/cupswrapper/brcupsconfpt1" ]; then

  if [ \$DEBUG = 0 ]; then

     /opt/brother/${device_model}/${printer_model}/cupswrapper/brcupsconfpt1  ${printer_name}  \$PPDC 0 "\$CUPSOPTION" "${printer_model}">> /dev/null

  else

     /opt/brother/${device_model}/${printer_model}/cupswrapper/brcupsconfpt1  ${printer_name}  \$PPDC \$LOGCLEVEL "\$CUPSOPTION" "${printer_model}">>\$LOGFILE

  fi

fi

if [ \$DEBUG -lt 10 ]; then

    cat    \$INPUT_TEMP_PS | /opt/brother/${device_model}/${printer_model}/lpd/filter${printer_model} "\$\$" "CUPS" "USB"

    if [ \$LOGLEVEL -gt 2 ];  then

      if [ \$LOGFILE != "/dev/null" ]; then

        echo ""                                                >>\$LOGFILE

        echo "    ------PostScript Data-------"                >>\$LOGFILE

        cat    \$INPUT_TEMP_PS                                  >>\$LOGFILE

      fi

    fi

fi

rm -f  \$INPUT_TEMP_PS

exit $errorcode

!ENDOFWFILTER!

```

De toute façon avec plusieurs exemples qui indiquent que l'impression fonctionne au final donc y'a pas de raison de ne pas y arriver non plus   :Wink: 

----------

## Chr0nos

donc la je viens de suivre tes conseils:

 *Quote:*   

> StarK / # cd /dev/shm/
> 
> StarK shm # cd tmp/
> 
> StarK tmp # ls
> ...

 

jusque la tout semble ok , dans cups je vois bien un driver pour mon imprimante (comme avant) (a vrais dire j'en vois meme 3)

pour le moment toujours pas moyen d'imprimer

lpd il es dans quel paquet ? car la je ne semble pas avoir de commande de ce nom, cups me detecte bien le chemin: lpd://BRN001BA9A66003/BINARY_P1

(jai aussi les sources du driver mais elles ne m'ont pas été d'une grande aide pour le moment)

----------

## boozo

Je n'ai pas plus d'idée pour l'instant - c'est toujours difficile sans le matériel sous la main - mais j'essaierai néanmoins de modifier l'imprimante dans ta conf via cups en spécifiant son Ip au lieu du nom i.e. socket://109.168.x.y:9100 ou lpd://192.168.x.y/binary_p1

Quelquefois c'est sensible en résolution ces bestioles  :Rolling Eyes: 

----------

## Chr0nos

hum j'ai beau avoir cherché un peu partout sur cups, je ne trouve pas comment forcer l'utilisation de l'ip (mon imprimante ne semble pas dans le fichier de config de cups mais elle est vien visible dans sa config)

coté cups quand je veu modif l'imprimante ca me donne ca:

http://img3.imageshack.us/img3/9876/prob00.jpg

ensuite:

http://img820.imageshack.us/img820/3035/prob01k.jpg

et

http://img805.imageshack.us/img805/7586/prob02.jpg

mais une chose m'intrigue, si c'est autant galere que ca de config cette imprimante sous gentoo, pourquoi n'existe pas d'ebuild pour ca ?

(en tout cas merci pour ton aide ^^)

ps: j'aime bien ta citation de desproges  :Smile: 

----------

## boozo

En fait il faut modifier la connexion courante (cf. 2ème screenshot) et tester alternativement les 2 protocoles en sélectionnant lpd/lpr et http ; après tu pourras modifier l'adresse en lpd://192.168.x.y/binary_p1 ou socket://109.168.x.y:9100 dans l'autre cas

Pour un ebuild ? ben y'en a (ce dernier en date par exemple) mais je pense qu'il n'y a que peu d'utilisateurs à voir les différentes demandes successives par modèles qui ne sont pas suivies, le mainteneur ne doit pas être trop chaud...  :Sad: 

Edit: typos

----------

## Chr0nos

alors j'ai (enfin) réusi a utiliser le ebuild en question, mais voila maintenant c'est presque pire: en effet l'impression ne marche toujours pas mais en prime je n'ai absolument aucune erreur dans les logs

du coup je tente de passer par un outil fournis par brother: http://welcome.solutions.brother.com/bsc/public_s/id/linux/en/faq_prn.html#f00104

(qui semble fait uniquement pour un debian-like youpi...)

les scripts auto de brother m'instalent l'imprimante mais uniquement en usb (et je veu pas!) donc la javoue ne plus  trop savoir quoi faire

heureusement que dans leurs spécifications brother met que l'imprimante est compatible linux  :Very Happy:  haha

en tout cas je trouve le ebuild relativement bien foutu quand meme (et plutot rassurant car je sais que le probleme ne vient plus de mon install mais apparement bel et bien de leurs drivers)

----------

## boozo

Bon donc mes premières propositions (modification de imprimante en fournissant l'IP) ne passent pas non plus... je ne vois pas trop quoi faire d'autre malheureusement, je m'en suis toujours plus ou/moins sorti comme ça par le passé même avec des workgroup plus exotique en support linux (i.e. OKI, Xerox, ...)   :Sad: 

Reste peut-être a tester par les sources directement càd détarer à la racine et exécuter ensuite les différents scripts du tarball pour la configuration (tel que celui cité plus haut)

Concernant l'ebuild, il est tout frais semble-t-il et peux d'utilisateurs doivent s'en servir donc tu peux sans doute apporter tes remarques au bug et te coller en CC - avec un peu de chance une aide de choix par le créateur et/ou le mainteneur pourra t'être apporté rapidement  :Wink: 

En dernier espoir, dans la faq que tu cites il y pourra éventuellement rester cette option d'attente :

 *Quote:*   

> # However generic Postscript/PCL driver can be used for Postscript or PCL compatible products.
> 
> If your product is a Laser product, you will be able to use the Ghostscript hl1250 driver or Ghostscript hl7x0 driver.

 

Edit: Au fait je pense à une chose peut-être mais je pense qu'on le verrait en clair dans les logs enfin sait-on jamais ça ne fait pas de mal de vérifier : ton user est-il bien dans les groupes "lp" voire au besoin dans "lpadmin" ?

(Je dis ça parce que j'ai eu un truc bloquant dans ce goût-là avec lpadmin pour la config du module fax en protocole HP)

----------

## guilc

 *boozo wrote:*   

> If your product is a Laser product, you will be able to use the Ghostscript hl1250

 

Oui mais non, ça c'est celui que j'utilise avec ma Brother HL2150N, c'est un driver N/B, pas couleur  :Smile: 

----------

## boozo

Ah ? bon, savais pas. Et ça marche quand même sur une couleur ces drivers en mode dégradé ? parce que entre imprimer en monochrome ou ne rien imprimer du tout... au moins temporairement...   :Rolling Eyes: 

----------

## guilc

Ca je sais pas, c'est possible, ça reste du PCL. Maintenant je m'avançerais pas trop.

Ceci dit, de toute cette histoire, vu l'expérience que j'ai de ma 2150N, ça me semble étonnant que le driver pour la 3070 ne marche pas. Ce sont 2 modèles proches (elle partagent même jusqu'au toner !), instinctivement je dirais qu'un petit bricolage du PPD (ajustement des marges, etc...) devrait être suffisant.

L'expérience que j'ai (avec la HL 2150N, monochrome) c'est :

- driver générique PCL ok, mais extrêmement lent

- driver hl1250 OK, rapide et tout, modulo hack du PPD pour changer les marges.

J'imagine que pour la 3040 ça devrait être quelque chose de similaire avec le driver de la 3070... Mais bon, j'ai aucune expérience avec ce modèle !

----------

## Chr0nos

alors grande nouvelle: ca marche (enfin)

évidement je vous dis comment je m'y suis pris, j'ai récup l'outil pour debian-like de brother ici: http://www.brother.com/pub/bsc/linux/dlf/linux-brprinter-installer-1.0.4-1.gz

et quand il me demande le model name je tappe: HL-3040CN, il me propose le dirver corespondant, me télécharge deux .deb et commence a faire sa vie,

je suis oui aux deux contras de liscence, me prends pleins d'erreur car il ne trouve pas dpkg (normal)

je vais donc faire un tour dans cups histoire de voir si une nouvelle imprimante n'a pas été ajouté par l'outil: rien

je tente d'imprimer: ca marche (et en couleur s'il vous plait ^^ )

alors voila comment est config l'imprimante:

dans /etc/hosts j'ai mis un:

192.168.0.35 Neliel

coté cups pour la connection a l'imprimante j'ai mis: socket://Neliel:9100

et tout marche  :Smile: 

(j'utilise donc toujours le driver du ebuild)

encore merci à tous pour votre aide \o/

----------

## guilc

Donc en gros ça marche, mais tu sais pas pourquoi   :Laughing: 

----------

## Chr0nos

en gros: c'est absolument ca  :Smile: 

quand la page est sortie j'ai meme dit a haute voie "c'est un miracle" xD

----------

## boozo

Ahann noonn !! C'est moche ! /me déteste quand c'est comme çà - là on passe pour des truffes... on se fout des méandres de win$ et on ressort les incantations et autres sacrifices de chêvres   tssss   :Confused: 

M'enfin je me doute que tu dois être content de pourvoir imprimer correctement malgré tout

"N'en pêche"... c'est moche... :/

----------

## Chr0nos

honetement je reste un peu "sur ma faim" car je ne comprends toujours pas trop pourquoi ca marche mtn, cela dit on pourais aussi decortiquer un peu le truc de brother pour savoir quelle commande a fait la difference  :Smile: 

----------

