Xref: utzoo comp.unix.wizards:22268 comp.unix.i386:5552 comp.unix.xenix:11864 Path: utzoo!attcan!uunet!van-bc!twg!bill From: bill@twg.bc.ca (Bill Irwin) Newsgroups: comp.unix.wizards,comp.unix.i386,comp.unix.xenix Subject: Re: lpadmin(8) question Summary: Multiple lp destinations to 1 printer get mixed Keywords: lp systemv Message-ID: <162@twg.bc.ca> Date: 2 Jun 90 10:19:42 GMT References: <453@van-bc.UUCP> Reply-To: bill@.UUCP (Bill Irwin) Organization: TWG The Westrheim Group, Vancouver BC Lines: 78 Expires: Sender: Followup-To: Distribution: In article <453@van-bc.UUCP> sl@van-bc.UUCP (Stuart Lynne) writes: >Which is what I need to do. I have two different packages that want to >install specialized lp destinations with appropriate filters. Can I install >both and have lp figure out how multiplex the requests for the two >destinations to the one physical printer? > >Or will I have to hack the two interfaces together and add options? > >What I wanted was for file1 to be printed, followed by file2. What I got was >file1 intermingled with file2 being printed. I have had this same problem. I have one printer that is used for four lp destinations. When jobs are queued to two or more of the destinations at the same time, you get garbage. The solution I came up with works very well. It involves adding some lines to the models which will check to see if there is a lock file in place for this physical printer, wait if there is; make a lock file if there isn't; print the job(s); then remove the lock. I have attached excerpts from one of my models. : computer_pr # Looks for print jobs on any printer on the same port as # computer_pr, and waits until there are no jobs before # continuing. # if [ -f /tmp/computer.lock ] then while [ -f /tmp/computer.lock ] do sleep 60 done fi touch /tmp/computer.lock # # Copyright (C) The Santa Cruz Operation, 1985, 1986. # This Module contains Proprietary Information of # The Santa Cruz Operation, Microsoft Corporation # and AT&T, and should be treated as Confidential. # #! computer_pr # Options: lp -ob no banner # . [rest of the standard model here] . . # send the file(s) to the standard out $copies times while [ "$copies" -gt 0 ] do for file do echo -n " 0 6 F66" # Oki 32x codes cat "$file" 2>&1 echo "\f\c" echo -n " 0 6 F66" # Oki 32x codes done copies=`expr $copies - 1` done rm /tmp/computer.lock stty -hupcl 0<&1 exit 0 The only drawback with this approach that I have encountered is when you cancel a print job the lock is not removed. You have to remember to "rm /tmp/computer.lock" after your cancel, otherwise you next jobs will never print. I remember trying to solve this once by trapping the rm lock sequence inside the model, but it didn't work. I would be interested in finding a better solution than this which doesn't force the user to remember to remove a dead lock file. Good luck. -- Bill Irwin - TWG The Westrheim Group - Vancouver, BC, Canada ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uunet!van-bc!twg!bill (604) 431-9600 (voice) | UNIX Systems Bill.Irwin@twg.bc.ca (604) 431-4629 (fax) | Integration