Synology NAS+USB printer nem támogatott? Megoldjuk...

Történt, hogy az 5 éves Synology DS218+-omat egy merész lépéssel lecseréltem egy 923+-ra (mivel lassan úgy járt, hogy elég sok konténer futott rajta és még szerettem volna futtatni párat). Minden szép és jó, napsütés, madárcsicsergés, zökkenőmentes migráció (a két diszket a régiből a helyes sorrendben átpakoltam az újba, elindítás után szólt, hogy minden rendben lesz, nem tudom, telt-e bele 10 perc és már a Home Assistant vissza volt állva)

Ugyan van egy kis boot-üzenet, pampog, hogy nem Synology által ajánlott memória került bele, de ott hadd pampogjon, nem sokat fogom én azt olvasni.

Memória nem kompatibilis

Aztán - kevesellve, hogy a hátlapra csak egy USB jutott a régi kettőjével szemben - kerítettem hozzá egy USB hubot jó hosszú kábellel, mert ahol van, oda nem érnek el a tyúkbelek. Erre a hubra csatlakoztattam a nyomtatómat, ami a DS218+-on az utolsó percig köszönte, jól működött, a DSM vezérlőpultjából meg lehetett osztani.

Itt jött a második feketeleves, üzeni, hogy ez a modell nem támogatja az USB-nyomtatókat.

Nyomtató nem támogatott

Gondolkodóba ejtett, a nyomtató csatlakoztatásakor nem láttam semmit a dmesg-ben. Később rájöttem, hogy a /dev/usb/lp0 bizony megjelenik, ha a nyomtató csatlakozik. Gondoltam, teszek rá virtuális gépben valami lightos disztrót, átadom neki a portot, aztán csinálunk onnan valamit.

Aztán szerencsére szétnéztem a github-on, és meg is találtam azt a démonkát, amit régebben OpenWRT-n is előszeretettel használtam: p910nd! Pont erre volt szükségem, nem bonyolult beállítani. Lehúztam, elindítottam, volume-ként megadtam, hogy a /dev/usb/lp0-t vegye át a konténer, és láss csodát, a nyomtató működött!

docker run -d \
  --name=p910nd \
  --privileged \
  -p 9100:9100 \
  -v /dev/usb/lp0:/dev/usb/lp0 \
  justinhimself/p910nd:latest '-b' '-d' '-f' '/dev/usb/lp0'

Ezek után már csak egy bibi volt: Természetesen, ha nincs bedugva a nyomtató, amikor a konténer elindul, le fog állni, mivel nem létezik a /dev/usb/lp0. Ezen egy kis inotify-os csavarral javítottam, gyorsan, piszkos módszerrel, írtam egy szkriptecskét:

#!/bin/sh
LOG="/var/log/p910nd.log"
echo script started at `date +%Y-%m-%d\ %H:%M` >> $LOG
/usr/local/bin/inotifywait -m -e create --include 'usb' /dev | while read changed; do /usr/local/bin/docker restart p910nd ; echo \[`date +%Y-%m-%d\ %H:%M`\] restarting p910nd >> $LOG; done

Ezt a szkriptet meghívtam a DSM Task Scheduler-ével (Feladatütemező?), boot-kor. Idáig úgy tűnik, minden rendben van. Remélem, ez így is marad :)

Hozzászólások

Ügyes. Köszönöm, hogy megosztottad. Sokat tanultam belőle.

“The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use them.”

― Philip K. Dick