[cups] how to disable automatic ppd updating
Michael Pardee
cups_mailing_list at open-sense.com
Tue Oct 3 09:38:46 PDT 2017
I don't know if this is a problem specific to the debian/ubuntu packaging,
but when cups updates it updates my ppds, overwriting my custom changes.
For example I have taken out the duplex options of a pcl 5c driver to
create a queue with no duplex option, but when the cups package updates it
regenerates the ppd and the duplex options are back in my ppds in
/etc/cups/ppd.
My question is: how should I properly disable the automatic ppd updating?
Is there something in the header of the ppd that it is keying off of that I
can change/delete? Do I need to back up and restore my custom ppds whenver
I update cups? I don't want to disable the postinst cups script altogether.
Here is the output when you updates the cups package:
Setting up cups (2.1.3-4ubuntu0.3) ...
Updating PPD files for cups ...
Updating PPD files for cups-filters ...
Updating PPD files for foomatic-db-compressed-ppds ...
Updating PPD files for openprinting-ppds ...
Updating PPD files for brlaser ...
Updating PPD files for c2esp ...
Updating PPD files for cups-pdf ...
Updating PPD files for foo2zjs-common ...
Updating PPD files for gutenprint ...
PPD for printer bw updated
PPD for printer bw_duplex updated
Updating PPD files for hpcups ...
PPD for printer youth updated
PPD for printer youth_duplex updated
Updating PPD files for hpijs ...
Updating PPD files for postscript-hp ...
Updating PPD files for ptouch ...
Updating PPD files for pxljr ...
Updating PPD files for sag-gdi ...
Updating PPD files for splix ...
And here is the section of the .deb postinst script that is doing the
update:
# ppd_updater is supposed to be launched only with a running CUPS.
ppd_updater () {
driverregexp="$1"
gennicknameregexp="$2"
[ ! -z "$gennicknameregexp" ] && \
gennicknameregexp="; $gennicknameregexp"
gennicknameregexp='s/\s*\(recommended\)//'"$gennicknameregexp"
tmpfile1=`mktemp -t updateppds.XXXXXX`
tempfiles="$tempfiles $tmpfile1"
grep -E $driverregexp $tmpfile0 > $tmpfile1 || :
cd /etc/cups/ppd
for ppd in *.ppd; do
[ -r "$ppd" ] || continue
queue=${ppd%.ppd}
lpstat -h /var/run/cups/cups.sock -p "$queue" >/dev/null 2>&1
|| continue
nickname=`grep '\*NickName:' "$ppd" | cut -d '"' -f 2 | perl -p
-e 's/\n$//' | perl -p -e "$gennicknameregexp" | perl -p -e
's/(\W)/\\\\$1/g'`
lang=`grep '\*LanguageVersion:' "$ppd" | cut -d ' ' -f 2 | perl
-e 'print lc(<>)' | perl -p -e 's/[\r\n]//gs'`
ppdfound="0"
englishppduri=""
tmpfile2=`mktemp -t updateppds.XXXXXX`
tempfiles="$tempfiles $tmpfile2"
cat $tmpfile1 | perl -p -e "$gennicknameregexp; s/\n*$/\n/s" |
grep -E '^\S+\s+.*'"$nickname"'$' | cut -d ' ' -f 1 > $tmpfile2
while read newppduri; do
[ "$ppdfound" = "0" ] && lpadmin -h /var/run/cups/cups.sock
-p "$queue" -m $newppduri 2>/dev/null || continue
newlang=`grep '\*LanguageVersion:' "$ppd" | cut -d ' ' -f 2
| perl -e 'print lc(<>)' | perl -p -e 's/[\r\n]//gs'`
[ "$newlang" = "$lang" ] && ppdfound="1"
[ "$newlang" = "english" ] && englishppduri="$newppduri"
done < $tmpfile2
[ "$ppdfound" = "0" ] && [ ! -z "$englishppduri" ] && lpadmin
-h /var/run/cups/cups.sock -p "$queue" -m $englishppduri 2>/dev/null &&
ppdfound="1"
[ "$ppdfound" = "1" ] && echo PPD for printer $queue updated >&2
done
return 0
}
Here is the top part of one example ppd:
*PPD-Adobe: "4.3"
*% PPD file for CUPS/Gutenprint.
*% Copyright 1993-2008 by Mike Sweet and Robert Krawitz.
*% This program is free software; you can redistribute it and/or
*% modify it under the terms of the GNU General Public License,
*% version 2, as published by the Free Software Foundation.
*%
*% This program is distributed in the hope that it will be useful, but
*% WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY
*% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
*% for more details.
*%
*% You should have received a copy of the GNU General Public License
*% along with this program; if not, write to the Free Software
*% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA.
*%
*FormatVersion: "4.3"
*FileVersion: "5.2.11"
*LanguageVersion: English
*LanguageEncoding: ISOLatin1
*PCFileName: "STP01766.PPD"
*Manufacturer: "Generic"
*Product: "(Generic PCL 5c Printer)"
*ModelName: "Generic PCL 5c Printer"
*ShortNickName: "Generic PCL 5c Printer"
*NickName: "Generic PCL 5c Printer - CUPS+Gutenprint v5.2.11"
*PSVersion: "(3010.000) 0"
*LanguageLevel: "3"
*ColorDevice: False
*DefaultColorSpace: Gray
*cupsManualCopies: True
*FileSystem: False
*LandscapeOrientation: Plus90
*TTRasterizer: Type42
*cupsVersion: 1.2
*cupsFilter: "application/vnd.cups-raster 100 rastertogutenprint.5.2"
*cupsLanguages: "ca cs da de el en_GB es fi fr gl hu it ja nb nl pl pt ru
sk sl sv tr uk vi zh_CN zh_TW"
*StpDriverName: "pcl-g_5c"
*StpDriverModelFamily: "6_pcl"
*StpPPDLocation:
"/usr/share/cups/model/gutenprint/5.2/C/ppd/stp-pcl-g_5c.5.2.ppd"
*StpLocale: "C"
*VariablePaperSize: false
...
Thanks,
Michael Pardee
Open Sense Solutions LLC
http://open-sense.com
888-323-1742
More information about the cups
mailing list