CUPS Cloud Print (Archived)

Unsupported

CUPS Cloud Print is unsupported and has been for some time. Google Cloud Print itself was deprecated in December 2020 and you should migrate to an alternative. See Google for more information.

Introduction

CUPS Cloud Print is a Google Cloud Print driver for UNIX-like operating systems ( Linux, Mac OS X , BSDs etc ). It allows any application which prints via CUPS to print to Google Cloud Print directly.

Why?

Assuming you have Print-Cloud-Ready printer, Google Cloud Print allows you to print to your printer without installing any printer specific drivers – aside from the obvious advantages of not having to install drivers for every printer you come into contact with, it allows you to use a proprietary printer on platforms you would not normally easily be able to use ( for example, printing from an ARM-based Raspberry Pi to a printer where the manufacturer only provides x86 proprietary drivers ).

Also, because Google Docs ( Google Drive ) presents itself as a printer to Cloud Print, it also means you can ‘print’ directly to Google Docs using CUPS Cloud Print ( some users have leveraged this functionality to scan to Google Docs ).

License and Downloading

CUPS Cloud Print is licensed under the GNU Public License version 3 or above, the source code is freely available as a Github repository.

20160521 Release – 21st May 2016

  • Fix: Now works on Mac OS X 10.11 ( El Capitan )
  • Change: Moved Mac OS X Install dir from /usr/local/share/cloudprint-cups to /Library/cloudprint-cups

20160502 Release – 2nd May 2016

  • New: Use CCD instead of ( now broken ) old legacy format
  • Fix: Add refresh tokens to launchd on Darwin package
  • Fix: Suggest installing texlive-lang-cjk in debian package
  • Fix: Delete /usr/share/cloudprint-cups/.cache on Gentoo ebuild uninstall
  • Change: Upgrade oauth2client to 1.5.2
  • Change: Write temp files to disk on Darwin if ps2pdf not present

20140814.3 Release – 31st May 2015

  • Fix: Now works on Mac OS X 10.10 ( Yosemite )
  • Change: Moved Mac OS X Install dir from /usr/local/share/cloudprint-cups to /usr/share/cloudprint-cups

20140814.2 Release – 13th December 2014

  • Fix: Upgrade script error no longer prevents Mac OS X installation
  • Fix: Strip control chars when sanitising text
  • Fix: Fixed printing from stdin, detect mimetypes from job types
  • Change: Upgraded oauth2client to v1.4.2
  • Change: Stop writing temp files to disk
  • Change: Stop writing base64 encoded files to disk
  • Change: Require 'which' and 'file' packages in rpm ( dummy 'which' package added for OpenSUSE )
  • Change: Require python-six for latest oauth2client version
  • Change: Prevent capabilities prefixed with 'cups', or other ones that could point to binaries being used to populate ppd with potentially arbitrary commands from GCP
  • Change: Dont write temp ppd files in reportissues.py script
  • Change: Backend now only accepts data from stdin, and refuses to read files passed in

20140814 Release – 14th August 2014

  • Fix: Issue #71 on Github, always send use_cdd=false param with every request

20140702 Release – 2nd July 2014

  • New: Split printer class into seperate Printer and PrinterManager classes
  • New: OS X package support
  • New: Added SELinux support to RPM packages
  • New: Added refresh token cron script
  • Fix: Use python interpreter when python2 interpreter not available.
  • Fix: Setup script shows printer names in multiple columns, instead of one column.
  • Fix: Now PEP8 compliant
  • Fix: Detect _lp as valid cups group in configure script
  • Change: Moved testing data and scripts into 'testing' subdirectory
  • Change: Changed protocol to gcp:// instead of cloudprint://

20140308 Release – 8th March 2014

  • Fix: Use shorter URI format to workaround issue on older distros having a short max length on printer URIs

20140307 Release – 7th March 2014

  • Security: Only log access token to log file in debug mode
  • New: Support printers with same name in same account
  • New: Log now pipe delimited and contains timestamp
  • Fix: Set UseCIEColor when converting postscript file to pdf, fixes printing files generated by Adobe Reader
  • Fix: Set page name to Untitled when page printed with no name
  • Fix: Open oauth2 config file in read only mode if access denied to write, fixes running under Mac OS X
  • Fix: No longer run upgrade script on fresh install
  • Fix: Fix the log file permissions on creation or upgrade, only adjust owners and permissions if needed to change
  • Fix: Exclude groups that cant be correct for cups group when discovering CUPS group
  • Fix: Discover CUPS group by examining CUPS log file ownerships, then PPD directory if logs missing
  • Change: Sanitised the indentation of python files
  • Change: Removed upgrade message about location of files changing
  • Change: Moved common functions into utils class, allows better unit testing
  • Change: Centralised logging setup into utils script

20140210 Release – 10th February 2014

  • New: Show better error message if printer ppd not found
  • Fix: Use python logging facility instead of writing to log files directly, fixes No handlers could be found for logger error
  • Fix: Upgrade script now faster with multiple printers, now only gets list of PPDs once and filters for each printer
  • Fix: Show better error if renewing OAUTH2 token fails
  • Fix: Explicitely define dirs in rpm files list, ensures will be removed correctly on uninstall
  • Fix: Deb package now deletes old pyc files on uninstall/upgrade
  • Fix: Config file permissions now fixed to allow updating of access token when printing
  • Fix: Compile python code on rpm install to ensure old files are removed on uninstall
  • Fix: Compile python code on Gentoo install to ensure old files are removed on uninstall
  • Fix: Compile python code on arch install to ensure old files are removed on uninstall
  • Change: Merged submitjob.py script into backend script
  • Change: Error out immediately if lpadmin command not in path on upgrade

20140112 Release – 12th January 2014

  • NEW: When invalid OAuth2 code used, show the error message
  • NEW: Can now delete associated printers when deleting an account
  • NEW: Added test script for post-packaging testing
  • CHANGE: Moved files from /usr/lib/ to /usr/share

20131013 Release – 13th October 2013

  • CHANGE: Use imagemagick for rotating PDFs instead of pdfjam due to issues with CentOS and Fedora

20131009 Release – 8th October 2013

  • FIX: Override default for when applications assume wrong default values ( eg duplex )
  • FIX: No longer error on adding printers with duplicate capability names,
  • FIX: Landscape printing should now work correctly on all printers
  • FIX: Ignore duplicate parameters
  • FIX: Detect duplex option
  • FIX: Adding printers with prefix no longer errors
  • CHANGE: pdfjam dependency now required
  • CHANGE: List cloud printers script now shows display name instead of printer name

20130914 Release – 14th September 2013

  • NEW: Use display name if available for generating values for ppd
  • NEW: Added version param to scripts
  • NEW: Added test cases and list of capabilities for testing internal name function
  • FIX: Prevent duplicate options and capabilities being generated
  • FIX: Post name of capability instead of internal hash, should fix issues with capabilities failing to work correctly
  • FIX: Fixed displaying of errors from Google side ( eg when print proxy is down )
  • FIX: Allow overriding print params per print job
  • CHANGE: Removed gcp_ prefix for capabilities ( unless conflicts with reserved words )

20130718 Release – 18th July 2013

  • NEW: PDF now supplied to CCP via CUPS, increases printing speed.
  • NEW: Default to A4 paper size in countries that use A4 paper.
  • FIX: Use utf8 output for ppd, use internal option and capability hashes for names to prevent errors - should fix a lot of errors related to non-ASCII chars in capabilities.
  • FIX: Removed redundant ppdc dependencies.
  • FIX: Removed old PPD files, as no longer used.
  • FIX: Optimise PDF generated for printing.
  • FIX: Only ask once per account for prefix.
  • FIX: Fixed final warnings in PPD.
  • FIX: Custom printer name should now work.
  • FIX: CUPS Backend etc now use source install by default.
  • FIX: Add translations into cups ppd.

20130608 Release – 8th June 2013

  • FIX: Parameters with long names should no longer error

20130604 Release – 3rd June 2013

  • FIX: Fixed syntax error on adding individual printers.

