Chrome OS, Google Cloud Print, Chrome Remote Desktop and a (headless) Mac Mini

Recently I migrated a network of Mac Mini’s to Chrome OS, running on ASUS Chromebox Celeron 2955U’s (a Chromebox is the desktop version of the Chromebook).

The setup works great since users rely on Google Apps/Drive and various SaaS products for operating their business. However, businesses like to print, so I had to connect their ‘classic’ printers to Google Cloud Print.

If your network still has a PC or Mac connected to your printers with Chrome installed, all you need to do is run Chrome as a Google Cloud Print proxy (GCP proxy). I decided to re-purpose one of the old Mac Mini’s as a headless print server/Google Cloud Print proxy (to discourage everyday desktop use of the old Mac!), and thought I’d share some notes.

Set up Chrome as a Cloud Print proxy for your ‘classic’ printers at: chrome://devices

Before your Mac goes headless, you’ll want a way to access it so you can resolve any issues with the print queue, etc. Since all of the local computers are running Chrome, installing the Chrome Remote Desktop host service made sense. Now we can manage the Mac from any Chrome browser with the extension installed, just by logging into the Google Account that is hooked up with the Remote Desktop host and entering a PIN.

Follow these instructions to set up your Mac as a Chrome Remote Desktop host.

I configured the Mac to automatically boot on power failure, and to login to a default user, however making Chrome automatically ‘open at login’ didn’t seem to reliably connect the GCP proxy. To fix this, I created an ‘Application’ using Automator which runs a shell command to launch Chrome with the GCP proxy:

open -a “Google Chrome” --args --enable-cloud-print-proxy

This ‘Application’ has been configured to run at login via System Preferences > Users & Groups > (select user) > Login Items (tab), and it seems to connect the GCP proxy right away.

Create an ‘Application’ using Automator that can run at login and reliable start the Chrome GCP proxy

This wasn’t a huge issue, but rather an annoyance that every time the Mac restarts without a keyboard/mouse attached, it would present a prompt looking for a Bluetooth keyboard/mouse. Turns out you just go into System Preferences > Bluetooth > Advanced and uncheck a couple of boxes!

Disable those ‘connect keyboard/mouse’ prompts when your headless Mac boots

One small annoyance for our users was the default page size was US Letter and not A4. I found a simple fix for this was to change the printer defaults in CUPS. On the Mac, I first enabled the CUPS web interface with the following command:

cupsctl WebInterface=yes

Then opened the web interface in Chrome at: http://localhost:631/printers/

To modify printer defaults, select your printer, and from the second dropdown with ‘Administration’ as the value, change this to ‘Set Default Options’ (as per above screen). You should then be redirected to a page where you can change defaults such as media size, paper source (default tray), etc.

Change your Google Cloud Print classic printer defaults (page size, default tray, etc)

That got the ‘classic’ printers into Google Cloud Print ready for sharing with the team. Any time there’s an issue with printing, we can login to the headless Mac via Chrome Remote Desktop and check the Print Queue for issues, and if for some reason the Chrome GCP proxy stops working usually a quick restart will solve any issues thanks to our Automator script.

This solution is working surprisingly well, and I’d definitely recommend it for connecting ‘classic’ printers to Google Cloud Print if you have a spare Mac or PC to run as a GCP proxy. If you have a Raspberry Pi or similar, you might want to check out the CUPS Connector project, however I personally haven’t used this so cannot speak to it — but I am intrigued by the idea!

I hope you found this article useful, and welcome and comments or feedback. And please think about the environment before you print!

#DevOps, #Security, Go (#golang), #Linux, #Docker, #Kubernetes. DevOps Manager @Xero. Previously: DevTools Engineering Manager @Cloudflare. Opinions are my own.

#DevOps, #Security, Go (#golang), #Linux, #Docker, #Kubernetes. DevOps Manager @Xero. Previously: DevTools Engineering Manager @Cloudflare. Opinions are my own.