Google Cloud Print e Raspberry Pi

Google Cloud Print è un servizio di stampa di Google che consente di stampare da qualsiasi applicazione collegata nel cloud senza bisogno di installare i driver di stampa nel dispositivo locale. Esistono stampanti predisposte per essere utilizzate con questo servizio di Google, ma come fare per quelle più vecchie? Ovviamente la nostra Raspberry Pi può rivelarsi utile anche in questo caso ed impostare il tutto è più facile di quello che si pensi. In questa guida vedremo come fare.

Google Cloud Print, presentato inizialmente come sistema di stampa dedicato ai Chromebook, è da tempo un consolidato servizio di Google per la stampa via web. Quasi ogni produttore di stampanti ha oggi a listino dei modelli compatibili con il servizio di Google, mentre per le vecchie stampanti non nativamente predisposte Google mette a disposizione una semplice guida che prevede la connessione della stampante ad un dispositivo dove sia stato installato il browser Chrome.

In questa guida vedremo come utilizzare una Raspberry Pi headless, quindi senza GUI né ovviamente Chrome, come proxy di stampa per trasformare una classica stampante USB/di rete in una stampante Google Cloud Print compatibile.

Prerequisiti.

  • Una scheda Raspberry Pi con già installata una qualsiasi distribuzione supportata (in questo caso ho utilizzato Raspbian Jessie Lite) e con tutte le operazioni di post-installazione effettuate (espansione file-system, cambio nome host,cambio password, abilitazione SSH, impostazione locale, ecc.). La scheda dovrà essere configurata preferibilmente con IP statico e connessione ad Internet abilitata.
  • Una stampante USB o di rete, collegata alla Raspberry Pi. In questa guida viene utilizzata una stampante Laser B/N Samsung ML-1670 (fuori produzione).
  • I driver di stampa CUPS compatibili per la stampante utilizzata.

Programmi/pacchetti Debian utilizzati.

    Principali.

  • CUPS: CUPS è il servizio di stampa standard dei sistemi Linux. È in gradi di riconoscere automaticamente le stampanti di rete, ne fornisce una descrizione PostScript Printer Description (PPD) e il supporto alle relative opzioni. Se utilizzate una stampante da Linux avrete sicuramente già installato CUPS.
  • Cloudprint-service: pacchetto Debian che incorpora l’utility per Python cloudprint. Il pacchetto mette a disposizione un servizio proxy che rende disponibili le stampanti configurate in CUPS agli utenti Google approvati.
  • CUPS Cloud Print: un driver Google Cloud Print che permette alle applicazioni che stampano attraverso CUPS di utilizzare le stampanti in Google Cloud Print come se fossero stampanti locali.
  • Cloud Print per Android: servizio di stampa Google Cloud Print per dispositivi Android.

Opzionali (solo per alcuni modelli di stampanti Samsung).

  • Splix: una serie di driver per stampanti SPL (Samsung Printer Language).
  • SpliX ML-1860/1865 PPD : un file PPD personalizzato compatibile con SpliX per stampanti Samsung ML-1860/1865 (compatibile anche con altre stampanti simili come la ML-1670).

Installare e configurare CUPS.

Colleghiamoci alla Raspberry Pi ed aggiorniamo i repository ed i pacchetti installati:

sudo apt update && sudo apt upgrade

Installiamo CUPS:

sudo apt-get install cups

Verranno scaricati molti pacchetti e l’istallazione potrebbe richiedere diversi minuti.

Aggiungiamo l’utente pi al gruppo di stampa lpadmin che è stato creato durante l’installazione di CUPS:

sudo usermod -a -G lpadmin pi

Possiamo sostituire l’utente pi con un qualsiasi altro utente che avremo precedentemente creato a questo scopo.

Dobbiamo ora abilitare la possibilità di connetterci al server di stampa da remoto per poterne modificare le opzioni. Di default si può accedere al pannello di amministrazione di CUPS solo dalla macchina locale dove esso è installato, ma per comodità vogliamo fare in modo che questo sia possibile da qualsiasi dispositivo della nostra rete locale. Apportiamo quindi alcune modifiche al file di configurazione di CUPS che si trova in /etc/cups/cupsd.conf:

sudo nano /etc/cups/cupsd.conf