20130603 Release – 3rd June 2013

  • NEW: Added reportissues.py script to assist in debugging issues
  • FIX: Use option name instead of displayname if displayname is missing
  • CHANGE: On answering no for adding all printers, ask to add individual printers
  • CHANGE: Ask whether or not to use prefix rather than assuming user knows to enter prefix directly

20130526 Release – 26th May 2013

  • FIX: Strip out colon chars from capability and options in ppd.

20130519 Release – 19th May 2013

  • FIX: No longer error on capabilities with missing display name.

20130510 Release – 10th May 2013

  • Fix: Use lp group instead of trying to discover group name dynamically
  • Fix: Only update config file permissions when config options changed, not when tokens refreshed.
  • Fix: Deb package installs cloudprint files with correct permissions.

20130504 Release – 4th May 2013

  • New: Script to delete user accounts ( deleteaccount.py )
  • New: Capabilities for printer supplied by Google Cloud Print ( eg Colour, Print tray, etc ) now appear as options in dialogs.
  • Fix: RPM package can now be built as a non-root user.
  • Change: PPD file now generated dynamically

20130203 Release – 3rd February 2013

  • Priority Fix: Ensure printing is always sent over HTTPS, fixes an issue where Google has began returning errors on HTTP API requests
  • New: Extra debug data now logged if JSON decoding fails
  • New: Added gentoo/freebsd support
  • Change: Detect CUPS user group automatically rather than assume group name is always lp

20130101 Release – 1st January 2013

  • New: Python 2.6 now properly supported
  • New: Began adding py.test unit tests

20121208 Release – 8th December 2012

  • New: Added FedEx office support

20121202 Release – 2nd December 2012

  • Fix: Show all printers, including ones marked as dormant
  • Fix: Issue #16 – Arch package, cupsddk dependency is discontinued.
  • Fix: Depend on system-config-printer-libs instead of python-cups in RPM
  • Change: Backwards compatiblity changes for older versions of python

20120908 Release – 8th September 2012

  • Fix: Issue #13 – Invalid CUPS printer name generated

20120823 Release – 23rd August 2012

  • Fix: Fixed error when trying to print to printers with an account name containing an ‘@’

20120818 Release – 18th August 2012

  • New: Multiple Google user account support, you can now add printers from multiple Google Cloud Print accounts
  • New: Depreciated Google ClientLogin replaced with OAuth2 implementation – Google Account password no longer stored locally – when upgrading you will need to remove and re-add your Google Account and printers
  • Fix: No longer blindly overwrite printers when adding a new printer with same name as an existing printer

20120812 Release – 12th August 2012

  • New: PPD of cloud printers now replaced when upgrading CUPS Cloud Print
  • New: PPD now has an IEEE 1284 device id
  • New: Device and options now logged when printing
  • New: Cloud Print printers now listed as ‘Discovered Network Printers’ when adding printers
  • New: Added Colour Model option to CUPS PPD, send Colour option to Google when printing to colour printers
  • Fix: Querying available options no longer hangs
  • Fix: PDF files should now print correctly
  • Fix: More Python3 fixes
  • Fix: Fixed error when installing printer with non ASCII characters
  • Fix: Check that files exist before attempting to delete them

20120513 Release – 13th May 2012

  • Security: cloudprint.conf now only accessible by root and cups
  • New: Added Arch Linux support
  • Fix: Require python 2.7
  • Fix: Log permissions now fixed when recreated by logrotate
  • Fix: Fixes to dependencies to require ghostscript
  • Fix: Backend script no longer fails if cannot write to log file

20120422 Release – 22nd April 2012

  • New: When setting up printers, prompt for an optional prefix for printer names
  • New: Added debian and redhat support, package build stubs now in repository
  • Change: Renamed Gentoo ebuild to be consistent with new RPM and Deb packages

20120123 Release – 23rd January 2012

  • Fix: Require python2 instead of any version of Python
  • Fix: Only try to convert to PDF if file isnt already a PDF
  • Fix: Cast to string on joining string as part of request, fixes an issue with some files printing

20111110 Release – 11th November 2011

  • New: Added utility to list printers
  • New: Added setup script
  • New: Added application specific password support
  • Fix: Print jobs now titled with job name from CUPS instead of hardcoded
  • Fix: PPD now presents as a colour printer
  • Fix: Now compatible with BSD install
  • Fix: No longer send PDF data twice, should half printing time
  • Fix: Make install should now install all *.py files
  • Fix: Errors now reporting properly to CUPS
  • Fix: Check for pstopdf if ps2pdf doesnt exist

