niedziela, 28 grudnia 2014

Bezpieczniejsze i przyjaźniejsze sterowniki drukarek Brother

Jest to czystszy sposób na instalację sterowników do drukarek firmy Brother dla systemów 32bit i 64bit (z lub bez multilib).

Poniżej przedstawiam sposób instalacji sterowników do drukarek Brother’a bez zbędnych zamknięto źródłowych programów. Ostatecznie z aplikacji w pakietach dostarczanych przez brother potrzebny jest tylko 1 plik, br<model drukarki>filter, gdzie <model drukarki> jest Twoim modelem drukarki, np. mfcj6510dw.

Przygotowanie

mfcj6510dwcupswrapper-3.0.0-1.i386.deb

Potrzebny jest nam jedynie plik opt/brother/Printers/<model drukarki>/cupswrapper/brother_<model drukarki>_printer_en.ppd (np. brother_mfcj6510dw_printer_en.ppd).

Na początku pliku znajduje sie linijka (gdzie mfcj6510dw jest modelem Twojej drukarki):

*cupsFilter: "application/vnd.cups-postscript 0 brlpdwrappermfcj6510dw"``

Zmieniamy ją na:

*cupsFilter: "application/vnd.cups-postscript 0 /opt/brother/bin/filter_mfcj6510dw"
mfcj6510dwlpr-3.0.0-1.i386.deb

Z opt/brother/Printers/<model drukarki> potrzebne są:

  • lpd/br<model drukarki>filter => przenosimy do /opt/brother/Printers/<model>/filter

  • lpd/psconvertij2 => przenosimy do /opt/nbrother/bin/

  • inf/ - cały katalog z wykluczeniem setupPrintcapij => przenosimy do /opt/brother/Printers/<model>/inf/

Struktura katalogów

/opt/brother
├── bin
│   ├── filter
│   ├── filter_mfcj6510dw -> filter
│   └── psconvertij2
├── lib
│   ├── ld-linux.so.2
│   ├── libc.so.6
│   └── libm.so.6
├── lib32 -> lib
├── opt
│   └── brother -> ..
└── Printers
    └── mfcj6510dw
        ├── filter
        └── inf
            ├── brmfcj6510dwfunc
            ├── brmfcj6510dwrc
            ├── ImagingArea
            ├── lut
            │   ├── BRPRI10IA.BCM
            │   ├── BRPRI10IB.BCM
            │   ├── BRPRI10IC.BCM
            │   ├── BRPRI10ID.BCM
            │   ├── BRPRI10IE.BCM
            │   ├── BRPRI10IF.BCM
            │   ├── BRPRI10IG.BCM
            │   ├── BRPRI10IH.BCM
            │   └── BRPRI10II.BCM
            └── paperinfij2

Instalacja

[x86] Dla systemów 64bit i 32bit [x64] Dla systemów 64bit no-multilib

  • kernel - enable ia32 [x64]

  • sudo [x64]

  • chroot [x64]

  • libs [x64]

  • script [x86] [x64]

kernel - ia32 [x64]

Sterownik od Brother’a jest 32bitowym plikiem wykonywalnym więc musimy właczyć w kernelu obsługę takich plików

Executable file formats / Emulations, IA32 Emulation
sudo [x64]

Instalacja Sudo jest wymagana do uruchamiania skryptu w chroot. Próbowałem zrobić to poprzez program z setuid lecz CUPS wymaga odpowiednich uprawnień pliku filtrów (driver)

chroot [x64]

Podane w Strukturze katalogów ścieżki lib, lib32 i opt/brother są wymagane do poprawnego działania drivera w chroocie

libs [x64]

By zobaczyć które biblioteki są potrzebne, na maszynie ze środowiskiem 32bitowym wykonaj komendę ldd <ścieżka do filtra>:

glorpen@example ../brother $ ldd brmfcj6510dwfilter
    linux-gate.so.1 (0xf779f000)
    libm.so.6 => /lib32/libm.so.6 (0xf7719000)
    libc.so.6 => /lib32/libc.so.6 (0xf756b000)
    /lib/ld-linux.so.2 (0xf77a1000)

Podane pliki kopiujemy do docelowego katalogu chroot.

script [x86] [x64]

Stwórz /opt/brother/bin/filter:

#!/bin/sh

DIR="/opt/brother"

PRINTER="$(echo $0 | sed -e 's/.*_//')"

BRCONV="${DIR}/Printers/${PRINTER}/filter"

if [[ -d /usr/lib64  && ! -d /usr/lib32 ]];
then
    BRCONV="/usr/bin/sudo /usr/bin/chroot --userspec=``id -u``:``id -g`` /opt/brother ${BRCONV}"
fi

PSCONV="${DIR}/bin/psconvertij2"

FILE_RC="${DIR}/Printers/${PRINTER}/inf/br${PRINTER}rc"
FILE_PAPERINF="${DIR}/Printers/${PRINTER}/inf/paperinfij2"
FILE_IMAGINGAREA="${DIR}/Printers/${PRINTER}/inf/ImagingArea"

cat | "${PSCONV}" "${FILE_PAPERINF}" "${FILE_RC}" "${FILE_IMAGINGAREA}" | ${BRCONV} -pi "${FILE_PAPERINF}" -rc "${FILE_RC}"

exit $?

Nadaj mu uprawnienie wykonywalne

chmod a+x /opt/brother/bin/filter

Następnie tworzymy symlink’a filter_mfcj6510dw -> filter

Przygotowany wcześniej plik PPD powinien wskazywać na stworzony przez nas filter_mfcj6510dw.

CUPS

Podczas dodawania drukarki podajemy przygotowany wcześniej plik ppd, jeśli wszystko jest ustawione poprawnie drukarka jest gotowa do użytku.

Jeśli wydrukowane strony mają zbyt mały górny margines (są obcięte) zmień linię w /opt/brother/Printers/<model>/inf/br<model>dwrc z PaperType=Letter na PaperType=A4.