[GUIDA] Stampante laser Brother su Linux

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
brg
Linux 3.x
Linux 3.x
Messaggi: 580
Iscritto il: sab 12 mar 2011, 14:20
Slackware: 15.0
Kernel: 5.15.117
Desktop: KDE5
Località: Montecatini
Contatta:

[GUIDA] Stampante laser Brother su Linux

Messaggio da brg »

Da un po' di tempo avevo idea di comprare una stampante laser per certi progetti e per sfizio personale, così, vista la stampante HL-1110 della Brother a buon prezzo, ne ho acquistata una. La casa giapponese fornisce i suoi driver per Linux, cosa che ha contribuito a farmi decidere per quel modello, ma l'installazione è stata un po' più laboriosa del previsto e per questo ho deciso di riportare qui la mia esperienza, che magari può risultare utile a qualche altro visitatore del forum.

I driver forniti dalla Brother sono in due pacchetti (deb o rpm): uno con il driver per il sistema di stampa LPD (il vecchio Line Printer Daemon) e l'altro con un wrapper per CUPS. Fin qui niente di strano, se non che il mio server di stampa è un OrangePi Lite con processore ARM ed i pacchetti sono compilati per Intel 386. Questa è stata una grossa svista da parte mia ed ovviamente, installati i pacchetti sull'OrangePi, la stampante non funzionava :(

Prima ho dovuto sistemare il wrapper per CUPS, cosa abbastanza semplice visto che la Brother ha rilasciato i codici sorgenti con licenza GPL. Quindi ho compilato l'eseguibile brcupsconfig e l'ho sostituito a quello installato dal pacchetto. Rimaneva da sistemare l'altro eseguibile, cioè il filtro usato dal driver di LPD. Per quello ahimé, non ci sono i codici sorgenti ufficiali, ma un tizio lo ha ricreato ed ha messo il suo codice su GitHub. Compilato e copiato anche quello, ho riscritto la configurazione della stampante nel file /var/run/cups/printcap, che dovrebbe essere fatta in automatico all'installazione del pacchetto deb, ma che non era andata a buon fine.

Fatto tutto questo, la stampante ha preso magicamente a funzionare :D

Quindi per ricapitolare, la Brother fornisce due pacchetti per far funzionare la stampante con LPD e CUPS. In questi pacchetti oltre al file PPD (Postscript Printer Description) ed ai file di informazioni per LPD, ci sono vari script BASH ed un paio di eseguibili per Intel 386. Quindi per installare il tutto su ARM (ma anche su x86-64 sarebbe uguale) ho fatto così:
  • ho installato i file del pacchetto hl1110lpr, contenente i file per la stampa con LPD
  • ho installato i file del pacchetto hl1110cupswrapper, contenente i file di configurazione per CUPS e l'interfaccia con LPD
  • ho compilato dai sorgenti forniti dalla Brother l'eseguibile brcupsconfig per configurare la stampante con CUPS
  • ho compilato dai sorgenti trovati su GitHub il filtro per LPD rawtobr3, che converte il PostScript in una immagine
  • ho riscritto la configurazione in /var/run/cups/printcap, cosa che può essere fatta in automatico lanciando lo script di configurazione /opt/brother/Printers/HL1110/inf/setupPrintcap
  • ho creato uno script BASH per sostituire l'eseguibile /opt/brother/Printers/HL1110/lpd/brprintconflsr3 che serve a cambiare la configurazione della stampante (vedi sotto)
Poi ho scoperto che esiste pure un progetto open source chiamato brlaser, che fornisce un driver CUPS per le stampanti Brother. Per ora non l'ho provato, ma quando lo farò scriverò qui un confronto tra i due.

N.B. in grassetto gli aggiornamenti, qui sotto gli allegati

/opt/brother/Printers/HL1110/lpd/brprintconflsr3

Codice: Seleziona tutto

#!/bin/bash
#
# Brother Printer configuration editor
# Copyright (C) 2020 Stefano Guidoni

# 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
#

BASEDIR=`dirname $0`
RCFILE="$BRPRINTERRCFILE"
FUNCFILE=""
OPTION="none"
ARGARR=(-res -ps -dx -dxt -pt -md -cp -sp -ts)
OPTARR=(Resolution PaperSource Duplex DuplexType PaperType Media Copies Sleep TonerSaveMode)
OUTPUTRC=""

# Check the number of parameters
# we need four
if [ "$#" -ne 4 ]; then
    echo "Illegal number of parameters, must be four"
    exit
fi

# Check the first argument (printer name)
if [ $1 = "-P" ]; then
  if [ "$BRPRINTERRCFILE" = '' ]; then
    RCFILE="${BASEDIR}/../inf/br${2}rc"
  fi
  FUNCFILE="${BASEDIR}/../inf/br${2}func"
else
  echo "The first argument must be a printer name, e.g. -P HL1110"
  exit
fi

# Check if configuration file exists
if [ ! -e "$RCFILE" ]; then
  echo "Configuration file $RCFILE not found"
  exit
fi 

# Check if function file exists
if [ ! -e "$FUNCFILE" ]; then
  echo "Function file $FUNCFILE not found"
  exit
fi 

# Find the option to set
for ((i=0;i<${#ARGARR[*]};i++)); do
  if [ $3 = ${ARGARR[$i]} ]; then
    OPTIONLIST=`cat $FUNCFILE | \
                sed -n '/\[SelectionItem\]/,$p' | \
                sed 'y/{}/,,/;s/ //g' | \
                grep ${OPTARR[$i]}=`
    # Check if the value is valid for the selected option
    if [[ "$OPTIONLIST" =~ ",${4}," ]]; then
      OPTION="${OPTARR[$i]}="
    elif [[ $4 =~ ^[0-9]+$ ]] && [[ $OPTIONLIST =~ \"[0-9]*-[0-9]*\" ]]; then
      RANGE=$(seq -s, `echo $OPTIONLIST | sed 's/.*"\([0-9]*\)-\([0-9]*\)".*/\1 \2/'`)
      if [[ ",${RANGE}," =~ ",${4}," ]]; then
        OPTION="${OPTARR[$i]}="
      fi
    fi
  fi
done

# If none found, exit
if [ $OPTION = 'none' ]; then
  echo "Invalid option $3 $4"
  exit
fi

# Print out the new configuration file
while read LINE; do
  if [[ $LINE =~ $OPTION ]]; then
    OUTPUTRC="${OUTPUTRC}${OPTION}${4}\n"
  else
    OUTPUTRC="${OUTPUTRC}${LINE}\n"
  fi
done < $RCFILE 

printf $OUTPUTRC > $RCFILE

exit 0
Ultima modifica di brg il lun 18 mag 2020, 9:57, modificato 2 volte in totale.

idefix
Linux 2.x
Linux 2.x
Messaggi: 238
Iscritto il: gio 19 giu 2008, 1:48
Nome Cognome: stefano
Slackware: slack64-15.0
Kernel: 5.16.10
Desktop: tde 14.0.11

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da idefix »

caspita, un lavorone.

ho dato un occhio a briaser perche farebbe comodo
ad un amico con slack64. gli ho fatto il pacchetto
e domani mi dice come funziona. poi ti faccio sapere.

grazie.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da joe »

Anni fa, quando avevo installato l'ultima stabile slack-14.2 mi ero dedicato ad uno slackbuild per installare i driver brother della mia brother_HL-2035, laser mono...

Per quel modello brother rilasciava, e penso anche adesso rilasci solo driver a 32bit (almeno per la parte LPD, che però è comunque necessaria).
Così avevo dovuto, installare l'ambiente multilib ecc ecc... Praticamente non mi serve ad altro.

Ai tempi mi ero chiesto anche io come si sarebbe potuto fare in caso di architettura ARM, ma era rimasta una domanda buttata lì.
Metto qui il link a quella discussione su LQ, c'è anche un tarball con slackbuild per pacchettizzare i driver del mio modello, che comunque potrebbe servire come spunto anche per altri modelli:
https://www.linuxquestions.org/question ... ost5626438

Mi pare di capire che la chiave per far funzionare la stampante senza il driver a 32bit, sia il tool "rawtobr3".
Quello che non ho ben capito è come funzioni quel tool e se faccia funzionare la stampante come effettivamente dovrebbe, nello stesso modo del driver intendo. Oppure se la piloti in modo "alternativo" diciamo.

Avatar utente
brg
Linux 3.x
Linux 3.x
Messaggi: 580
Iscritto il: sab 12 mar 2011, 14:20
Slackware: 15.0
Kernel: 5.15.117
Desktop: KDE5
Località: Montecatini
Contatta:

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da brg »

idefix ha scritto:
mer 13 mag 2020, 1:45
caspita, un lavorone.

ho dato un occhio a briaser perche farebbe comodo
ad un amico con slack64. gli ho fatto il pacchetto
e domani mi dice come funziona. poi ti faccio sapere.

grazie.
Ti dirò, alla fine il grosso è stato raccogliere le informazioni e rimetterle insieme per far funzionare il tutto. Il risultato finale è stato piuttosto soddisfacente e relativamente semplice; per questo poi non ho provato brlaser, anche se l'ho installato.
joe ha scritto:
mer 13 mag 2020, 11:51
Mi pare di capire che la chiave per far funzionare la stampante senza il driver a 32bit, sia il tool "rawtobr3".
Quello che non ho ben capito è come funzioni quel tool e se faccia funzionare la stampante come effettivamente dovrebbe, nello stesso modo del driver intendo. Oppure se la piloti in modo "alternativo" diciamo.
Per la precisione rawtobr3 è il cuore del driver di Brother, quel tizio ha semplicemente creato un sostituto per quello ufficiale, probabilmente facendo un po' di ingegneria inversa.
Praticamente il driver LPD funziona così:

1. Nella configurazione della stampante nel file /var/run/cups/printcap, che ha un symlink per compatibilità in /etc/printcap, c'è indicato il "filtro" da usare per inviare i dati alla stampante. Il filtro non è altro che un programma che converte un documento in istruzioni per la stampante. Le istruzioni vengono inviate da LPD, quindi in realtà il filtro è solo un programma che legge lo STDIN e scrive sullo STDOUT.

Codice: Seleziona tutto

cat /var/run/cups/printcap

HL1110|HL1110:mx=0:sd=/var/spool/lpd/HL1110:sh:lp=/dev/usb/lp0:if=/opt/brother/Printers/HL1110/lpd/filter_HL1110:
Questa riga si può generare automaticamente lanciando lo script /opt/brother/Printers/HL1110/inf/setupPrintcap fornito con il driver. È piuttosto semplice: crea una stampante connessa al dispositivo /dev/usb/lp0 che usa come filtro il file /opt/brother/Printers/HL1110/lpd/filter_HL1110.

2. Quando si vuole stampare un documento con LPD, ad esempio lanciando il comando lpr, il demone di stampa invia il documento al filtro perché questo lo converta in istruzioni per la stampante. Nel caso della stampante Brother il documento viene inviato al filtro /opt/brother/Printers/HL1110/lpd/filter_HL1110, che è uno script in BASH con licenza GPL. Questo script determina il tipo di documento: se è un Postscript lo converte in formato RAW usando pstops e lo passa a /opt/brother/Printers/HL1110/lpd/rawtobr3, altrimenti usa pdf2ps per convertirlo prima in formato Postscript, poi pstops per il RAW e poi lo passa a /opt/brother/Printers/HL1110/lpd/rawtobr3. Ad esempio la parte di codice per i PDF, in cui $BRCONV è il percorso di rawtobr3 e $PSCONV di pstops:

Codice: Seleziona tutto

 "PDF")
   PS_TEMP=`mktemp /tmp/br_ps.XXXXXX`
   pdf2ps $INPUT_TEMP $PS_TEMP
   eval cat $PS_TEMP | $PSCONV $PSCONV_OP | $BRCONV $BRCONV_OP
   RET=$?
   rm -f $PS_TEMP
   ;;
3. Qui arriviamo alla parte problematica, perché l'ultimo passaggio, cioè la conversione da RAW ad istruzioni per la stampante, è compiuto dall'eseguibile rawtobr3. Il file è un eseguibile compilato solo per i386, tuttavia su GitHub ne esiste una versione open source e, da quel che ho visto, fa delle operazioni analoghe a quelle effettuate dall'altro driver brlaser. Da quel che ho visto funziona egregiamente.

In realtà, facendo delle prove, ho visto che rawtobr3 sembra scrivere del codice PCL, che è il linguaggio per stampanti di HP, ampiamente supportato da Linux. Credo che l'unica particolarità sia il fatto che effettua delle operazioni di compressione specifiche delle stampanti Brother per risparmiare sui tempi di trasmissione e forse sull'impiego di RAM della stampante. Tuttavia ho idea che la stampante, in realtà, possa funzionare correttamente usando un comune filtro PCL, invece di quello fornito. Questa è una prova che ho intenzione di fare più avanti.

Codice: Seleziona tutto

cat 2.Aguado\ -\ Valzer.ps  | /opt/brother/Printers/HL1110/lpd/filter_HL1110 
12345X@PJL
@PJL JOB NAME="Brother HL-XXX"
@PJL SET RESOLUTION = 600
@PJL SET HQMMODE = ON
@PJL SET ECONOMODE = OFF
@PJL SET SOURCETRAY = TRAY1
@PJL SET MEDIATYPE = REGULAR
@PJL SET ORIENTATION = PORTRAIT
@PJL SET PAGEPROTECT = AUTO
@PJL ENTER LANGUAGE = PCL
P.S.: ho confrontato il codice generato per un dato documento dal rawtobr3 fornito da Brother con quello trovato su Github: sono identici, sia a 600dpi che a 1200dpi. Non ho dubbi che i due filtri si equivalgano in tutto e per tutto.

idefix
Linux 2.x
Linux 2.x
Messaggi: 238
Iscritto il: gio 19 giu 2008, 1:48
Nome Cognome: stefano
Slackware: slack64-15.0
Kernel: 5.16.10
Desktop: tde 14.0.11

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da idefix »

il mio amico conferma che il pacchetto
briaser funziona ed è soddisfatto.
quindi anche io.

Avatar utente
brg
Linux 3.x
Linux 3.x
Messaggi: 580
Iscritto il: sab 12 mar 2011, 14:20
Slackware: 15.0
Kernel: 5.15.117
Desktop: KDE5
Località: Montecatini
Contatta:

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da brg »

idefix ha scritto:
mer 13 mag 2020, 18:00
il mio amico conferma che il pacchetto
briaser funziona ed è soddisfatto.
quindi anche io.
Bene :thumbright:

Intanto ho scoperto il "mistero" di questi driver open source: sul sito della Brother c'è il manuale che documenta completamente il linguaggio delle stampanti, indicando pure le caratteristiche specifiche di ciascuna stampante.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da joe »

Metteresti il link?
Giusto per dare un'occhiata, ovviamente non ci capirei granché :D

Avatar utente
brg
Linux 3.x
Linux 3.x
Messaggi: 580
Iscritto il: sab 12 mar 2011, 14:20
Slackware: 15.0
Kernel: 5.15.117
Desktop: KDE5
Località: Montecatini
Contatta:

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da brg »

Occhio, documentone di dimensioni immense in arrivo!

Technical Reference Guide - Brother :shock:

Nel frattempo ho creato uno script in BASH per sostituire il configuratore per LPD del driver ufficiale, poi lo aggiungo alla guida del messaggio di apertura.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da joe »

Grazie! :thumbright:

Avatar utente
brg
Linux 3.x
Linux 3.x
Messaggi: 580
Iscritto il: sab 12 mar 2011, 14:20
Slackware: 15.0
Kernel: 5.15.117
Desktop: KDE5
Località: Montecatini
Contatta:

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da brg »

Prego.

Ora ho aggiunto il mio configuratore alla guida. Sostituisce un eseguibile senza codice sorgente fornito dalla Brother, che serve ad impostare alcune opzioni della stampante (ad. esempio la modalità di risparmio di inchiostro o il tempo di inattività prima dello spegnimento automatico).

daniele
Linux 0.x
Linux 0.x
Messaggi: 2
Iscritto il: mar 26 mag 2020, 20:32
Slackware: 14.2 current
Kernel: 5.4.35
Desktop: kde 5.18.4

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da daniele »

Sera a tutti. Vorrei sapere, perché la mia multifunzione non funziona dopo aver installato i driver direttamente dal sito del produttore. Il modello in questione i una brother MFC-L2700DW series. grazie per la risposta.
Se qualcuno sa del canale irc di #slacky mi comunichi il server grazie.

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da aschenaz »

Guarda se possono esserti utili queste indicazioni per la 2710:
http://www.9mal6.de/home/slackware/brot ... stallation

cefer
Linux 0.x
Linux 0.x
Messaggi: 2
Iscritto il: mar 29 set 2020, 15:44
Nome Cognome: Cesar
Slackware: 14
Kernel: 4
Desktop: Openbox
Distribuzione: Salix

per favore aiuto

Messaggio da cefer »

Per qualcuno che non comprende così tanti dettagli tecnici, uno di voi potrebbe riassumere passo dopo passo come far funzionare l'HL11 in slackware? Grazie

cefer
Linux 0.x
Linux 0.x
Messaggi: 2
Iscritto il: mar 29 set 2020, 15:44
Nome Cognome: Cesar
Slackware: 14
Kernel: 4
Desktop: Openbox
Distribuzione: Salix

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da cefer »

Nel frattempo ho indagato più a fondo, ho capito ed ho potuto installare la stampante Brother HL11 in salix.
Se mi permetti, lo spiegherò in un altro modo in modo che sia comprensibile (con tutto il rispetto) per gli "sciocchi" come me

Il driver Brother (più specificamente il programma rawtobr3 che si trova in / opt / brother / Printers / HL1110 / lpd /) funziona a 32 bit. Pertanto, se abbiamo un Linux a 64 bit, è necessaria l'installazione della compatibilità a 32 bit.
Questo è ciò che fa uno degli script (linux-brprinter-installer-2.0.0-1) fornito nel pacchetto scaricato da brother. Lo script controlla se Linux è a 64 bit e, in questo caso, se è installato il supporto a 32 bit. In caso contrario, installalo. Questo script è inteso per sistemi basati su deb o rpm, non per salix

Una soluzione per lo slackware a 64 bit (e per qualsiasi Linux a 64 bit senza supporto a 32 bit) è usare un rawtobr3 compilato a 64 bit.
Poiché Brother non lo fornisce, possiamo scaricarne uno simile da GitHub e compilarlo da soli.
Con questo, la stampante funzionerà.

1) Scarica i driver in formato deb o rmp

2) Per salix, convertire in formato tgz o txz con rpm2tgz

sudo deb2tgz hl1110cupswrapper-3.0.1-1a.i386.deb
sudo deb2tgz hl1110lpr-3.0.1-1a.i386.deb

3) installa

sudo installpkg hl1110cupswrapper-3.0.1-i386-1.tgz
sudo installpkg hl1110lpr-3.0.1-i386-1.tgz

installpkg è per salix. Per i sistemi basati su rpm o deb utilizzare i comandi appropriati.

4) Scarica il programma rawtobr3 da https://github.com/k1-801/rawtobr3

5) Compila con: g++ * -o rawtobr3 [ENTER]

6) Copia (sovrascrivi) rawtobr3 in / opt / brother / Printers / HL1110 / lpd /

7) Installare la stampante con
http: // localhost: 631 /
o con
system-config-printer [INVIO]

Avatar utente
brg
Linux 3.x
Linux 3.x
Messaggi: 580
Iscritto il: sab 12 mar 2011, 14:20
Slackware: 15.0
Kernel: 5.15.117
Desktop: KDE5
Località: Montecatini
Contatta:

Re: [GUIDA] Stampante laser Brother su Linux

Messaggio da brg »

Corretto, ma ti manca una cosa.

6 bis) sovrascrivi il file eseguibile (32 bit) brprintconflsr3 in / opt / brother / Printers / HL1110 / lpd / con lo script che ho allegato al primo messaggio

Il file brprintconflsr3 serve a passare le impostazioni di CUPS a lpd, senza quel file la stampante funziona solo con le impostazioni predefinite, delle quali ti può interessare solo la risoluzione in realtà.

Rispondi