ppdcfile(5)
ppdcfile(5) β the cups ppd compiler source file format (deprecated, bestie, i'm so serious)
okay so this is a page from the OpenPrinting manual set, and it's all about how you write the meta files that feed the CUPS PPD compiler. it's giving "vintage" in the saddest way possible and we'll get to that. π«Ά
β¨ NAME β¨
ppdcfile β cups ppd compiler source file format (deprecated)
π DESCRIPTION π
so the CUPS PPD compiler reads meta files β little text files that describe one or more PPD files β and then generates those PPD files via ppdc(1). this page is a quick reference to the supported keywords, and the vibe is: keep it open next to the online help for CUPS, they're a set. π
the source file format is plain ASCII text, so you can open it in literally your favorite text editor, no drama. comments are supported both ways, C style and C++ style:
/* ... */
// ...
printer driver info can be grouped and shared using curly braces:
{ ... }
and here's the important part, no cap: PPD files get written when a close brace or end-of-file is seen and a PCFileName directive has been defined. both. you need both. π
directives can go anywhere on a line, and they're followed by one or more values. here's the whole list of available directives and the values they accept β all of them, every single one, i'm not skipping a thing:
#define name valueβ define a name with a value#elif {name | value}β else-if, take a name or a value#elseβ the fallback branch#endifβ close that conditional, periodt#font name encoding "version" charset statusβ declare a font with encoding, quoted version, charset and status#if {name | value}β start a conditional on a name or a value#include <filename>β include a file using angle brackets#include "filename"β include a file using quotes#media name width lengthβ a media entry with name, width, length#media "name/text" width lengthβ same, but with a quotedname/text#po locale "filename"β pull in a translation for a locale from a quoted filenameAttribute name "" valueβ attribute with an empty quoted keywordAttribute name keyword valueβ attribute with a plain keywordAttribute name "keyword/text" valueβ attribute with a quotedkeyword/textChoice name "code"β a choice with a quoted codeChoice "name/text" "code"β a choice with quotedname/textand quoted codeColorDevice boolean-valueβ is this a color device, true or falseColorModel name colorspace colororder compressionβ color model with colorspace, colororder, compressionColorModel "name/text" colorspace colororder compressionβ same but with a quotedname/textColorProfile resolution/mediatype gamma density matrixβ a color profile keyed by resolution/mediatypeCopyright "text"β the copyright text, in quotesCustomMedia name width length left bottom right top "size-code" "region-code"β custom media with all the measurements plus quoted size and region codesCustomMedia "name/text" width length left bottom right top "size-code" "region-code"β same, quotedname/textflavorCutter boolean-valueβ does it cut, yes or noDarkness temperature nameβ darkness with temperature and nameDarkness temperature "name/text"β darkness with temperature and a quotedname/textDriverType typeβ the driver typeDuplex typeβ the duplex typeFilter mime-type cost programβ a filter with mime-type, cost, programFinishing nameβ a finishing optionFinishing "name/text"β a finishing option with quotedname/textFont *β wildcard font, the icon of "all of them"Font name encoding "version" charset statusβ a specific font with encoding, quoted version, charset, statusGroup nameβ a groupGroup "name/text"β a group with quotedname/textHWMargins left bottom right topβ hardware margins, all four sidesInputSlot position nameβ an input slot at a position with a nameInputSlot position "name/text"β same but quotedname/textInstallable nameβ an installable optionInstallable "name/text"β installable with quotedname/textLocAttribute name "keyword/text" valueβ a localized attribute with quotedkeyword/textManualCopies boolean-valueβ manual copies, true or falseManufacturer "name"β the manufacturer, in quotesMaxSize width lengthβ max size, width and lengthMediaSize nameβ a media size by nameMediaType type nameβ media type with type and nameMediaType type "name/text"β media type with type and quotedname/textMinSize width lengthβ min size, width and lengthModelName "name"β the model name, in quotesModelNumber numberβ the model numberOption name type section orderβ an option with type, section, orderOption "name/text" type section orderβ option with quotedname/textPCFileName "filename.ppd"β the output PPD filename, in quotes. this one is THE one, without it nothing gets written, no cap π¨Resolution colorspace bits-per-color row-count row-feed row-step nameβ a resolution entry, all the numbers plus a nameResolution colorspace bits-per-color row-count row-feed row-step "name/text"β same, quotedname/textSimpleColorProfile resolution/mediatype density yellow-density red-density gamma red-adjust green-adjust blue-adjustβ simple color profile, keyed by resolution/mediatype, with all the density/gamma/adjust numbersThroughput pages-per-minuteβ throughput, in pages per minuteUIConstraints "*Option1 *Option2"β two options constrained togetherUIConstraints "*Option1 Choice1 *Option2"β option one with a choice, plus option twoUIConstraints "*Option1 *Option2 Choice2"β option one, plus option two with a choiceUIConstraints "*Option1 Choice1 *Option2 Choice2"β both options with choices, the full comboVariablePaperSize boolean-valueβ variable paper size, true or falseVersion numberβ the version number
π NOTES π
okay bestie, deep breath.
PPD files are deprecated and will no longer be supported in a future feature release of CUPS.
that's the whole thing, that's the note. π if you've got printers that don't support IPP, you can support them with applications like ippeveprinter(1) instead. the future is now and it's IPP.
π¦ SEE ALSO π¦
go read these too, they're the friend group:
ppdc(1)ppdhtml(1)ppdi(1)ppdmerge(1)ppdpo(1)- CUPS Online Help (
http://localhost:631/help)
π COPYRIGHT π
Copyright Β© 2020-2024 by OpenPrinting.
and that's the page, fr fr. this one came out of the CUPS manual, dated 2021-02-28 β if you needed the receipts, there they are. stay iconic, go write your PPDs while you still can. πβ¨ππ¦πΈπ π«Ά
π¦ where this page comes from
- alpine 3.22: cups-doc 2.4.18-r0 Β· Apache-2.0
- alpine 3.23: cups-doc 2.4.18-r0 Β· Apache-2.0
- alpine 3.24: cups-doc 2.4.19-r1 Β· Apache-2.0
- centos-stream 10: cups 1:2.4.10-18.el10 Β· Apache-2.0 WITH LLVM-exception AND BSD-3-Clause AND Zlib AND BSD-2-Clause
- debian trixie: cups-ppdc 2.4.10-3+deb13u1 Β· Apache-2.0-with-GPL2-LGPL2-Exception
- debian trixie: cups-ppdc 2.4.10-3+deb13u2 Β· Apache-2.0-with-GPL2-LGPL2-Exception
- fedora 43: cups 1:2.4.14-2.fc43 Β· Apache-2.0 WITH LLVM-exception AND BSD-3-Clause AND Zlib AND BSD-2-Clause
- fedora 43: cups 1:2.4.19-3.fc43 Β· Apache-2.0 WITH LLVM-exception AND BSD-3-Clause AND Zlib AND BSD-2-Clause
- fedora 44: cups 1:2.4.16-7.fc44 Β· Apache-2.0 WITH LLVM-exception AND BSD-3-Clause AND Zlib AND BSD-2-Clause
- fedora 44: cups 1:2.4.19-3.fc44 Β· Apache-2.0 WITH LLVM-exception AND BSD-3-Clause AND Zlib AND BSD-2-Clause
- nixpkgs unstable: cups 2.4.19
- opensuse-leap 16.0: cups-ddk 2.4.19-160000.2.1 Β· Apache-2.0
- opensuse-leap 16.0: cups-ddk 2.4.19-160000.2.1 Β· Apache-2.0
- opensuse-leap 16.0: cups-ddk 2.4.19-160000.2.1 Β· Apache-2.0
- opensuse-leap 16.0: cups-ddk 2.4.19-160000.2.1 Β· Apache-2.0
- ubuntu questing: cups-ppdc 2.4.12-0ubuntu3
- ubuntu questing: cups-ppdc 2.4.12-0ubuntu3.10
- ubuntu resolute: cups-ppdc 2.4.16-1ubuntu1 Β· Apache-2.0-with-GPL2-LGPL2-Exception
- ubuntu resolute: cups-ppdc 2.4.16-1ubuntu1.3 Β· Apache-2.0-with-GPL2-LGPL2-Exception
- ubuntu stonking: cups-ppdc 2.4.16-1ubuntu3 Β· Apache-2.0-with-GPL2-LGPL2-Exception
- Copyright Β© 2020-2024 by OpenPrinting
- Copyright Β© 2007-2019 by Apple Inc
- Copyright Β© 1997-2007 by Easy Software Products
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms