Eu tenho um Brother 7055 Printer / Scanner e um Raspberry Pi, estou tentando transformar ambos em um servidor de impressão e digitalização. Infelizmente, a Brother não fornece nenhum driver ARM. Eu me deparo com esta postagem no blog sobre emulação de QEMU em o Raspberry Pi e de fato eu consegui instalar os drivers da impressora x86 usando essa abordagem, estou compartilhando via CUPS e tudo bem. Agora estou tentando fazer o scanner funcionar e o software da Brother está instalado sem nenhum erro, mas o scanner não aparece quando eu corro scanimage -L
O scanner está conectado:
dporobic@raspberrypi:~ $ lsusb
Bus 001 Device 005: ID 04f9:0248 Brother Industries, Ltd DCP-7055 scanner/printer
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Mas não consigo ver o scanner:
dporobic@raspberrypi:~ $ scanimage -L
No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).
sane-find-scanner não vê algo, mas não consegue fazê-lo funcionar, pois o irmão usa seus próprios drivers sãos.
porobic@raspberrypi:~ $ sudo sane-find-scanner
# sane-find-scanner will now attempt to detect your scanner. If the
# result is different from what you expected, first make sure your
# scanner is powered up and properly connected to your computer.
# No SCSI scanners found. If you expected something different, make sure that
# you have loaded a kernel SCSI driver for your SCSI adapter.
# Also you need support for SCSI Generic (sg) in your operating system.
# If using Linux, try "modprobe sg".
found USB scanner (vendor=0x04f9, product=0x0248) at libusb:001:005
found USB scanner (vendor=0x0424, product=0xec00) at libusb:001:003
# Your USB scanner was (probably) detected. It may or may not be supported by
# SANE. Try scanimage -L and read the backend's manpage.
# Not checking for parallel port scanners.
# Most Scanners connected to the parallel port or other proprietary ports
# can't be detected by this program.
A varredura de depuração me dá a seguinte saída, parece que o brother4 lib não pode ser carregado:
dporobic@raspberrypi:~ $ sudo SANE_DEBUG_DLL=255 scanimage -L
[sanei_debug] Setting debug level of dll to 255.
[dll] sane_init: SANE dll backend version 1.0.13 from sane-backends 1.0.24
[dll] sane_init/read_dlld: attempting to open directory './dll.d'
[dll] sane_init/read_dlld: attempting to open directory '/etc/sane.d/dll.d'
[dll] sane_init/read_dlld: using config directory '/etc/sane.d/dll.d'
[dll] sane_init/read_dlld: considering /etc/sane.d/dll.d/libsane-extras
[dll] sane_init/read_config: reading dll.d/libsane-extras
[dll] sane_init/read_dlld: done.
[dll] sane_init/read_config: reading dll.conf
[dll] add_backend: adding backend 'brother4'
[dll] sane_get_devices
[dll] load: searching backend 'brother4' in '/usr/lib/arm-linux-gnueabihf/sane:/usr/lib/sane'
[dll] load: trying to load '/usr/lib/arm-linux-gnueabihf/sane/libsane-brother4.so.1'
[dll] load: dlopen()ing '/usr/lib/arm-linux-gnueabihf/sane/libsane-brother4.so.1'
**[dll] load: dlopen() failed (/usr/lib/arm-linux-gnueabihf/sane/libsane-brother4.so.1: cannot open shared object file: No such file or directory)**
[dll] sane_get_devices: found 0 devices
No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).
[dll] sane_exit: exiting
[dll] sane_exit: finished
Os arquivos lib estão lá, mas parece que os arquivos não podem ser abertos ou acessados:
dporobic@raspberrypi:~ $ ls -l /usr/lib/arm-linux-gnueabihf/sane/ | grep brother
-rwxr-xr-x 1 root root 129696 Jan 8 11:08 libsane-brother4.so
-rwxr-xr-x 1 root root 129696 Jan 8 11:08 libsane-brother4.so.1
-rwxr-xr-x 1 root root 129696 Jan 8 11:08 libsane-brother4.so.1.0.7
Talvez algumas dependências da libsane-brother4.so lib estejam faltando, mas rodar objdump -x e procurar na seção dinâmica me dá a seguinte saída (não estou muito familiarizado com o objdump, então espero que eu esteja interpretando corretamente) :
dporobic@raspberrypi:~ $ objdump -x /usr/lib/arm-linux-gnueabihf/sane/libsane-brother4.so | grep NEEDED
NEEDED libpthread.so.0
NEEDED libnsl.so.1
NEEDED libusb-0.1.so.4
NEEDED libm.so.6
NEEDED libdl.so.2
NEEDED libc.so.6
E eu pareço ter essas bibliotecas no meu Pi, apenas uma delas está disponível apenas como versão ARM e não como i386, todas as outras vêm em ambos:
dporobic@raspberrypi:~ $ sudo ldconfig -p | grep -E 'libpthread.so.0|libnsl.so.1|libusb-0.1.so.4|libm.so.6|libdl.so.2|libc.so.6'
libusb-0.1.so.4 (libc6,hard-float) => /lib/arm-linux-gnueabihf/libusb-0.1.so.4
libusb-0.1.so.4 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libusb-0.1.so.4
libpthread.so.0 (libc6,hard-float, OS ABI: Linux 2.6.32) => /lib/arm-linux-gnueabihf/libpthread.so.0
libpthread.so.0 (libc6, OS ABI: Linux 2.6.32) => /lib/i386-linux-gnu/libpthread.so.0
libnsl.so.1 (libc6,hard-float, OS ABI: Linux 2.6.32) => /lib/arm-linux-gnueabihf/libnsl.so.1
libnsl.so.1 (libc6, OS ABI: Linux 2.6.32) => /lib/i386-linux-gnu/libnsl.so.1
libm.so.6 (libc6,hard-float, OS ABI: Linux 2.6.32) => /lib/arm-linux-gnueabihf/libm.so.6
libm.so.6 (libc6, OS ABI: Linux 2.6.32) => /lib/i386-linux-gnu/libm.so.6
libdl.so.2 (libc6,hard-float, OS ABI: Linux 2.6.32) => /lib/arm-linux-gnueabihf/libdl.so.2
libdl.so.2 (libc6, OS ABI: Linux 2.6.32) => /lib/i386-linux-gnu/libdl.so.2
libc.so.6 (libc6,hard-float, OS ABI: Linux 2.6.32) => /lib/arm-linux-gnueabihf/libc.so.6
libc.so.6 (ELF, OS ABI: Linux 2.6.32) => /lib/i386-linux-gnu/libc.so.6
Mas a única lib que eu preciso não está listada, provavelmente é por isso que ela não pode ser carregada:
dporobic@raspberrypi:~ $ sudo ldconfig -p | grep libsane-brother4.so
dporobic@raspberrypi:~ $
Originalmente o borther4 lib estava localizado em /usr/lib/sane
, eu adicionei este caminho para /etc/ld.so.conf.d/libsane-brother.conf
e execute sudo ldconfig
, mas eu só recebo este libsane.so.1
lib quando eu faço check in ldconfig -v
:
dporobic@raspberrypi:~ $ sudo ldconfig -v 2>/dev/null | grep brother -B1
/usr/lib/sane:
libsane.so.1 -> libsane-brother4.so.1.0.7
Não é possível fazer com que libsane-brother.so.1
lib apareça no cache do ld ...
Atualizar
Parece não estar relacionado ao dlconfig, na minha máquina opensuse, onde o scanner está funcionando, o libsane-brother.so.1 lib
não está aparecendo no cache do ldconfig, assim como no Pi, mas a biblioteca é carregada sem nenhum problema.
dporobic@latitude:~> sudo ldconfig -v 2>/dev/null | grep -E 'sane|brother'
libksane.so.0 -> libksane.so.0.2.0
libsane.so.1 -> libsane.so.1.0.24
Carregando corretamente, sem erro:
dporobic@latitude:~> sudo SANE_DEBUG_DLL=255 scanimage -L
[sanei_debug] Setting debug level of dll to 255.
[dll] sane_init: SANE dll backend version 1.0.13 from sane-backends 1.0.24
[dll] sane_init/read_dlld: attempting to open directory './dll.d'
[dll] sane_init/read_dlld: attempting to open directory '/etc/sane.d/dll.d'
[dll] sane_init/read_dlld: opendir failed: No such file or directory
[dll] sane_init/read_config: reading dll.conf
[dll] add_backend: adding backend 'brother4'
[dll] sane_get_devices
[dll] load: searching backend 'brother4' in '/usr/lib64/sane'
[dll] load: trying to load '/usr/lib64/sane/libsane-brother4.so.1'
**[dll] load: dlopen()ing '/usr/lib64/sane/libsane-brother4.so.1'**
[dll] init: initializing backend 'brother4'
[dll] init: backend 'brother4' is version 1.0.1
[dll] sane_get_devices: found 1 devices
device 'brother4:bus2;dev1' is a Brother DCP-7055 USB scanner
[dll] sane_exit: exiting
[dll] sane_exit: calling backend 'brother4's exit function
[dll] sane_exit: finished
Então, a questão é agora porque a Sane não pode abrir libsane-brother.so.1 lib
, mesmo que esteja no caminho correto ...
Nota: O mesmo scanner conectado diretamente à minha máquina OpenSuse e com os mesmos drivers instalados aparece quando eu executo scanimage -L
, então deve estar funcionando com sã, a questão questionável aqui é o Pi.