Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 4 Jun 2011 16:28:36 -0700
From:      Scott Gasch <scott.gasch@gmail.com>
To:        Warren Block <wblock@wonkity.com>
Cc:        questions@freebsd.org
Subject:   Re: Usb printers take the same port deterministically?
Message-ID:  <BANLkTinKGOJnvmm81Dk_WrygKbwK9c6SLg@mail.gmail.com>
In-Reply-To: <alpine.BSF.2.00.1106041610280.34154@wonkity.com>
References:  <BANLkTinNzPUtfMa5xbxn-z=sjm6QRBvWNw@mail.gmail.com> <alpine.BSF.2.00.1106041610280.34154@wonkity.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Thanks, Warren.  Works great, mostly :)

I actually need the "unlpt*" device because of publishing the raw printers.
 Hooking the attach/detach of those device names directly did not work.
 Adding an action to the "ulpt" device does work... but I then ran into the
problem of pulling the number out of the $device variable to figure out what
port just attached.  After some messing around (I tried to match the device
and serial variables) I gave up and just made two entries per printer: one
for ulpt0 and one for ulpt1 (see below).

Just because I'm a pain, how does this work if you have two printers from
the same vendor?  Epson's product code 0x0009, for example, means "high
speed usb 2.0 printer".  So I'm guessing, really, that any epson printer
would match?

Thx,
Scott


Here's the final working version for the archives:

attach 20 {
        device-name "ulpt0";
        match "vendor" "0x04f9"; # Brother
        match "product" "0x0033"; # HL-2140
        action "ln -s /dev/$device-name /dev/ulpt-brother";
        action "ln -s /dev/unlpt0 /dev/unlpt-brother";
};

attach 20 {
        device-name "ulpt1";
        match "vendor" "0x04f9"; # Brother
        match "product" "0x0033"; # HL-2140
        action "ln -s /dev/$device-name /dev/ulpt-brother";
        action "ln -s /dev/unlpt1 /dev/unlpt-brother";
};

detach 20 {
        device-name "ulpt[0-9]";
        match "vendor" "0x04f9"; # Brother
        match "product" "0x0033"; # HL-2140
        action "rm -f /dev/ulpt-brother";
        action "rm -f /dev/unlpt-brother";
};

# ---

attach 20 {
        device-name "ulpt0";
        match "vendor" "0x04b8"; # Epson
        match "product" "0x0007"; # Photostylus R800
        action "ln -s /dev/$device-name /dev/ulpt-epson";
        action "ln -s /dev/unlpt0 /dev/unlpt-epson";
};

attach 20 {
        device-name "ulpt1";
        match "vendor" "0x04b8"; # Epson
        match "product" "0x0007"; # Photostylus R800
        action "ln -s /dev/$device-name /dev/ulpt-epson";
        action "ln -s /dev/unlpt1 /dev/unlpt-epson";
};

detach 20 {
       device-name "ulpt[0-9]";
       match "vendor" "0x04b8"; # Epson
       match "product" "0x0007"; # Photostylus R800
       action "rm -f /dev/ulpt-epson";
       action "rm -f /dev/unlpt-epson";
};







On Sat, Jun 4, 2011 at 3:19 PM, Warren Block <wblock@wonkity.com> wrote:

> 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";
> };
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BANLkTinKGOJnvmm81Dk_WrygKbwK9c6SLg>