20111011 Release – 11th October 2011

  • Initial Release

I generally use Gentoo , CentOS and Ubuntu, but I’ve tried to create packages to suite 99% of Linux distributions. All packages are set as noarch ( or the distro’s equivalent ), so should work on any CPU architecture ( x86, x86_64, ARM, MIPS etc ).

If there is a (Free) OS which you require packages for, please comment below and I’ll investigate creating packages for it.

Please select your Operating System for installation instructions:

Ubuntu 12.04+ , Kubuntu 12.04+ , Xubuntu 12.04+ , Mint 13+ etc - PPA Based Installation

Run in a terminal:

sudo add-apt-repository ppa:simon-cadman/niftyrepo
sudo apt-get update
sudo apt-get install cupscloudprint
sudo /usr/share/cloudprint-cups/setupcloudprint.py

Follow the instructions about authorising CUPS Cloud Print to use your Google Account for printing, and you're done.

Debian Squeeze+ , MEPIS 11+ etc - .deb file based installation

If your OS supports PPA repositories, it is preferable to install using PPAs, you will then automatically receive updates when new versions are released.

If you need to install using a deb file, run in a terminal ( as root, or using sudo ):

wget https://niftyrepo.niftiestsoftware.com/cups-cloud-print/packages/cupscloudprint_20160502-1_all.deb 
dpkg -i cupscloudprint_20160502-1_all.deb
apt-get -f install
/usr/share/cloudprint-cups/setupcloudprint.py

Follow the instructions about authorising CUPS Cloud Print to use your Google Account for printing, and you're done.

CentOS 6+ , Fedora 19+ , Oracle 6+ , RHEL 6+ , Scientific Linux 6+ etc - Yum Based

Note: RHEL based distributions require the EPEL repository installed ( see here or here for examples of how to install the repository ).

Create a file in /etc/yum.repos.d/niftyrepo.repo with this text inside ( as root, or using sudo ):

[niftyrepo]
name=niftyrepo
baseurl=https://niftyrepo.niftiestsoftware.com/rpm/
gpgcheck=1
gpgkey=https://niftyrepo.niftiestsoftware.com/rpm/RPM-GPG-KEY-niftiestsoftware

Then run in a terminal ( as root, or using sudo ):

yum update
yum install cupscloudprint
/usr/share/cloudprint-cups/setupcloudprint.py
Note: Users wit recent versions of Fedora should use 'dnf' instead of yum, and may also need to install the python-cups package manually.

Follow the instructions about authorising CUPS Cloud Print to use your Google Account for printing, and you're done.

OpenSUSE 11.1+ , SUSE EL 11+ etc - Zypper Based

Create a file in /etc/zypp/repos.d/niftyrepo.repo with this text inside ( as root, or using sudo ):

[niftyrepo]
name=cupscloudprint
baseurl=https://niftyrepo.niftiestsoftware.com/rpm/
gpgcheck=1
gpgkey=https://niftyrepo.niftiestsoftware.com/rpm/RPM-GPG-KEY-niftiestsoftware

Then run in a terminal ( as root, or using sudo ):

rpm --import https://niftyrepo.niftiestsoftware.com/rpm/RPM-GPG-KEY-niftiestsoftware
zypper update
zypper install cupscloudprint
/usr/share/cloudprint-cups/setupcloudprint.py

Follow the instructions about authorising CUPS Cloud Print to use your Google Account for printing, and you're done.

.rpm file based installation

If your OS supports Yum repositories, it is preferable to install using a Yum repo, you will then automatically receive updates when new versions are released.

Run in a terminal ( as root, or using sudo ):

rpm --import https://niftyrepo.niftiestsoftware.com/rpm/RPM-GPG-KEY-niftiestsoftware
rpm -i https://niftyrepo.niftiestsoftware.com/cups-cloud-print/packages/cupscloudprint-20160502-1.noarch.rpm 
/usr/share/cloudprint-cups/setupcloudprint.py

