|
Filter Chain debugging [was: Filter Chain not working]: msg#00026printing.cups.devel
alex-0oCsfqmDL6BZroRs9YW3xA@xxxxxxxxxxxxxxxx wrote: > I have set up 2 cups filters in my PPD file. When I print only the first > filter is executed. That's by design. While you *can* name several "cupsFilters" in the PPD, for each job only one is executed (the first one matching the named MIME type). The line "cupsFilter" means this to CUPS: "after you have exectued that filter named here, the job is ready with filtering and should now be sent straight to the backend." > The first filter is the bash script show below: > > As I forward > > -------------------------------------------------- > *NickName: "Canon S400" > *cupsVersion: 1.1 > *cupsManualCopies: True > *cupsFilter: "*/* 0 prefilter" > *cupsFilter: "application/pdf 0 > /System/Library/Printers/Libraries/PrintJobMgr/Contents/MacOS/PrintJobMgr" > > *% Paper Handling =================== > *OpenUI *PageSize: PickOne > *DefaultPageSize: na-letter > -------------------------------------------------- > #!/bin/bash > date >> /tmp/prefilter.log > echo 0 $0 >> /tmp/prefilter.log > echo 1 $1 >> /tmp/prefilter.log > echo 2 $2 >> /tmp/prefilter.log > echo 3 $3 >> /tmp/prefilter.log > echo 4 $4 >> /tmp/prefilter.log > echo 5 $5 >> /tmp/prefilter.log > echo 6 $6 >> /tmp/prefilter.log > cat $6 This looks pretty much like you don't do anything to the printjob itself, but you are just curious to see how the system works and write a log. > -------------------------------------------------- > How can I call the second filter specified in the PPD file ? You can't. After one of the filters named in the PPD matches, no further filtering is done by CUPS. > Thanks > Alex If you want to log what filters see as commandline parameters and as environment variables you have to write a wrapper script around your real filters. If you just want to *see* what's going on, set "LogLevel debug2" and grep for "envp" and "argv" in the error_log. Cheers, Kurt P.S.: a very elegant way to get one single wrapper script (call it "cups-proxy-filter.sh") around all your CUPS filters is this: =================================================================== 1. In your homedirectory, write the cupsfilterproxy.sh: =================================================================== ------------- snip ---------------------- #!/bin/bash # (c) Kurt Pfeifle <kpfeifle-eG1X/KtG1iM@xxxxxxxxxxxxxxxx> # <pfeifle-RoXCvvDuEio@xxxxxxxxxxxxxxxx> # Script is GPL and free to use and modify # # Proxy filter for CUPS to harvest intermediate # files from each step in the filtering chain # # # log a lot of stuff which may be interesting for us # so we learn how CUPS works.... ;-) LOG=/tmp/cupsproxyfilter.log echo "=======================================================" >> $LOG date >> $LOG echo "=======================================================" >> $LOG echo "I am running under this user ID:" >> $LOG id >> $LOG echo "=======================================================" >> $LOG env >> $LOG echo 0 $0 >> $LOG echo 1 $1 >> $LOG echo 2 $2 >> $LOG echo 3 $3 >> $LOG echo 4 $4 >> $LOG echo 5 $5 >> $LOG echo 6 $6 >> $LOG # create a directory to store the output of each single filter # under a uniq name for later debugging purpose [ -d /tmp/cups-filter-outputs ] || mkdir /tmp/cups-filter-outputs # in case of wrong number of arguments: print usage hint if test "$#" -eq "0"; then echo "ERROR: `basename $0` job-id user title copies options [file]" 1>&2 exit 0 fi if test "$#" -lt "5"; then echo "ERROR: Number of arguments ($#) is wrong" 1>&2 echo "USAGE: `basename $0` job-id user title copies options [file]" 1>&2 exit 1 fi if test "$#" -gt "6"; then echo "ERROR: Number of arguments ($#) is wrong" 1>&2 echo "USAGE: `basename $0` job-id user title copies options [file]" 1>&2 exit 1 fi if test "$#" -eq "5"; then INPUT="-" else INPUT="$6" fi echo $0.bin "$@" >> $LOG echo "$#" >> $LOG echo `id` >> $LOG exec $0.bin "$@" | tee /tmp/cups-filter-outputs/JobID-$1-$3-`basename $0`-output ------------- snip ---------------------- =================================================================== 2. make a complete backup of your CUPS filter dir: =================================================================== cd $HOME su cd `cups-config --serverbin` cp -R filter filter.bak =================================================================== 3. put the cups-proxy-filter.sh into the CUPS filter dir: =================================================================== cd $HOME su cp cups-proxy-filter.sh `cups-config --serverbin`/filter/ chmod a+x `cups-config --serverbin`/filter/cups-proxy-filter.sh =================================================================== 4. rename all filters: =================================================================== su cd `cups-config --serverbin`/filter/; for i in *; do mv $i $i.bin; done =================================================================== 5. symlink the original filter names to point to your proxyfilter: =================================================================== su cd `cups-config --serverbin`/filter/; for i in *.bin; do ln -s $i `echo $i|sed 's#.bin##'`; done =================================================================== 6. restart cups =================================================================== You should now have all your original filternames renamed to a "filtername.bin" schema, and all original filternames pointing as a symlink to your proxy filter. The proxy filter then itself calls the original "filtername.bin" to do the job while at the same time logging stuff and branching off a copy of each intermediate file in the filtering chain (where the intermediate files are stored to "/tmp/cups-filter-outputs/", under easily identifiable names. Now you can explore the CUPS filtering system to your heart's content, run filters on the commandline, print stuff and fill your harddisk quickly with intermediate files from teh printing process ... ;-) Hope this helps, Kurt |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Filter Chain not working: 00026, alex-0oCsfqmDL6BZroRs9YW3xA |
|---|---|
| Next by Date: | Re: ipp_request_t union help: 00026, Michael Sweet |
| Previous by Thread: | Filter Chain not workingi: 00026, alex-0oCsfqmDL6BZroRs9YW3xA |
| Next by Thread: | Regarding IPP headers: 00026, p . mdriyaz-Re5JQEeQqe8AvxtiuMwx3w |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |