Hi.

I'd like people interested in USB scanning and/or printing to give these 
diffs a go. uscanner(4) was recently disabled in our GENERIC kernel 
configuration which means sane(7) will now default to use libusb for 
scanning. What these patches do is:

* sane-backends
- fix rc script, we won't use /dev/uscanner0 anymore
- extend/fix the documentation
Most of the time, USB scanning should just work *without* the need to 
configure anything (0).

* cups
- enable libusb support
- fix rc script, we won't use /dev/ulpt[0-1] anymore
- remove MESSAGE and add an extended README instead -- ulpt(4) needs to 
be disabled with config(8)


With these I'm able to access and use my multi-function printer+scanner 
without issue:
$ /usr/local/libexec/cups/backend/usb
DEBUG: list_devices
DEBUG: usb_find_busses=5
DEBUG: usb_find_devices=1
direct usb://EPSON/Stylus%20DX4000?serial=L83010704250947490&interface=1 
"EPSON Stylus DX4000" "EPSON Stylus DX4000" 
"MFG:EPSON;CMD:ESCPL2,BDC,D4,D4PX,ESCPR1;MDL:Stylus 
DX4000;CLS:PRINTER;DES:EPSON Stylus DX4000;" ""
$ scanimage -L
device `epson:libusb:/dev/usb1:/dev/ugen0' is a Epson CX4000 flatbed scanner

As the README suggests, I have set the ownership of the corresponding 
usb+ugen device to _cups:_saned so that both print and scanning daemons 
can access the device. I also added my user to the _saned group so that 
I can access the scanner directly without having to use the daemon at 
all.

Note that it is a first shot... things may (and probably will) change.
Thanks.

(0) scanning may not work reliably -- jakemsr@ has a fix for it but it 
still needs polishing -- the most important is that your scanner is 
recognised using `scanimage -L'

-- 
Antoine
Index: Makefile
===================================================================
RCS file: /cvs/ports/print/cups/Makefile,v
retrieving revision 1.88
diff -u -r1.88 Makefile
--- Makefile    30 Nov 2010 08:09:09 -0000      1.88
+++ Makefile    17 Dec 2010 15:39:04 -0000
@@ -6,7 +6,7 @@
 DISTNAME=      cups-${VERSION}-source
 PKGNAME=       cups-${VERSION}
 
-REVISION=      0
+REVISION=      1
 
 CATEGORIES=    print sysutils
 
@@ -29,7 +29,7 @@
 PERMIT_DISTFILES_FTP=  Yes
 
 WANTLIB +=     asn1 c crypto dbus-1>=7 gssapi jpeg krb5 m png>=3 pthread
-WANTLIB +=     ssl stdc++ tiff>=35 z
+WANTLIB +=     ssl stdc++ tiff>=35 z usb
 
 MASTER_SITES=  http://ftp.easysw.com/pub/cups/${VERSION}/ \
                
http://ftp.funet.fi/pub/mirrors/ftp.easysw.com/pub/cups/${VERSION}/ \
@@ -51,6 +51,7 @@
 
 LIB_DEPENDS=   graphics/png \
                graphics/tiff \
+               devel/libusb \
                x11/dbus
 
 LIBS_ENV=      LIBcups_VERSION=${LIBcups_VERSION} \
@@ -73,7 +74,7 @@
 AUTOMAKE_VERSION= 1.9
 
 USE_GMAKE=     Yes
-USE_GROFF =    Yes
+USE_GROFF=     Yes
 
 CONFIGURE_STYLE= gnu dest
 CONFIGURE_ARGS=        ${CONFIGURE_SHARED} \
@@ -96,8 +97,8 @@
                --enable-raw-printing \
                --enable-gssapi \
                --enable-openssl \
+               --enable-libusb \
                --disable-gnutls \
-               --disable-libusb \
                --disable-pam \
                --disable-launchd \
                --disable-pap \
@@ -106,7 +107,7 @@
 
 CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include \
                        -I${LOCALBASE}/include/libpng" \
-               LDFLAGS="-L${LOCALBASE}/lib -pthread" \
+               LDFLAGS="-L${LOCALBASE}/lib" \
                ${LIBS_ENV}
 
 FLAVORS=       ldap
Index: pkg/MESSAGE
===================================================================
RCS file: pkg/MESSAGE
diff -N pkg/MESSAGE
--- pkg/MESSAGE 27 Oct 2010 15:42:06 -0000      1.10
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,4 +0,0 @@
-If you want to print to non-Postscript printers or use CUPS bundled PPD
-files (i.e. drivers), you'll need to install ghostscript.  You will also
-most probably want to install the foomatic-filters package which
-provides a universal filter script.
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/print/cups/pkg/PLIST,v
retrieving revision 1.28
diff -u -r1.28 PLIST
--- pkg/PLIST   12 Nov 2010 07:09:00 -0000      1.28
+++ pkg/PLIST   17 Dec 2010 15:39:04 -0000
@@ -1002,6 +1002,7 @@
 share/doc/cups/robots.txt
 share/doc/cups/ru/
 share/doc/cups/ru/index.html
+share/doc/pkg-readmes/${FULLPKGNAME}
 share/examples/cups/
 @group _cups
 @sample ${SYSCONFDIR}/cups/
