Kreeblah / airprint-generate

Automatically generate AirPrint Avahi service files for CUPS printers

Home Page:http://www.atxconsulting.com/blog/tjfontaine/2010/11/21/automatically-generate-airprint-avahi-service-files-cups-printers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

airprint-generate.py

This script will generate avahi .service files for shared CUPS printers.

This script will connect to a CUPS server and for each printer configured and marked as shared will generate a .service file for avahi that is compatible with Apple's AirPrint announcements. Any printer that can be configured to work with CUPS can be used. Printers should not be configured in CUPS as raw, unless the printer can natively print PDF. That is to say, CUPS needs to already be configured with a PDF filter. Debian based distributions ship CUPS pre-configured this way.

This script can also discover networked printers via DNS-SD, independent of CUPS, and produce exact .service files for them, allowing the printers to be announced on different subnets by copying the .service files to /etc/avahi/services/ there. This solves the problem of AirPrint printers not being availabe outside the local subnet even though routing/NAT exists between subnets.

DNSSD has a limit of 255 Chars for a given txt-record, because of this the list of accepted pdl's will be truncated to fit. If you're curious to see which ones are trimmed out of the list run with the script with the verbose flag (--verbose)

If python-lxml is installed, .service files will be generated in a human readble format, I wasn't able to get minidom's version to work acceptably.

Copy the .service files generated by this script to /usr/local/etc/avahi/services (FreeBSD) or /etc/avahi/services (Linux).

Then restart both avahi and cups with a user with superuser privileges:

sudo service avahi-daemon restart
sudo service cupsd restart

Python Requirements: This script requires depends on the python-cups library, and optionally python-lxml to make pretty xml files.

FreeBSD:

sudo pkg install print/py-pycups devel/py-lxml net/py-avahi devel/py-gobject3

Debian/Ubuntu:

sudo apt-get install python-cups python-lxml 

CentOS:

sudo yum install system-config-printer-libs

Usage: airprint-generate.py [options]

Options:
  -h, --help            show this help message and exit
  -s, --dnssd           Search for network printers using DNS-SD (requires
                        avahi)
  -D DNSDOMAIN, --dnsdomain=DNSDOMAIN
                        DNS domain where printers are located.
  -c, --cups            Search CUPS for shared printers (requires CUPS)
  -t, --tls-version     Generate a file for secure printing using the
                        specified TLS version (e.g. -t 1.2)
  -H HOSTNAME, --host=HOSTNAME
                        Hostname of CUPS server (optional)
  -P PORT, --port=PORT  Port number of CUPS server
  -u USER, --user=USER  Username to authenticate with against CUPS
  -d DIRECTORY, --directory=DIRECTORY
                        Directory to create service files
  -v, --verbose         Print debugging information to STDERR
  -p PREFIX, --prefix=PREFIX
                        Prefix all files with this string
  -a, --admin           Include the printer specified URI as the adminurl

Docker containerized avahi .service generation

After the printers have been configured in the cups server, docker can interactively generate the avahi .service while making use of the container.

  • Build the container
docker build -t airprint-generate .
  • Generate the avahi service by defining the ip address of the cups server
docker run --rm -it -v $(pwd):/tmp airprint-generate -H ${CUPS_SERVER_IP} -d /tmp

About

Automatically generate AirPrint Avahi service files for CUPS printers

http://www.atxconsulting.com/blog/tjfontaine/2010/11/21/automatically-generate-airprint-avahi-service-files-cups-printers


Languages

Language:Python 98.6%Language:Dockerfile 1.4%