{"id":19218876,"url":"https://github.com/openprinting/gutenprint-printer-app","last_synced_at":"2026-06-25T20:30:19.986Z","repository":{"id":146907899,"uuid":"408590649","full_name":"OpenPrinting/gutenprint-printer-app","owner":"OpenPrinting","description":"Gutenprint Printer Application","archived":false,"fork":false,"pushed_at":"2025-02-19T07:23:33.000Z","size":125,"stargazers_count":21,"open_issues_count":4,"forks_count":6,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-02-19T08:26:25.774Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PostScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenPrinting.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-20T20:27:45.000Z","updated_at":"2025-02-19T07:23:36.000Z","dependencies_parsed_at":"2024-01-15T13:22:11.450Z","dependency_job_id":"da3d4d8a-067a-4639-b6dc-ff499a8469fb","html_url":"https://github.com/OpenPrinting/gutenprint-printer-app","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenPrinting%2Fgutenprint-printer-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenPrinting%2Fgutenprint-printer-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenPrinting%2Fgutenprint-printer-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenPrinting%2Fgutenprint-printer-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenPrinting","download_url":"https://codeload.github.com/OpenPrinting/gutenprint-printer-app/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240292395,"owners_count":19778311,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T14:28:35.254Z","updated_at":"2026-06-25T20:30:19.909Z","avatar_url":"https://github.com/OpenPrinting.png","language":"PostScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gutenprint Printer Application\n\n## INTRODUCTION\n\nThis repository contains a Printer Application for printing with the\nGutenprint printer driver. This allows high-quality printing on a wide\nrange of inkjet, lasre, and dye-sublimation printers, especially\ninkjets from Epson and Canon, PCL laser printers (both monochrome and\ncolor), and dye-sublimation photo printers. This driver is especially\nrecommended for photos and fine-art printing. It is also an\nalternative to the [Ghostscript Printer\nApplication](https://github.com/OpenPrinting/ghostscript-printer-app)\nfor PCL 4/5c/e laser printers.\n\nIt uses [PAPPL](https://www.msweet.org/pappl) to support IPP printing\nfrom multiple operating systems. In addition, it uses the resources of\n[cups-filters 2.x](https://github.com/OpenPrinting/cups-filters)\n(filter functions in libcupsfilters, libppd) and\n[pappl-retrofit](https://github.com/OpenPrinting/pappl-retrofit)\n(encapsulating classic CUPS drivers in Printer Applications). The code\nof pappl-retrofit is derived from the\n[hp-printer-app](https://github.com/michaelrsweet/hp-printer-app).\n\nThe printer driver itself and the software to communicate with the\nprinter hardware is taken from the [Gutenprint\nproject](http://gimp-print.sourceforge.net/), also the Information\nabout supported printer models and their capabilities.\n\nYour contributions are welcome. Please post [issues and pull\nrequests](https://github.com/OpenPrinting/gutenprint-printer-app).\n\n**Note: Gutenprint is an actively maintained project, therefore it\nwould also be the correct way if Gutenprint gets turned into a Printer\nApplication by its maintainers, or at least this be offered as an\nalternative to the classic CUPS driver. Especially they should create\na native Printer Application, meaning that it does not use PPDs, CUPS\nfilters, and CUPS backends internally. As soon as the Gutenprint\nproject provides a native Printer Application, this Printer\nApplication retro-fitting the CUPS driver will get discontinued.**\n\nPlease check whether your printer is a driverless IPP printer\n(AirPrint, Mopria, IPP Everywhere, Wi-Fi Direct Print, prints from\nphones) as in this case you do not need any Printer Application at\nall. Most modern printers, even the cheapest models, are driverless\nIPP printers. Even USB-only printers can be driverless IPP, and you\ncan generally use driverless IPP via USB, try\n[ipp-usb](https://github.com/OpenPrinting/ipp-usb) for these cases\nfirst.\n\n\n### Properties\n\n- A Printer Application providing the Gutenprint CUPS Raster printer\n  driver and all printer's PPDs of Gutenprint. This allows easy\n  printing in high quality, including photos on photo paper. The\n  specialized CUPSbackend for dye sublimation printers with\n  proprietary USB communication protocols is also included.\n\n- The Printer Application checks the supported number of\n  vendor-specific options/attributes of the installed PAPPL library,\n  `PAPPL_MAX_VENDOR` and uses the expert PPDs only if 256 or more\n  vendor-specific options are supported, otherwise the simplified PPDs\n  are used. By default, the number is 32 and in the Snap we modify it\n  to be 256, meaning that the Gutenprint Printer Application Snap in\n  the Snap Store uses expert PPDs, while a quick build with `make`,\n  using an installed standard PAPPL library uses the simplified PPD\n  files.\n\n- Available printer devices are discovered (and used) with CUPS'\n  backends and with Gutenprint's dye-sublimation printer backend in\n  addition and not with PAPPL's own backends. This way dye-sublimation\n  printers are discovered with the correct backend for their totally\n  proprietary communication protocol. Also quirk workarounds for USB\n  printers with compatibility problems are used (and are editable) and\n  Gutenprint output can get send to the printer via IPP, IPPS\n  (encrypted!), and LPD in addition to socket (usually port 9100). The\n  SNMP backend can get configured (community, address scope).\n\n- If you have an unusual system configuration or a personal firewall\n  your printer will perhaps not get discovered. In this situation the\n  fully manual \"Network Printer\" entry in combination with the\n  hostname/IP field can be helpful.\n\n- PWG Raster, Apple Raster or image input data does not get converted\n  to PostScript or PDF, it is only converted/scaled to the required\n  color space and resolution and then fed into the Gutenprint CUPS\n  Raster driver.\n\n- PDF and PostScript input data is rendered into raster data using\n  Ghostscript.\n\n- The information about which printer models are supported and which\n  are their capabilities is based on the PPD files which get\n  auto-generated by Gutenprint when using it with CUPS. The PPD\n  generator is included in the Snap.\n\n- Standard job IPP attributes are mapped to the driver's option\n  settings best fitting to them so that users can print from any type\n  of client (like for example a phone or IoT device) which only\n  supports standard IPP attributes and cannot retrive the PPD\n  options. Trays, media sizes, media types, and duplex can get mapped\n  easily, but when it comes to color and quality it gets more complex,\n  as relevant options differ a lot in the PPD files. Here we use an\n  algorithm which automatically (who wants hand-edit ~3000 PPD files\n  for the assignments) finds the right set of option settings for each\n  combination of `print-color-mode` (`color`/`monochrome`),\n  `print-quality` (`draft`/`normal`/`high`), and\n  `print-content-optimize`\n  (`auto`/`photo`/`graphics`/`text`/`text-and-graphics`) in the PPD of\n  the current printer. So you have easy access to the full quality or\n  speed of your printer without needing to deal with printer-specific\n  option settings (the original options are still accessible via web\n  admin interface).\n\n### To Do\n\n- PDF test page, for example generated with the bannertopdf filter, or\n  perhaps even a Raster test page.\n\n- Human-readable strings for vendor options (Needs support by PAPPL:\n  [Issue #58: Localization\n  support](https://github.com/michaelrsweet/pappl/issues/58))\n\n- Internationalization/Localization (Needs support by PAPPL: [Issue\n  #58: Localization\n  support](https://github.com/michaelrsweet/pappl/issues/58))\n\n- SNMP Ink level check via ps_status() function (Needs support by PAPPL:\n  [Issue #83: CUPS does IPP and SNMP ink level polls via backends,\n  PAPPL should have functions for\n  this](https://github.com/michaelrsweet/pappl/issues/83))\n\n\n## THE SNAP\n\n### Installing and building\n\nTo just run and use this Printer Application, simply install it from\nthe Snap Store:\n\n```\nsudo snap install --edge gutenprint-printer-app\n```\n\nThen follow the instructions below for setting it up.\n\nTo build the Snap by yourself, in the main directory of this\nrepository run\n\n```\nsnapcraft snap\n```\n\nThis will download all needed packages and build the Gutenprint\nPrinter Application. Note that PAPPL and cups-filters (upcoming 2.0)\nare pulled directly from their GIT repositories, as there are no\nappropriate releases yet. This can also lead to the fact that this\nPrinter Application will suddenly not build any more.\n\nTo install the resulting Snap run\n\n```\nsudo snap install --dangerous gutenprint-printer-app_1.0_amd64.snap\n```\n\n\n### Setting up\n\nThe Printer Application will automatically be started as a server daemon.\n\nEnter the web interface\n\n```\nhttp://localhost:8000/\n```\n\nUse the web interface to add a printer. Supply a name, select the\ndiscovered printer, then select make and model. Also set the installed\naccessories, loaded media and the option defaults. Accessory\nconfiguration and option defaults can also offen get polled from the\nprinter.\n\nThen print PDF, PostScript, JPEG, Apple Raster, or PWG Raster files\nwith\n\n```\ngutenprint-printer-app FILE\n```\n\nor print with CUPS, CUPS (and also cups-browsed) discover and treat\nthe printers set up with this Printer Application as driverless IPP\nprinters (IPP Everywhere and AirPrint).\n\nSee\n\n```\ngutenprint-printer-app --help\n```\n\nfor more options.\n\nUse the \"-o log-level=debug\" argument for verbose logging in your\nterminal window.\n\nYou can add files to `/var/snap/gutenprint-printer-app/common/usb/`\nfor additional USB quirk rules. Edit the existing files only for quick\ntests, as they get replaced at every update of the Snap (to introduce\nnew rules).\n\nYou can edit the\n`/var/snap/gutenprint-printer-app/common/cups/snmp.conf` file for\nconfiguring SNMP network printer discovery.\n\n## THE ROCK (OCI CONTAINER IMAGE)\n\n### Install from Docker Hub\n#### Prerequisites\n\n1. **Docker Installed**: Ensure Docker is installed on your system. You can download it from the [official Docker website](https://www.docker.com/get-started).\n```sh\n  sudo snap install docker\n```\n\n#### Step-by-Step Guide\n\nYou can pull the `gutenprint-printer-app` Docker image from either the GitHub Container Registry or Docker Hub.\n\n**From GitHub Container Registry** \u003cbr\u003e\nTo pull the image from the GitHub Container Registry, run the following command:\n```sh\n  sudo docker pull ghcr.io/openprinting/gutenprint-printer-app:latest\n```\n\nTo run the container after pulling the image from the GitHub Container Registry, use:\n```sh\n  sudo docker run -d \\\n      --name gutenprint-printer-app \\\n      --network host \\\n      -e PORT=\u003cport\u003e \\\n      ghcr.io/openprinting/gutenprint-printer-app:latest\n```\n\n**From Docker Hub** \u003cbr\u003e\nAlternatively, you can pull the image from Docker Hub, by running:\n```sh\n  sudo docker pull openprinting/gutenprint-printer-app\n```\n\nTo run the container after pulling the image from Docker Hub, use:\n```sh\n  sudo docker run -d \\\n      --name gutenprint-printer-app \\\n      --network host \\\n      -e PORT=\u003cport\u003e \\\n      openprinting/gutenprint-printer-app:latest\n```\n\n- `PORT` is an optional environment variable used to start the printer-app on a specified port. If not provided, it will start on the default port 8000 or, if port 8000 is busy, on 8001 and so on.\n- **The container must be started in `--network host` mode** to allow the Printer-Application instance inside the container to access and discover printers available in the local network where the host system is in.\n- Alternatively using the internal network of the Docker instance (`-p \u003cport\u003e:8000` instead of `--network host -e PORT=\u003cport\u003e`) only gives access to local printers running on the host system itself.\n\n### Setting Up and Running gutenprint-printer-app locally\n\n#### Prerequisites\n\n**Docker Installed**: Ensure Docker is installed on your system. You can download it from the [official Docker website](https://www.docker.com/get-started) or from the Snap Store:\n```sh\n  sudo snap install docker\n```\n\n**Rockcraft**: Rockcraft should be installed. You can install Rockcraft using the following command:\n```sh\n  sudo snap install rockcraft --classic\n```\n\n**Skopeo**: Skopeo should be installed to compile `*.rock` files into Docker images. It comes bundled with Rockcraft, so no separate installation is required.\n\n#### Step-by-Step Guide\n\n**Build gutenprint-printer-app rock**\n\nThe first step is to build the Rock from the `rockcraft.yaml`. This image will contain all the configurations and dependencies required to run gutenprint-printer-app.\n\nOpen your terminal and navigate to the directory containing your `rockcraft.yaml`, then run the following command:\n\n```sh\n  rockcraft pack -v\n```\n\n**Compile to Docker Image**\n\nOnce the rock is built, you need to compile docker image from it.\n\n```sh\n  sudo rockcraft.skopeo --insecure-policy copy oci-archive:\u003crock_image\u003e docker-daemon:gutenprint-printer-app:latest\n```\n\n**Run the gutenprint-printer-app Docker Container**\n\n```sh\n  sudo docker run -d \\\n      --name gutenprint-printer-app \\\n      --network host \\\n      -e PORT=\u003cport\u003e \\\n      gutenprint-printer-app:latest\n```\n- `PORT` is an optional environment variable used to start the printer-app on a specified port. If not provided, it will start on the default port 8000 or, if port 8000 is busy, on 8001 and so on.\n- **The container must be started in `--network host` mode** to allow the Printer-Application instance inside the container to access and discover printers available in the local network where the host system is in.\n- Alternatively using the internal network of the Docker instance (`-p \u003cport\u003e:8000` instead of `--network host -e PORT=\u003cport\u003e`) only gives access to local printers running on the host system itself.\n\n#### Setting up\n\nEnter the web interface\n\n```sh\nhttp://localhost:\u003cport\u003e/\n```\n\nUse the web interface to add a printer. Supply a name, select the\ndiscovered printer, then select make and model. Also set the installed\naccessories, loaded media and the option defaults. If the printer is a\nPostScript printer, accessory configuration and option defaults can\nalso often get polled from the printer.\n\n\u003c!-- Begin Included Components --\u003e\n## Included Components\n  - pappl v1.4.8\n  - qpdf v11.10.1\n  - ghostscript ghostpdl-10.05.0-test-base-001\n  - cups v2.4.11\n  - libcupsfilters 2.1.1\n  - libppd 2.1.1\n  - gutenprint debian/5.3.4.20220624T01008808d602-4\n\u003c!-- End Included Components --\u003e\n\n## BUILDING WITHOUT PACKAGING OR INSTALLATION\n\nYou can also do a \"quick-and-dirty\" build without snapping and without\nneeding to install [PAPPL](https://www.msweet.org/pappl),\n[cups-filters 2.x](https://github.com/OpenPrinting/cups-filters), and\n[pappl-retrofit](https://github.com/OpenPrinting/pappl-retrofit) into\nyour system. You need a directory with the latest GIT snapshot of\nPAPPL, the latest GIT snapshot of cups-filters, and the latest GIT\nsnapshot of pappl-retrofit (master branches of each). They all need to\nbe compiled (`./autogen.sh; ./configure; make`), installing not\nneeded. Also install the header files of all needed libraries\n(installing \"libcups2-dev\" should do it).\n\nIn the directory with gutenprint-printer-app.c run the command line\n\n```\ngcc -o gutenprint-printer-app gutenprint-printer-app.c $PAPPL_SRC/pappl/libpappl.a $CUPS_FILTERS_SRC/.libs/libppd.a $CUPS_FILTERS_SRC/.libs/libcupsfilters.a $PAPPL_RETROFIT_SRC/.libs/libpappl-retrofit.a -ldl -lpthread  -lppd -lcups -lavahi-common -lavahi-client -lgnutls -ljpeg -lpng16 -ltiff -lz -lm -lusb-1.0 -lpam -lqpdf -lstdc++ -I. -I$PAPPL_SRC/pappl -I$CUPS_FILTERS_SRC/ppd -I$CUPS_FILTERS_SRC/cupsfilters -I$PAPPL_RETROFIT_SRC/pappl/retrofit -L$CUPS_FILTERS_SRC/.libs/ -L$PAPPL_RETROFIT_SRC/.libs/\n```\n\nThere is also a Makefile, but this needs PAPPL, cups-filters 2.x, and\npappl-retrofit to be installed into your system.\n\nRun\n\n```\n./gutenprint-printer-app --help\n```\n\nWhen running the non-snapped version, by default, PPD files are\nsearched for in\n\n```\n/usr/share/ppd/\n/usr/lib/cups/driver/\n/var/lib/gutenprint-printer-app/ppd/\n```\n\nYou can set the `PPD_PATHS` environment variable to search other\nplaces instead:\n\n```\nPPD_PATHS=/path/to/my/ppds:/my/second/place ./gutenprint-printer-app server\n```\n\nSimply put a colon-separated list of any amount of paths into the\nvariable. Creating a wrapper script is recommended.\n\nNote that with a standard PAPPL installation only the simplified PPD\nfiles of Gutenprint are considered, other PPD files are ignored. If\nyou want to use the expert PPDs of Gutenprint instead, you need to do\na simple modification on the PAPPL source code, setting\n`PAPPL_MAX_VENDOR` in the pappl/printer.h to 256 instead of 32.\n\nPrinters are discovered via CUPS' backends plus Gutenprint's backend\nfor dye-sublimation printers using a proprietary USB communication\nprotocols. Printers are accepted if the model is explicitly supported,\nbut for some printers with common languages (especially PCL 4/5c/e)\nthere is also generic support.\n\nUSB Quirk rules in `/usr/share/cups/usb` and the `/etc/cups/snmp.conf`\nfile can get edited if needed.\n\nMake sure you have Gutenprint and CUPS (at least its backends)\ninstalled.\n\nYou also need Ghostscript to print PDF or PostScript jobs.\n\nFor access to the test page `testpage.ps` use the TESTPAGE_DIR\nenvironment variable:\n\n```\nTESTPAGE_DIR=`pwd` PPD_PATHS=/path/to/my/ppds:/my/second/place ./gutenprint-printer-app server\n```\n\nor for your own creation of a test page (PostScript, PDF, PNG, JPEG,\nApple Raster, PWG Raster):\n\n```\nTESTPAGE=/path/to/my/testpage/my_testpage.ps PPD_PATHS=/path/to/my/ppds:/my/second/place ./gutenprint-printer-app server\n```\n\n\n## LEGAL STUFF\n\nThe Gutenprint Printer Application is Copyright © 2020 by Till Kamppeter.\n\nIt is derived from the HP PCL Printer Application, a first working model of\na raster Printer Application using PAPPL. It is available here:\n\nhttps://github.com/michaelrsweet/hp-printer-app\n\nThe HP PCL Printer Application is Copyright © 2019-2020 by Michael R Sweet.\n\nThis software is licensed under the Apache License Version 2.0 with an exception\nto allow linking against GPL2/LGPL2 software (like older versions of CUPS).  See\nthe files \"LICENSE\" and \"NOTICE\" for more information.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenprinting%2Fgutenprint-printer-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenprinting%2Fgutenprint-printer-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenprinting%2Fgutenprint-printer-app/lists"}