Usb printers take the same port deterministically?

Warren Block wblock at wonkity.com
Sat Jun 4 22:19:01 UTC 2011


On Sat, 4 Jun 2011, Scott Gasch wrote:

> Hi,
>
> I have two usb printers on my freebsd machine and I'm using cups.  One of
> the things I've done is publish a raw (no driver) printer for each of them
> and use that to share them with other machines in the house that have
> drivers.
>
> My problem is that every once in a while, when I boot up, the order of the
> printers on the usb ports seems to change.  For example, right now I've got:
>
> Jun  4 11:24:34 foo kernel: ulpt0: <Brother HL-2140 series, class 0/0, rev
> 2.00/1.00, addr 2> on uhub1
> Jun  4 11:24:34 foo kernel: ulpt0: using bi-directional mode
> Jun  4 11:28:13 foo kernel: ulpt1: <EPSON USB2.0 Printer (Hi-speed), class
> 0/0, rev 2.00/1.00, addr 2> on uhub7
>
>
> But when I lost power the other night the machine came up with them reversed
> -- the brother on ulpt1 and the epson on ulpt0.
>
> As far as I can tell, cups printers.conf ties to a particular port.  So, you
> can probably see where this is going... when they bind in the wrong order
> and someone prints I get a ton of crap printed out and waste a ton of paper.
> How can I make it so that a particular printer binds to a particular usb
> port deterministically?

devd.conf.  But I don't think there's any control over ulpt.  Instead, 
maybe create links so /dev/ulpt-hl2140 and /dev/ulpt-epson12 are linked 
to the right devices, and use those where static devices are needed. 
Untested...

attach 20 {
         device-name "ulpt[0-9]";
         match "vendor" "0x1234"; # Brother
         match "product" "0x4321"; # HL-2140
         action "ln -s /dev/$device-name /dev/ulpt-hl2140";
};

detach 20 {
         device-name "ulpt[0-9]";
         match "vendor" "0x1234"; # Brother
         match "product" "0x4321"; # HL-2140
         action "rm /dev/ulpt-hl2140";
};


More information about the freebsd-questions mailing list