2024. március 28., csütörtök

Gyorskeresés

Hálózati nyomtató & scan szerver Raspberry Pi2 alapokon

Írta: | Kulcsszavak: nyomtatás . scan . samsung . m2070 . raspberry . pi . linux

[ ÚJ BEJEGYZÉS ]

Annak idején a nagy nyomtatóválogatás közepette sikerült lecsapni egy Samsung M2070 Series lézernyomtatóra, ami tökéletesen kielégítette az igényeket a mai napig. Ugyan a lézer zsebbenyúlós történet, amennyiben színes nyomtatást is szeretnénk, ide tökéletes volt a fekete-fehér konfiguráció is. És a lézernek hála nem kell attól rettegni, hogy beszáradna, vagy túl gyorsan fogyna ki a patron. Bár a Samsung nyomtatókat azóta átbrandelték HP-vá, szerencsére még mindig széles körben támogatott a termék ilyen szempontból is.

A vásárlás során volt lehetőség wifivel kérni a printert, de ez ha jól emlékszem 8000 forintot dobott volna a vételáron, illetve már eleve volt egy ZyXEL NAS-om otthon, amire USB-n csatlakoztatva a nyomtatót hálózati printert lehet varázsolni az eszközből egyszerűen. Illetve ami sokszor unszimpatikusnak tűnt, hogy sok wifis nyomtató inkább saját wifit sugároz, ahelyett, hogy az otthoni hálózatra tenné magát, sokszor kell egy tucat gyártói szoftver a wifis nyomtatáshoz, mert kevés gyártó követi a standardot, illetve hallottam ilyen hálózati printerekről, amelyek tucatnyi exploitnak voltak kitéve. Ilyenkor persze lehet számítani a gyártóra, hogy lesz olyan kedves és patcheli a sebezhetőséget, de nem találkoztam még olyan emberrel, aki otthon elgondolkozott volna a nyomtató firmware frissítésén, illetve legyünk őszinték, egy ilyen belépő szintű otthoni kis printert max három év support után a gyártó valószínűleg teljesen elenged szoftveresen.

Éveken át remekül működött a kis fapad ZyXEL NAS-ra kötve a nyomtató. Egy ideig zavart, hogy a scanner részét nem tudom kihasználni ilyen módon a hálózaton megosztva, de egy apró utánajárást követően pár szaki teljesen kiirtotta bennem a reményt, azt mondták, hogy felejtsem el a scanner támogatást ARM alapú linuxon, ugyanis a driverek zárt forrásúak és kizárólag x86, illetve x64 platformokon működnek. Örüljek, hogy a nyomtatás része működik. Így aztán lemondtam a dologról (Spoiler: kár volt). Azonban időközben a NAS-t teljesen felváltotta egy cloud szerver, a ketyere pedig szépen lassan egyre hangosabb lett a takarítások ellenére, végül pedig teljesen feladta a harcot. Így maradtam hálózatos nyomtatás nélkül, ami egy igen kényelmetlen művelet.

Úgy döntöttem, hogy ezen változtatok. Körbenéztem, hogy mi van itthon és találtam egy Raspberry Pi2-t, egy 32 GB-os Samsung micro SD kártyát (eredetileg egy ebook olvasó javítására szántam, ez is lehetne egy külön blogposzt), tápot és ethernet kábelt.

Remélem a saját blogomban nem szükséges szabadkoznom, de azt fontosnak tartom leszögezni, hogy nem értek a nyomtatókhoz egyáltalán, így kritikákat a témában szívesen fogadok!

Nyilvánvalóan a konfiguráláshoz szükség lesz egy rendszertelepítésre a Pi-n. Nem igazán kedvelem a Raspbiant, de egy gyors Fedora ARM próbálkozást követően azonnal menekültem raspbianra, mivel borzasztó lassan futott a Fedora a Pi2-n. Elképzelhető, hogy csak az SD kártya lassú, mindenesetre egyelőre megelégszem a Raspbiannal is.