Follow the instructions about authorising CUPS Cloud Print to use your Google Account for printing, and you're done.

Gentoo, Sabayon, Funtoo etc - Portage Ebuild

The preferred way to install CUPS Cloud Print on Gentoo is using my layman repository - simply run in a terminal (as root with layman installed):

layman -o https://raw.github.com/simoncadman/niftyrepo-layman/master/repositories.xml -f -a niftyrepo
emerge -va cupscloudprint
/usr/share/cloudprint-cups/setupcloudprint.py

Then follow the instructions about authorising CUPS Cloud Print to use your Google Account for printing.

You can alternatively download the latest ebuild manually to a local overlay and emerge as normal.

Arch, Chakra etc - Arch Pacman

Add to /etc/pacman.conf:

[niftyrepo]
Server = https://niftyrepo.niftiestsoftware.com/arch
SigLevel = Required TrustAll

Then run in a terminal ( as root, or using sudo ), answering 'Y' when asked to the import PGP key ( 2048R/C5541D9D ):

pacman -Syu cupscloudprint
/usr/share/cloudprint-cups/setupcloudprint.py

Follow the instructions about authorising CUPS Cloud Print to use your Google Account for printing, and you’re done.

You can alternatively download the latest arch PKG file and install as normal.

Other (Source install) - Source Install

Run in a terminal ( as root, or using sudo ):

git clone git://github.com/simoncadman/CUPS-Cloud-Print.git
cd CUPS-Cloud-Print/
git checkout tags/20160502
./configure
make install
/usr/local/share/cloudprint-cups/setupcloudprint.py

Follow the instructions about authorising CUPS Cloud Print to use your Google Account for printing, and you're done.

When upgrading, you should always run:

/usr/local/share/cloudprint-cups/upgrade.py

Mac OS X 10.7+ - Darwin Based

Download and run the latest package from here, then run in a terminal:

sudo /Library/cloudprint-cups/setupcloudprint.py

Follow the instructions about authorizing CUPS Cloud Print to use your Google Account for printing, and you're done.

FreeBSD, PC-BSD etc - FreeBSD based

CUPS Cloud Print is now in FreeBSD ports! See here for installation instructions.
Instructions for running source install
Run in a terminal ( as root, or using sudo ):
git clone git://github.com/simoncadman/CUPS-Cloud-Print.git
cd CUPS-Cloud-Print/
git checkout tags/20160502
./configure
gmake install
/usr/local/share/cloudprint-cups/setupcloudprint.py
Follow the instructions about authorising CUPS Cloud Print to use your Google Account for printing, and you're done. When upgrading, you should always run:
/usr/local/share/cloudprint-cups/upgrade.py

After installing CUPS Cloud Print ( see Installation ), you should first run the setup script, as root ( if you install from source the path will be /usr/local/share/cloudprint-cups ):

/usr/share/cloudprint-cups/setupcloudprint.py

This will create a CUPS printer for each Google Cloud Print printer on your account, and ( if it is the first time you have installed CUPS Cloud Print ) prompt you to allow CUPS Cloud Print to print using your account.

If you notice any bugs or would like to request a feature, please create an issue on the project’s Github issues page .

Which platforms can CUPS Cloud Print run on?

The supported operating systems are listed on the nstallation instructions section. It should work on any platform which those operating systems run on ( Raspberry Pi, embedded hardware such as routers, etc ).

I also generally prefer to only support Free operating systems for my software.

How do I remove google accounts from CUPS Cloud Print?

The deleteaccount.py script will remove accounts from CUPS Cloud Print:

sudo /usr/share/cloudprint-cups/deleteaccount.py

I've shared a CUPS Cloud Print printer over Samba for a Windows client, which printer driver should I use?

The "Samsung CLP-660 Series PS" printer driver works under Windows 7, but it may not work 100%, as it is unsupported. I believe basic printing does work though.

Google has added new options for my printer, but CUPS is not showing them as options, how to I force CUPS Cloud Print to refresh the printer capabilities?

Running the upgrade script refreshes the available printer options:

sudo /usr/share/cloudprint-cups/upgrade.py