Hotplug, którego nie ma
Problem jest następujący: drukarka HP LaserJet 1020 podpięta do serwera na FreeBSD, na którym stoi CUPS i udostępniona ją po sieci innym komputerom. Uniksowe sterowniki foo2zjs doskonale sobie z nią radzą, jednak za każdym razem, gdy drukarka ma pracować, trzeba ręcznie załadować do niej firmware. Zamiast robić to po ssh, naskrobałem skrypt, który wykrywa podpięcie drukarki i automatycznie ładuje do niej firmware.
Zawsze, gdy kabel USB zostanie podłączony (lub włączone zostanie zasilanie drukarki), w logu systemowym (dmesg) pojawia się linijka postaci:
ugen0: <Hewlett-Packard HP LaserJet 1020, class 0/0, rev 2.00/1.00, addr 2> on uhub4
Idea jest bardzo prosta: napisać skrypt, który będzie nasłuchiwał komunikatów systemowych, tzn. przeglądał dmesg co 10 sekund w poszukiwaniu linijki o podłączeniu drukarki. Jeśli wykryje, że drukarka została podłączona, niech automatycznie ładuje do niej firmware.
Samo załadowanie firmware’u to jedna komenda:
$ cat /usr/local/share/foo2zjs/firmware/sihp1020.dl > /dev/ugen0.1
Cały skrypt wygląda mniej więcej tak hp_load_firmware.sh
Wystarczy podpiąć go do /etc/rc.local i mamy imitację hotpluga ;)