Cerchiamo la seguente sezione:

# Only listen for connections from the local machine
Listen localhost:631

e modifichiamola in questo modo:

# Only listen for connections from the local machine
# Listen localhost:631
Port 631

Abbiamo appena informato CUPS di restare in ascolto sulla porta 631, qualsiasi sia l’interfaccia da cui arrivino richieste di collegamento.

Rendiamo possibile l’accesso a CUPS solo ai dispositivi presenti nella nostra rete locale. Scorriamo verso il basso fino alla parte che segue:

# Restrict access to the server...
<Location />
  Order allow,deny
  Allow @local
 </Location>

# Restrict access to the admin pages...
<Location /admin>/
  Order allow,deny
  Allow @local
</Location>

# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
  Allow @local
</Location>

Dobbiamo modificare la sezione inserendo le righe evidenziate in grassetto-rosso lasciando inalterato tutto il resto. Salviamo il file di configurazione e facciamo ripartire il servizio così che CUPS possa caricare la nuova configurazione:

sudo service cups restart

Ora spostiamoci su un computer della nostra rete e da un browser qualsiasi proviamo a collegarci al pannello di controllo di CUPS indicando nella barra degli indirizzi l’IP e la porta della Raspberry Pi dove abbiamo installato il servizio (es, http://indirizzo-IP-raspberry:631):

CUPS: home del pannello di controllo
CUPS: home del pannello di controllo.

Passiamo alla configurazione della stampante, ma prima di continuare accertiamoci che la stampante che intendiamo aggiungere sia accesa e collegata alla Raspberry via USB o tramite rete.

Configurare una stampante in CUPS.

Siamo quindi arrivati all’interfaccia di amministrazione di CUPS. La schermata che abbiamo appena caricato rappresenta la home del pannello di controllo. Clicchiamo sulla tab Administration:

CUPS: sezione administration.
CUPS: sezione administration.

Da qui possiamo aggiungere una stampante utilizzando il pulsante Add Printer. La prima volta riceveremo un errore di certificato in quanto CUPS tenterà di aprire una sessione sicura HTTPS: ignoriamo l’errore, aggiungiamo un’eccezione e ripetiamo l’operazione. Verrà richiesto di autenticarsi utilizzando le credenziali dell’utente che abbiamo aggiunto precedentemente al gruppo lpadmin (in questo caso l’utente pi):

CUPS: autenticazione utente per accedere alla sezione Administration.
CUPS: autenticazione utente per accedere alla sezione Administration.

A questo punto avremo una pagina simile alla seguente:

CUPS: sezione Add printer.
CUPS: sezione Add printer.

In questo esempio la stampante è un modello Samsung ML-1670, una vecchia laser dotata solo di interfaccia USB. La stampante però, come potete vedere dalle schermate, non è direttamente collegata alla Raspberry Pi, altrimenti verrebbe visualizzata sotto la voce Local Printers, ma è collegata ad un mini print-server USB che rende disponibile la stampante nella rete locale (voce Discovered Network Printers) con il nome di usbprinter1. Stampante di rete o USB che sia, la procedura per aggiungerla a CUPS non cambia, quindi selezioniamo la stampante (usbprinter1) e premiamo il pulsante Continue:

CUPS: personalizzazione nome stampante.
CUPS: personalizzazione nome stampante.

Possiamo personalizzare il nome della stampante ed altri parametri. L’opzione Share This Printer, se selezionata, permette di condividere in rete la stampante tramite CUPS , opzione ininfluente ai fini dell’utilizzo della stampante con Google Cloud Print. Possiamo accettare i valori di default premendo su Continue:

, ma poiché è possibile modficarli anche in seguito, accettiamo per ora i valori proposti.
CUPS: selezione driver di stampa.

È il momento di selezionare il driver della stampante. Ricordate che se il driver è già presente nella lista di quelli disponibili, possiamo utilizzare quello proposto, altrimenti dobbiamo prima installarlo sulla Raspberry Pi. Quindi selezioniamo il driver corretto dalla lista ed infine facciamo clicchiamo sul pulsante Add printer.

Stampante ML-1670 (opzionale - clicca per espandere)

Come ho già riportato all’inizio della guida, alcuni driver Samsung sono incompatibili con l’architettura armhf utilizzata in Raspbian Jessie. Fortunatamente possiamo ancora installare la stampante utilizzando il metodo che segue.

Installiamo SpliX sulla Raspberry Pi:

sudo apt-get install printer-driver-splix

Dal computer dove gestiamo CUPS scarichiamo e decomprimiamo l’archivio che è possibile trovare al seguente link:

https://github.com/rshev/SpliXextras

Il file PPD presente nell’archivio è compatibile con SpliX ed è stato creato per le stampanti Samsung ML-1860/1865, ma risulta perfettamente utilizzabile anche con la ML-1670. Quindi dal pannello di amministrazione di CUPS, al momento di aggiungere la stampante, andremo ad utilizzare l’opzione Or Provide a PPD File e caricheremo il file ml1860.ppd per poi confermare il tutto premendo Add printer.

CUPS: schermata delle opzioni della stampante.

Possiamo impostare alcune caratteristiche della stampante come risoluzione, tipo di alimentazione ecc. Accettiamo i valori di default premendo il pulsante Set Default Options. A questo punto verrà visualizzata una schermata dove verremo informati che la stampante è stata installata con successo e subito dopo ne verrà mostrata la pagina di amministrazione:

CUPS: pannello di amministrazione della stampante.
CUPS: stampante installata!

Da questa pagina è possibile controllare ogni aspetto della stampante: opzioni, pool di stampa, utenti, errori, ecc. Proviamo quindi a lanciare una stampa di test: facciamo click una volta sul pulsante Manteinance posto in alto a sinistra e nel menu che si aprirà selezioniamo Print Test Page. Entro pochi secondi la stampante dovrebbe restituirci una pagina simile alla seguente:

Pagina di prova stampata dalla Raspberry Pi.
Pagina di prova stampata dalla Raspberry Pi.

La procedure di installazione della stampante è finita, non rimane che collegarla a Google Cloud Print.

Installare e configurare Cloudprint-service (Google Cloud Print).

Passiamo alla semplice installazione di Cloudprint-service, un programma che permette di collegare la stampante configurata in CUPS a Google Cloud Print. Come prima cosa colleghiamoci alla Raspberry ed aggiungiamo il seguente repository al file etc/apt/sources.list:

# For Jessie/stable
deb http://davesteele.github.io/cloudprint-service/repo cloudprint-jessie main

Scarichiamo la chiave per autenticare il repository ed aggiungiamola tramite apt-key:

wget https://davesteele.github.io/key-366150CE.pub.txt
sudo apt-key add key-366150CE.pub.txt

Installiamo i programmi necessari:

sudo apt-get update
sudo apt-get install cloudprint cloudprint-service

Verranno installate anche alcune librerie Python necessarie al funzionamento del programma. Rispondiamo Yes quando richiesto. A questo punto dobbiamo autenticarci al servizio Google Cloud Print:

sudo cps-auth

Nella shell della Raspberry apparirà qualcosa del genere:

$ sudo cps-auth

Go to https://goo.gl/printer/PF7NK to claim this printer
trying for the win
trying for the win

Il link che apparirà nel terminale della Raspberry andrà copiato ed incollato nella barra degli indirizzi di un qualsiasi browser da dove, in seguito, dovremo autenticarci al servizio Google Cloud Print con il nostro account Google. Una pagina di benvenuto ci informerà che la stampante installata in CUPS è stata registrata con il servizio Google Cloud Print. Se tutto è andato per il verso giusto, nella shell della Raspberry dovrebbe apparire il seguente messaggio:

...
Printer claimed by nome-utente@gmail.com.

A questo punto, lato Raspberry Pi, non rimarrà altro da fare che avviare il servizio con:

sudo systemctl start cloudprintd.service

Da ora in poi il servizio si avvierà al boot della Raspberry e la stampante configurata in CUPS sarà disponibile nel cloud. Possiamo in ogni momento controllare lo stato del servizio sulla Raspberry con il seguente comando:

systemctl status cloudprintd.service
Cloudprint-service: il servizio è ON.
Cloudprint-service: il servizio è ON.

Per gestire le stampanti collegate all’account Google Cloud Print possiamo utilizzare questo link:

https://www.google.com/cloudprint#printers

Da qui possiamo controllare le code di stampa, gli utenti abilitati ad utilizzare le stampanti configurate, aggiungere nuove stampanti ed altro ancora.

Per condividere una stampante con un altro utente dobbiamo selezionarla dalla lista di quelle disponibili e poi premere il tasto Condividi: nella schermata successiva dobbiamo inserire l’email dell’utente (o degli utenti) con cui vogliamo condividere il dispositivo, impostare il tipo di condivisione (Può stampare oppure Privilegi di gestione) ed infine confermare utilizzando il tasto Condividi. Gli utenti indicati riceveranno un invito, per email o notifica, che dovranno esplicitamente accettare per poter utilizzare la nostra stampante.

Utilizzare una stampante Google Cloud Print da un qualsiasi programma su Linux.

Possiamo stampare direttamente tramite Google Cloud Print da qualsiasi applicazione nativa Google o istanza Chrome (esempio dall’interfaccia web di Google Drive) utilizzando il menu Stampa dell’applicazione. Per i programmi esterni all’ecosistema Google possiamo riccorrere a CUPS Cloud Print, un driver di Google Cloud Print che permette alle applicazioni che stampano attraverso CUPS di utilizzare le stampanti in Google Cloud Print come se fossero stampanti locali. L’installazione di questo driver varia da sistema a sistema. Per le distribuzioni derivate da Debian l’installazione si limita a ad inserire, uno dopo l’altro, questi comandi da shell:

sudo add-apt-repository ppa:simon-cadman/niftyrepo
sudo apt-get update
sudo apt-get install cupscloudprint

Finita l’installazione possiamo lanciare il programma che andrà a creare una stampante CUPS per ogni stampante Google Cloud Print:

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

Durante la prima esecuzione verrà richiesto di copiare un link fornito a terminale in un browser: questo passaggio è necessario per autenticarci e consentire a CUPS Cloud Print di utilizzare l’account per stampare. In seguito dovremo copiare, dal browser al terminale, un codice di autorizzazione fornito da Google. Ecco un esempio dell’output del programma:


$ sudo /usr/share/cloudprint-cups/setupcloudprint.py
Name for this user account ( eg something@gmail.com )? nomeaccount@gmail.com
Open this URL, grant access to CUPS Cloud Print,then provide the code displayed : 

https://accounts.google.com/o/oauth2/auth?scope=[.......]

Code from Google: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

You currently have these accounts configured: 
nomeaccount@gmail.com
Add more accounts (Y/N)? n
Add all Google Cloud Print printers from nomeaccount@gmail.com to CUPS (Y/N)? y
Use a prefix for names of created printers (Y/N)? y
Prefix ( e.g. GCP- )? GCP-
Added GCP-Samsung_Samsung_ML-1670_Series
Added GCP-Salva_in_Google_Drive
Added 2 new printers to CUPS

A questo punto le stampanti presenti in Google Cloud Print saranno state installate localmente in CUPS. Per gestirle possiamo utilizzare l’applicazione fornita dalla nostra distribuzione:

Gestione delle stampanti da Lubuntu
Gestione delle stampanti da Lubuntu.

Oppure direttamente da CUPS via http://localhost:631:

CUPS: gestione stampanti.
CUPS: gestione stampanti.

Esempio di stampa tramite Google Cloud Print da Libre Office:

Google Cloud Print: stampa da Libre Office.
Google Cloud Print: stampa da Libre Office.

Utilizzare una stampante Google Cloud Print da Android.

Per poter utilizzare una stampante Google Cloud Print da Android, dobbiamo avere installato il servizio Cloud Print sul nostro smartphone/tablet. Verifichiamolo da Impostazioni->Stampa. Se la voce Stampa non è presente dobbiamo installare il programma Cloud Print dal Playstore. Una volta installato e verificato che il servizio sia attivo, possiamo stampare un documento/email/foto/ecc. utilizzando l’opzione di stampa del programma che stiamo utilizzando.

Android: stampa di un documento presente in Google Drive
Android: stampa di un documento presente in Google Drive.

Per maggiori è possibile consultare la guida ufficiale per Android.

Buon divertimento 😉

2 commenti su “Google Cloud Print e Raspberry Pi”

Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.