Én egy Arch Linuxos gépen végzem a telepítést, így a telepítést lehetne dd-vel végezni közvetlenül terminálból, de az RPi Imager kényelmesebb olyan szempontból, hogy nem feltétlen írja fel az amúgy adatokat nem tartalmazó részt a kártyára, így jelentős időt spórol meg a lassú kártyámmal.

Én egy Raspberry Pi OS Lite-ot fogok felrakni, mivel egyáltalán nem lesz majd szükség grafikus felületre, így azt kiválasztom a listából, majd előcsalogatom a haladó menüt a Ctrl+Shift+X lenyomásával, ahol a következőket állítottam be:

Ezt követően lehet is csatlakoztatni a Pi-t a routerre és a bootot követően elérhető lesz a megadott hosztnéven, illetve arp táblából, vagy a router logjából kideríthető, hogy milyen IP címet kapott a masina.

Első lépésként beállítottam egy statikus IP címet Pi-nek. Ehhez a /etc/dhcpcd.conf fájl végére kellett a következő sorokat írnom:

interface eth0
static ip_address=192.168.1.7/24
static routers=192.168.1.1
static domain_name_servers=9.9.9.11 149.112.112.11

Következhetett egy csomagfrissítés:

sudo apt update
sudo apt upgrade

Majd pár perc várakozást követően rebootolom a rendszert, hiszen a statikus IP-nek életbe kell lépnie, illetve történt egy kernel frissítés is esetemben az upgrade parancs hatására:

sudo reboot

Bár SSH-zni eleve nem tudnánk, ha valami félrement volna, biztos, ami biztos alapon a ip a show dev eth0 parancs kimenetét ellenőrizve meggyőződhetünk, hogy tényleg helyes-e minden beállítás.

Végezetül tegyünk fel egy tűzfalat. Ez a lépés nyilván opcionális és egyéni preferencia kérdése. Nyugodtan ki lehet hagyni. Én viszont felteszek egy firewalld-t:

sudo apt install firewalld

pi@homeserver:~ $ sudo firewall-cmd --zone=home --permanent --add-source=192.168.1.0/24
success
pi@homeserver:~ $ sudo firewall-cmd --permanent --zone=public --add-interface=eth0
success
pi@homeserver:~ $ sudo firewall-cmd --zone=public --permanent --remove-service=ssh
success
pi@homeserver:~ $ sudo firewall-cmd --reload
success
pi@homeserver:~ $ sudo firewall-cmd --zone=home --list-all
home (active)
target: default
icmp-block-inversion: no
interfaces:
sources: 192.168.1.0/24
services: dhcpv6-client mdns samba-client ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

Remek! SSH-n ezek után is be tudunk lépni a helyi hálózatról, így a kezdeti állapot meg is van, következhet a nyomtatás része a témának.

Bár ezen a ponton még ötletem se volt, hogyan fogom megoldani a dolgot, a nyomtatás problémájával kezdtem a telepítést. Ehhez mindenképp szükség lesz a cups csomagra, telepítsük is:

sudo apt install cups

Ezt követően el tudnánk már érni a cups webes felületét, de az admin felületet alapesetben csak localhoston lehetne elérni. Ahhoz, hogy feloldjuk ezt a korlátozást, a következő parancsot kell lefuttatni:

sudo cupsctl --remote-admin --share-printers

Ahhoz, hogy a pi userrel be is tudjunk majd lépni és nyomtatókat is tudjunk telepíteni, a következő parancsra is szükség lesz:

sudo adduser pi lpadmin

Illetve természetesen át kell engedni az IPP portot (631):

pi@homeserver:~ $ sudo firewall-cmd --permanent --zone=home --add-service=ipp
success
pi@homeserver:~ $ sudo firewall-cmd --reload
success

Ezek után elérhető lesz az admin felület a https://192.168.1.7:631/ címen. Mivel self signed kulccsal van bekonfigolva a cups szerver, a böngésző figyelmeztetni fog ennek a veszélyére. Helyi hálózaton tipikus belső IP címhez lehetetlen tanúsított certet szerezni, így csak a figyelmeztetés elfogadásával tudunk továbbmenni a konfigurációban.

