(edit 10/20/2020 - RIP Cloud Print)
Making a Raspberry Pi Google Cloud Print Proxy
Google Cloud Print has become a requirement for me - no more dealing with drivers, and I can print from anywhere using my phone. But, not all printers support the service (or support it adequately - I’m looking at you, Brother).
Here’s a simple procedure to turn a headless Raspberry Pi into a Google Cloud Print proxy, making your local printer(s) visible to Cloud Print. This is made possible using armoo’s cloudprint proxy software.
Before you start, you’ll need a Raspberry Pi 2 (Edit: maybe not - see Notes) or newer with:
- Raspbian Jessie (Stretch is even better - see Notes)
- A root partition that is bigger than the default 4G (16GB recommended)
- Internet connectivity (possibly via Comitup)
- Access to a printer via the network or USB
For the installation, you’ll also want another computer on the same network with an ssh client (like PuTTY) and a web browser logged in to your Google account. What you don’t need is a desktop environment on the Pi, or a connected keyboard/monitor/mouse. All interaction can be achieved via ssh and another browser connected to the network.
Step 1 - Install
Establish an ssh session with the Pi, and run the following commands to install the required software from the cloudprint repository.
Add the cloudprint repo to your apt environment.
echo "deb http://davesteele.github.io/cloudprint-service/repo cloudprint-jessie main" | sudo tee /etc/apt/sources.list.d/cloudprint.list wget -q -O - https://davesteele.github.io/key-366150CE.pub.txt | sudo apt-key add - sudo apt-get update
Install the software. This will likely involve more than 40 packages.
sudo apt-get -y upgrade sudo apt-get -y install cloudprint-service
Make the CUPS web page externally accessible.
sudo cupsctl --remote-admin sudo usermod -a -G lpadmin pi sudo systemctl restart cups
At this point you should have the cups service running.
Step 2 - Configure
Use the CUPS web interface at http://<piaddr>:631/ to add a printer to your setup. Your browser may complain about unsafe connections for https links. Allow these connections. When it asks, use the pi user credentials.
From the command line on the Pi, establish Google Cloud Print authentication with:
The output of the cps_auth command will include a URL. Copy this URL to your browser, and use it to establish authentication.
Now restart the cloudprint service to use this account.
sudo systemctl restart cloudprintd
Consider disabling CUPS remote administration, to improve security. Also, make sure you have changed the default SSH credentials.
sudo cupsctl --no-remote-admin sudo systemctl restart cups passwd
Step 3 - Print
Your printer should be visible at https://www.google.com/cloudprint/#printers. Enjoy!
- I say “Raspberry Pi 2 or newer” because I’ve had problems running this with only 512 MB of RAM. Many others have reported success with smaller Pis, such as the Zero.
- Don’t like insecure https? Then skip the /etc/cups/cupsd.conf edits and manage printers from the Pi desktop.
- If you are running a newer version of Raspbian than Jessie, cloudprint-service is in the official repository. You don’t need to modify the apt environment.