Index: pkg/README
===================================================================
RCS file: pkg/README
diff -N pkg/README
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ pkg/README  17 Dec 2010 15:39:04 -0000
@@ -0,0 +1,34 @@
+$OpenBSD$
+
+Using CUPS under OpenBSD
+========================
+
+If you want to print to non-Postscript printers or use CUPS bundled PPD
+files (i.e. drivers), you'll need to install ghostscript.  You will also
+most probably want to install the foomatic-filters package which
+provides a universal filter script.
+
+Depending on your printer model you may need to install some driver
+package like (non-exhaustive list): hplip, gutenprint, foo2zjs, splix...
+
+libusb and permissions
+----------------------
+To make your USB printer work with CUPS, you'll have to disable ulpt(4)
+in your kernel - see config(8) - which will allow libusb to claim your
+device.
+
+Since USB printing is handled by libusb, you need to allow the _cups
+user rw access to the corresponding USB endpoint. To do so, find where
+your printer is attached to using dmesg(8) then change the ownerships
+accordingly.
+ugenX = /dev/ugenX
+uhubX = /dev/usbX
+
+e.g.
+$ dmesg | grep ugen
+ugen0 at uhub1 port 1 "EPSON USB MFP" rev 1.10/1.00 addr 2
+$ sudo chown _cups /dev/ugen0.* /dev/usb1
+
+The reason we are changing the user and not the group is that it will
+allow for multi-function devices to work for both printing and scanning
+(e.g. by being owned by _cups:_saned).
Index: pkg/cupsd.rc
===================================================================
RCS file: /cvs/ports/print/cups/pkg/cupsd.rc,v
retrieving revision 1.4
diff -u -r1.4 cupsd.rc
--- pkg/cupsd.rc        30 Nov 2010 08:09:09 -0000      1.4
+++ pkg/cupsd.rc        17 Dec 2010 15:39:04 -0000
@@ -13,7 +13,6 @@
         /usr/share/man/cat8/lpd.0"
 
 rc_pre() {
-       [ -e /dev/ulpt0 ] && chown _cups /dev/ulpt[0-1]
        [ -e /dev/lpt0 ] && chown _cups /dev/lp[a,t][0-2]
 
        if [ -e /usr/sbin/lpd.pre-cups -a ! -f /usr/sbin/lpd -a -L 
/usr/sbin/lpc ]; then
@@ -60,7 +59,6 @@
        fi
 
        [ -e /dev/lpt0 ] && chown root /dev/lp[a,t][0-2]
-       [ -e /dev/ulpt0 ] && chown root /dev/ulpt[0-1]
 }
 
 rc_cmd $1
Index: pkg/README
===================================================================
RCS file: /cvs/ports/graphics/sane-backends/pkg/README,v
retrieving revision 1.2
diff -u -r1.2 README
--- pkg/README  6 Dec 2010 18:51:09 -0000       1.2
+++ pkg/README  17 Dec 2010 15:38:46 -0000
@@ -5,27 +5,43 @@
 
 First read ${TRUEPREFIX}/share/doc/sane-backends/PROBLEMS.
 
-Make sure your user has read/write access to the scanner device
-(e.g. /dev/uscanner0) or you will not be able to scan.
+USB
+---
+Since USB scanning is handled by libusb, you need to allow the _saned
+group rw access to the corresponding USB endpoint. To do so, find where
+your scanner is attached to using dmesg(8) then change the ownerships
+accordingly.
+ugenX = /dev/ugenX
+uhubX = /dev/usbX
 
-* USB
-With some USB backends, the OpenBSD uscanner(4) driver does not support
-getting USB vendor and product ids. To make your scanner work with sane,
-you'll have to disable uscanner(4) in your kernel - see config(8) -
-which will allow libusb to claim your device instead. When using libusb,
-you need read/write permissions to ugen(4) (/dev/ugen*.*) and the usb(4)
-controller (/dev/usb*) your scanner is connected to (consider using
-hotplugd(8) attach and detach scripts).
+e.g.
+$ dmesg | grep ugen
+ugen0 at uhub1 port 1 "EPSON USB MFP" rev 1.10/1.00 addr 2
+$ sudo chgrp _saned /dev/ugen0.* /dev/usb1
 
-* SCSI
+The reason we are changing the group and not the user is that it will
+allow for multi-function devices to work for both printing and scanning
+(e.g. by being owned by _cups:_saned).
+
+You can now grant users access to the scanner by adding them to the
+_saned group.
+
+SCSI
+----
 SANE only supports the generic SCSI uk(4) devices.
+Make sure your user has read/write access to the scanner device or you
+will not be able to scan.
 
-* LOCKING
+LOCKING
+-------
 Some backends (like sane-plustek(5)) use a lockfile for allowing
 multiple access to one scanner. If using such a backend, you must
 add yourself to the _saned group or you will not be able to scan.
 
-* NETWORK
+NETWORK
+-------
+The saned(8) daemon needs rw access to your device, make sure the _saned
+group as rw permissions.
 If you're planning on using the SANE network daemon (saned) with
 inetd(8) as opposed to starting it standalone from the provided rc
 script, add the following line in /etc/services:
Index: pkg/saned.rc
===================================================================
RCS file: /cvs/ports/graphics/sane-backends/pkg/saned.rc,v
retrieving revision 1.4
diff -u -r1.4 saned.rc
--- pkg/saned.rc        11 Dec 2010 12:57:37 -0000      1.4
+++ pkg/saned.rc        17 Dec 2010 15:38:46 -0000
@@ -8,12 +8,4 @@
 daemon_flags="-a _saned"
 rc_reload=NO
 
-rc_pre() {
-       [ -e /dev/uscanner0 ] && chgrp _saned /dev/uscanner0
-}
-
-rc_post() {
-       [ -e /dev/uscanner0 ] && chgrp wheel /dev/uscanner0
-}
-
 rc_cmd $1

Reply via email to