Ezt követően az az ötletem támadt, hogy csatlakoztatom a nyomtatót USB-n. A cups admin panel azonnal felismerte. Egyedül a driverrel voltam gondban. Köztudottan a Samsung driverek zártak és az x86, illetve x64 architektúrákat célozzák meg. A kis Raspberry pedig ARM, esélytelennek tűnt ezen a ponton a gyári driverek használata. Ekkor jött az ötlet, hogy van egy generic laserprinter driver, próbáljuk meg azzal. Ezzel sikeresen hozzáadtam a nyomtatót, majd nagy meglepetésemre ki is tudtam nyomtatni egy teszt lapot. A minőség is tökéletes volt.

Gyakorlatilag ennyi elég is a konfigurációhoz, ha ezekkel végeztünk, a Windows és linux (sőt, a legtöbb platform támogatja az IPP protokollt) kliensek egyaránt fel fogják ismerni és ha bepipáltuk a Share this printer opciót korábban, bármelyik helyi kliens fog tudni róla nyomtatni. :C

Most pedig következhet a scanner rész. Bár korábban mindenhonnan azt a megerősítést kaptam, hogy ezt felejtsem el, mert a scanneléshez mindenképp a samsung drivere kellene, mégis érdekelt a procedúra, ezért legalább utána szerettem volna járni annak, hogy milyen megoldások vannak linuxos hálózati scannelésre.

A legnagyobb meglepetésemre sokkal kevesebb leírást találtam az interneten a témával kapcsolatban, mint amire számítottam, de így is sikerült megtalálni az egyik lehetséges megoldást. Ez pedig a sane.

Szerencsére ezt már telepítenünk sem kell, mert a cups feltelepítette. Ellenőrizzük, hogy felismeri-e a scannert a program:

pi@homeserver:~ $ 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=0x04e8, product=0x3469 [M2070 Series]) at libusb:001:006
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.

Úgy látszik, hogy minden rendben! Ezt követően teszteljük, hogy tudunk-e scannelni is:

scanimage --format=png -p -o test_scan.png

Nagy meglepetésemre ez le is futott és a képet megnyitva valóban a scannelt képet kaptam.

Már csak azt kellene megoldani, hogy más eszközök is tudják használni a scannert. Először szerkesszük a /etc/sane.d/saned.conf fájlt. Keressük meg a ## Access list sort, majd adjuk meg a belső hálózatunkat:

192.168.1.0/24

Végül indítsuk el magát a socketet, amelyen keresztül fognak tudni a hálózati eszközeink scannelni:

pi@homeserver:~ $ sudo systemctl enable --now saned.socket
Created symlink /etc/systemd/system/sockets.target.wants/saned.socket → /lib/systemd/system/saned.socket.
pi@homeserver:~ $ systemctl status saned.socket
● saned.socket - saned incoming socket
Loaded: loaded (/lib/systemd/system/saned.socket; enabled; vendor preset: enabled)
Active: active (listening) since Sat 2021-12-18 00:09:42 CET; 10s ago
Listen: [::]:6566 (Stream)
Accepted: 0; Connected: 0;
Tasks: 0 (limit: 1597)
CPU: 4ms
CGroup: /system.slice/saned.socket

Dec 18 00:09:42 homeserver systemd[1]: Listening on saned incoming socket.

Ne feledkezzünk meg a tűzfalról sem:

pi@homeserver:~ $ sudo firewall-cmd --permanent --zone=home --add-service=sane
success
pi@homeserver:~ $ sudo firewall-cmd --reload
success

Végezetül van egy nagyon fontos mozzanat, amit egyetlen leírásban sem találtam meg, azonban enélkül egyszerűen sehogy nem tudtam távolról scannelni. Mégpedig a következő a probléma:

pi@homeserver:~ $ cat /etc/default/saned
# Defaults for the saned initscript, from sane-utils

# Set to the user saned should run as
RUN_AS_USER=saned
pi@homeserver:~ $ id saned
uid=109(saned) gid=117(saned) groups=117(saned),115(scanner)

Az előzőekben a pi user alól futtattuk a scanimage parancsot, így fel is ismerte a nyomtatót, azonban ha a saned user szerepében futtatom le a scanner keresőt, akkor üres listát kapok. És a hálózati eszközök a saned usert használják scanneléshez. Érdekes módon a következő parancs kiadását követően nem volt többé ilyen gondom:

sudo adduser saned lp

Következhet a kliensek beállítása!

1. Arch Linux

Szükségünk lesz itt is a sane csomagra:

pacman -S sane

Ha szükséges, oldjuk meg, hogy a net modul is betöltődjön. Nekem ez már eleve engedélyezve volt, így nem kell semmit sem szerkesztenem:

cat /etc/sane.d/dll.conf | grep net
# The next line enables the network backend; comment it out if you don't
# need to use a remote SANE scanner over the network -- see sane-net(5)
net
dell1600n_net

Egyedül arra van szükség, hogy a /etc/sane.d/net.conf fájlba beleírjuk a ## saned hosts sor után a Pi IP címét, ami nekem 192.168.1.7.

Ezek után lehet is tesztelni, hogy felismerte-e a scannert a gép (ebben az esetben a sane-find-scanner nem fogja listázni):

scanimage -L
device `net:192.168.1.7:xerox_mfp:libusb:001:006' is a Samsung M2070 Series multi-function peripheral

Szuper! Indulhat is a scannelés a scanimage paranccsal, illetve legnagyobb meglepetésemre a Skanlite alkalmazás, ami eleve a KDE részeként fel volt telepítve a rendszeremre, szépen felismerte a scannert és pontosan úgy tudom kezelni a programon belül, mint egy helyi scannert. :C

A nyomtatáshoz pedig minden bizonnyal hozzá kell valamilyen módon adni a nyomtatókhoz a ipp://192.168.1.7:631/ipp-et. Sajnos ez grafikus felületenként eltérő, de nagyon egyszerű folyamat. Drivernek pedig a generic laser-t célszerű választani.

2. Windows

Sajnos a Windows nem támogatja a sane scannereket, így a beépített scanner kezelést elfelejthetjük. Azonban van egy remek bridge, a SaneTwain, amelyet ezen a linken lehet megtalálni: [link]

A zip alatt található egy Windows Installer opció is, melyet letöltve pár pillanat alatt települ is a bridge a rendszerre, majd a scanimage alkalmazást indítva megjelenik egy grafikus felület. Ha megadjuk a Pi IP címét, illetve a sane portot, ami 6566, akkor indulhat a scannelés innen is.

A nyomtatáshoz pedig semmi extra csomag nem szükséges, a Windows automatikusan listázta a nyomtatót, mint IPP eszközt és sikeresen hozzá is tudtam adni a rendszer nyomtatóihoz.

3. Android

Letöltjük ezt az alkalmazást: [link], beírjuk a Pi IP címét, a 6566-os portot és indulhat a scannelés. A program GUI-ja picit fapados, de remekül teszi a dolgát.

Nyomtatáshoz pedig a PrinterShare-t használom: [link]. Automatikusan felismeri a printert, mint IPP eszköz, majd a generic drivert kiválasztva lehet is vele nyomtatni.

Gyakorlatilag ezzel meg is vagyunk. Azonban a sikersztori után következzen egy sokáig megoldatlan rejtély a gyári driverekkel. A cikk írása elején még arra számítottam, hogy vissza kell fejtenem a gyári samsungos x86/x64 drivereket és le kell portolnom ARM alapokra. Ugyanis létezik egy splix nevű kezdeményezés, amely hasonló elven kreált bizonyos nyomtatókhoz open source drivereket. Sajnos az M2070-hez pont nem. Viszont arra nem számítottam, hogy a generic driverekkel ilyen jól fognak menni a dolgok, ezért elkezdtem nézelődni.

Találtam egy ilyen oldalt: [link], ami nagyon sok infót tartalmaz, illetve letölthető rajta keresztül az összes korábbi Samsung driver. Innen majdnem az összes telepítő csak és kizárólag x86 és x64-ot támogat, azonban felfigyeltem egyetlen verzióra: [link], amely tartalmazott egy arm mappát is. :Y

Töltsük le a /dev/shm alá (később lesz értelme, hogy ide töltöttük le) és csomagoljuk ki:

wget https://www.bchemnet.com/suldr/driver/UnifiedLinuxDriver-1.00.29.tar.gz -O /dev/shm/UnifiedLinuxDriver-1.00.29.tar.gz
cd /dev/shm
tar xf UnifiedLinuxDriver-1.00.29.tar.gz
rm UnifiedLinuxDriver-1.00.29.tar.gz

Majd nézzünk rá egy kicsit az egyik ARM binárisra:

pi@homeserver:/dev/shm $ file uld/armv4/rastertospl
uld/armv4/rastertospl: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.18, stripped

Tehát ARMv4 és soft-float. Nekem azonban a Pi-n ARMv7 hard float rendszer fut:

pi@homeserver:/dev/shm $ uname -m
armv7l
pi@homeserver:/dev/shm $ file $(which file)

/usr/bin/file: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=46998c6200b7bcc2d6b1539b82d4044903017bb4, for GNU/Linux 3.2.0, stripped

Elméletileg az ARMv4-re fordított binárisok futtatása nem jelenthet gondot az ARMv7 hoszt számára sem, a soft float kompatibilítás pedig szintén megvan a Pi-n. Tehát lehetne telepíteni szépen a drivereket és azoknak működnie kellene. Ezt meg is csináltam, de nem működött sehogyan sem.

Tettem még egy próbát, hátha tényleg a hard float rendszer az, ami nem tetszik neki. Mivel nagyjából az összes Raspberryre elérhető disztró már rég áttért hard floatra, egy igazi kihívás volt kutakodni az interneten armel rendszerek után. Amiket találtam, azok mind vagy túl régiek voltak, vagy rengeteg munka lett volna a Pi-n bebootolni.

Így jött az ötlet, hogy nekem bőven elég lesz egy chroot környezet. Ebben pedig a debootstrap tool lesz a segítségemre. Így attól is megkímélem magam, hogy a hoszt rendszert szemeteli tele a samsung driver, ha mégsem sikerül a művelet.

A chrooton belül pedig van lehetőség a hoszt gépről systemd processzeket indítani, tehát siker esetén simán csak futhat chrootból a cups és a nyomtató parancsai.

A chrootot egyszerűbb root alól összerakni, így készítsük el a rootfs-t:

sudo su
cd
mkdir chroot
debootstrap --arch armel bullseye chroot/

Ez egy kis időbe fog telni, ha kész, csatoljunk fel pár mappát ideiglenesen:

cd chroot
mount -t proc /proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/

Végül chrootoljunk is az armel rendszerbe:

chroot .

root@homeserver:/# ls /lib/ld-linux*
/lib/ld-linux.so.3

Láthatjuk, hogy nyoma sincsen ld-linux-armhf.so-nak, tehát jók vagyunk. Tegyük fel elsőnek a cupsot:

apt update
apt install cups

Jöhet a driverek telepítése. Mivel korábban a /dev/shm alá csomagoltuk ki a telepítőt és fel is csatoltuk a chroot számára a /dev partíciót, el is tudjuk érni:

cd /dev/shm/uld

Igen ám, de a telepítő kb azonnal elhasal:

root@homeserver:/dev/shm/uld# ./install.sh
INTERNAL ERROR: ABORT: 'Unexpected architecture 'armel'', execution aborted
INTERNAL ERROR: ABORT: 'Unexpected architecture 'armel'', execution aborted
**** Running install ...
**** Press 'Enter' to continue or 'q' and then 'Enter' to quit. : q
**** Terminated by user

Samsung, Samsung... De nem gond, megjavítjuk mi a dolgot. Keressük meg a noarch/package_utils fájlban a következő sorokat:

"arm")
ARCH_SUBDIR="arm"
;;

És az "arm") részt egészítsük ki az "armel" kifejezéssel:

"arm"|"armel")
ARCH_SUBDIR="arm"
;;

root@homeserver:/dev/shm/uld# ./install.sh
**** Running install ...
**** Press 'Enter' to continue or 'q' and then 'Enter' to quit. :

Szuper, menjünk végig a telepítőn. Ha kérdezi, hogy piszkálja-e a tűzfalat, nyomjunk nem-et. Majd azt megoldjuk mi.

Láthatóan minden sikeresen feltelepült:

**** Are you going to use network devices ? If yes, it is recommended to configure your firewall.
**** If you want to configure firewall automatically, enter 'y' or just press 'Enter'. To skip, enter 'n'. : n
**** Registering CUPS backend ...
**** CUPS restart OK.
**** Print driver has been installed successfully.
**** Registering SANE backend ...
**** Restarting udev ...
**** Scan driver has been installed successfully.
**** Install finished.

Állítsuk le a hoszt gépen a CUPS szervert, hogy ideiglenesen felszabaduljon a portja és a chrooton belül el tudjuk indítani ugyanazt:

exit
systemctl stop cups
systemctl stop cups.socket
systemctl stop cups-browsed

Lépjünk vissza a chrootba:

chroot .

Ne feledkezzünk meg a jogokról, hogy majd el tudjuk érni az admin felületet:

cupsctl --remote-admin --share-printers

Ez a parancs még a cupsot is elindítja nekünk a háttérben. Azonban a pi user nem létezik a chrootunkon belül, így nem lesz mivel bejelentkezni. Hozzuk létre:

adduser pi
adduser pi lp
adduser pi lpadmin

Ezek után el fogjuk tudni érni az admin panelt a szokásos https://192.168.1.7:631/admin/ címen. A nyomtatónkat is fel fogja ismerni a cups, mivel a /dev-et korábban csatoltuk. Ha hozzáadjuk a nyomtatót, látható, hogy automatikusan fel is ismerte a drivert a cups:

Látható, hogy jóval több opció is elérhető ezzel a driverrel:

Nyomtassunk a cups felületről egy teszt oldalt, hogy szembesüljünk vele: Nem működik.

Nézzünk rá a logokra:

cat /var/log/cups/error_log

Mivel a log hosszú, nem másolnám az egészet be, de több érdekes dolgot is elénk tár: [link]

E [18/Dec/2021:10:57:59 +0000] Samsung_M2070_Series: File \"/usr/lib/cups/filter/rastertospl\" not available: No such file or directory

Korábban már találkoztunk ezzel a fájllal, miért nem másolódott a helyére? Jó kérdés! Tegyük meg magunk:

cp /dev/shm/uld/armv4/rastertospl /usr/lib/cups/filter/

Ezek után sem fog menni a nyomtatás... Nézzük mi lehet a gond:

root@homeserver:/# /usr/lib/cups/filter/rastertospl
/usr/lib/cups/filter/rastertospl: error while loading shared libraries: libcupsimage.so.2: cannot open shared object file: No such file or directory
root@homeserver:/# ldd /usr/lib/cups/filter/rastertospl | grep not
libcupsimage.so.2 => not found

Bingó! Láthatóan hiányzik egy library:

root@homeserver:/# apt-cache search libcupsimage2
libcupsimage2 - Common UNIX Printing System(tm) - Raster image library
libcupsimage2-dev - Common UNIX Printing System(tm) - Development files CUPS image library

Ez megoldja:

apt install libcupsimage2

És le is fut:

root@homeserver:/# /usr/lib/cups/filter/rastertospl
INFO: Usage: rastertospl job-id user title copies options [file]
ERROR: Wrong number of arguments

Próbáljunk nyomtatni! És ismét filter failed lesz a végeredmény. Illetve a log: [link]

Az érdekes rész:

D [18/Dec/2021:11:09:42 +0000] [Job 1] Processing page 1...
D [18/Dec/2021:11:09:42 +0000] [Job 1] Waiting for read thread to exit...
D [18/Dec/2021:11:09:42 +0000] [Job 1] Error: /ioerror in --showpage--
D [18/Dec/2021:11:09:42 +0000] [Job 1] Operand stack:
D [18/Dec/2021:11:09:42 +0000] [Job 1] true (/var/spool/cups/tmp/gs_4z0iEQ) --nostringval-- 1 true
D [18/Dec/2021:11:09:42 +0000] [Job 1] Execution stack:
D [18/Dec/2021:11:09:42 +0000] [Job 1] %interp_exit .runexec2 --nostringval-- showpage --nostringval-- 2 %stopped_push --nostringval-- showpage showpage false 1 %stopped_push 1990 2 3 %oparray_pop 1989 2 3 %oparray_pop 1977 2 3 %oparray_pop showpage 1978 4 3 %oparray_pop showpage showpage 2 1 1 showpage %for_pos_int_continue 1981 4 7 %oparray_pop showpage showpage 1840 3 9 %oparray_pop showpage showpage
D [18/Dec/2021:11:09:42 +0000] [Job 1] Dictionary stack:
D [18/Dec/2021:11:09:42 +0000] [Job 1] --dict:740/1123(ro)(G)-- --dict:1/20(G)-- --dict:80/200(L)-- --dict:80/200(L)-- --dict:133/256(ro)(G)-- --dict:320/325(ro)(G)-- --dict:33/64(L)-- --dict:6/9(L)-- --dict:7/20(L)--
D [18/Dec/2021:11:09:42 +0000] [Job 1] Current allocation mode is local
D [18/Dec/2021:11:09:42 +0000] [Job 1] Last OS error: Broken pipe
D [18/Dec/2021:11:09:42 +0000] [Job 1] GPL Ghostscript 9.53.3: Unrecoverable error, exit code 1

Ezen a ponton le is tettem róla, hogy én a gyári driverekkel operáljak. Úgy tűnt, hogy az egész értelmetlen volt, valami szimplán nem jó az ARM driverrel. Azonban most, ahogy írom a cikket, újratelepítettem mindent a pontos lépések kedvéért és a korábbi ide beilleszett logban szembesültem a következő sorral:

E [18/Dec/2021:10:56:29 +0000] [cups-driverd] Bad driver information file \"/usr/share/cups/model/uld-samsung/cms/M2070sc.cts\"!

Nem sokat mond ez az error. De miért nem jó neki? Hátha valami könyvtár hiányzik megint. Nézzünk rá a lehetőségeinkre:

root@homeserver:/dev/shm/uld/armv4# grep -R "cts" .
grep: ./smfpnetdiscovery: binary file matches
grep: ./rastertospl: binary file matches
grep: ./libscmssc.so: binary file matches
grep: ./libsane-smfp.so.1.0.1: binary file matches

Láthatóan van egy pár lehetőségünk. A rastertospl-t már a helyére raktuk, azzal nem lehet gond. A libsane-smfp.so.1.0.1 vélhetően a sane szóból a scanneléshez lenne használatos, az smfpnetdiscovery pedig az előző bináris nevéből adódóan szintén a scanneléssel lehet kapcsolatos (ezek mind erős tippek, de később tesztelem). Maradt a libscmssc.so. Hála az égnek egy kis Google eredményeképp egy érdekes infóra bukkantam: [link]

# The rasterto* cups filters will dlopen() libscmssc.so. However,
# they try to open it at /usr/lib/cups/filter/libscmssc.so,
# /usr/lib64/cups/filter/libscmssc.so, and finally
# ../src/libscmssc.so. We thus hack the first entry to not use an
# absolute path and just throw this binary into the library search
# path. If these filters fail to dlopen() libscmssc.so, the
# printer will print two copies of each page on each page with
# white horizonal bands.

Én nem szeretnék belenyúlni a rastertospl binárisba, azonban ha dlopen()-t használ a könyvtár betöltésére, akkor minden bizonnyal a /usr/lib alá másolva a könyvtárat is be kell, hogy töltődjön:

cp /dev/shm/uld/armv4/libscmssc.so /usr/lib/

És a legnagyobb meglepetésemre az egész cikk megírása során, sikerült működésre bírni a Samsung gyári driverét natívan egy ARM platformról. :C

A cikket ezen a ponton nem írom újra, viszont elképzelhető, hogy ebben az esetben a chrootra sem lesz szükség. Próbáljuk telepíteni a hoszt gépen:

exit

A chrootból kilépéshez, majd:

killall cupsd
cd /dev/shm/uld

Mivel a hoszt gép armhf, módosítsuk a telepítőt megint:

sed -i 's/"armel"/"armel"|"armhf"/g' noarch/package_utils

sh ./install.sh

cp /dev/shm/uld/armv4/rastertospl /usr/lib/cups/filter/
cp /dev/shm/uld/armv4/libscmssc.so /usr/lib

Ne feledkezzünk meg a libcupsimage2 csomagról sem:

apt install libcupsimage2

Végül indítsuk el a cupsot:

root@homeserver:/dev/shm/uld# systemctl start cups
root@homeserver:/dev/shm/uld# systemctl start cups.socket
root@homeserver:/dev/shm/uld# systemctl start cups-browsed

És konfiguráljuk át a nyomtatót a Generic driverről az M2070-ére. A tesztoldalt pedig remekül kinyomtatta. :C

Ezek után a chrootra sem lesz már szükségünk. Eltávolítani egy picit macerás, mivel pár folyamat még használná a chroot csatolásait. A legegyszerűbb egy sudo reboot, majd egy mezei:

sudo rm /root/chroot -rf

Ezzel kész is vagyunk! Lett egy hálózati nyomtatónk, amely elérhető nagyjából az összes platformon, amivel itthon rendelkezem. A "lehetetlen feladat" kommentekkel ellentétben sikerült összehozni.

Nagyon kényelmes akár telefonról scannelni, illetve nyomtatni ilyen módon. :B

Hozzászólások

(#1) Mr Dini


Mr Dini
addikt
LOGOUT blog

Ha esetleg más is belevágna a scanner telepítésbe, de más nyomtatója van, ajánlom figyelembe ezt az oldalt: [link] Szépen listázza az eddig ismert sane kompatibilis scannereket.

Hogy hívják az éhes horgászt? Gyere Pista, kész a kaja!

(#2) UnA válasza Mr Dini (#1) üzenetére


UnA
Korrektor

Érdekes kaland volt :)

A frissítésről: nekem egy Canon printer / scanner eszközöm van, és ezt szerencsére el lehet érni mindenféle varázslat nélkül is Ubuntuból is, de ahhoz a gyártó semmilyen frissítést nem adott ki öt éve. Szóval ez nem igazán az erősségük...

(#3) Mr Dini válasza UnA (#2) üzenetére


Mr Dini
addikt
LOGOUT blog

Ezeket a Samsung printereket is viszonylag fájdalommentesen el lehet érni egy x64-es asztali ubunturól. De ha egy kis fogyasztású Raspberryvel szeretnél nyomtatni, akkor meg vagy lőve.

Hogy hívják az éhes horgászt? Gyere Pista, kész a kaja!

(#4) PSti


PSti
tag
LOGOUT blog

Csak annyit tennék hozzá, hogy szép munka! :R

(#5) Murphistic


Murphistic
aktív tag

Köszi a részletes beszámolót :) . Engem agy Canon nyomtató bosszant, aminek nincs ARM meghajtója, bár ahogy láttam a kommenteket x86-on új Linux alatt sem egyszerű az élet.

Raspberry 3-on próbáltam box86-al futtatni az x86-is binárisokat, bár még nem működik, maga az alkalmazás nagyon tetszik.

A HP multifunkcionális bezzeg probléma nélkül működik a natív ARM-os hplip driverrel.

"A türelem hatalom: idővel és türelemmel selyem lesz az eperfa leveléből."

(#6) viraga


viraga
tag

Le a kalappal. Nagyon jó. Még ilyet! :R

Sajnos gyakran érzem azt, hogy a Logouton sincs már az a jó értelemben vett bütykölős, hekkelős, szerelős tartalom, amiért anno megszerettem. Gondolom azért mert egyrészt minden van készen, vedd meg és örülj, másrészt mintha az emberekből is kiveszne ez a "csakazértismegcsinálom" hozzáállás, beletörődünk abba, hogy "áhh, ezt úgysem lehet megcsinálni / az én időm többet ér / majd veszek újat". :(

A TV-megoldásodnál is csak pislogtam, és ilyenkor az jut eszembe, hogy ha te kívülállóként kvázi feltörve a rendszert meg tudsz oldani ilyeneket, akkor a gyártónak mibe is telne?...

[ Szerkesztve ]

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.