Call for testing: OpenPrinting's CUPS Snap

Raspberry Pi has casual CUPS from DEB repository. And proprietary plugin installed by hp-setup.

CUPS from SNAP on another Desktop Ubuntu (x64 PC).

From Raspberry Pi CUPS web interface:

HP LaserJet Professional p1102, hpcups 3.20.3, requires proprietary plugin

It’s proprietary plugin version 3.20.3 https://developers.hp.com/hp-linux-imaging-and-printing/binary_plugin.html

And I think that nothing driverless things on Raspberry Pi :confused:

> driverless -v
DEBUG: Started ippfind (PID 2834)
DEBUG: Started post-processing (PID 2835)
DEBUG: PID 2834 (ippfind) stopped with status 1!
DEBUG: PID 2835 (Post-processing) exited with no errors.

I don’t know how AirPrint works. But I can print from my iPhone by default.

@adasiko, first test whether you printer works on the Raspberry Pi. Print a file from a terminal on the Pi or print a test page from the Pi’s CUPS web interface. Make sure that your Pi shares the printer (CUPS must share printers in general and each printer needs to be shared individually). Probably this works already, your iPhone talking with the CUPS of the RaspBerry Pi. AirPrint as a server works on Ubuntu’s CUPS already for several years (as distro patch as CUPS upstream was maintained by Apple) but this support was rather rudimentary, not allowing to set options on the iPhone. Newer CUPS (2.4.x) which is maintained by OpenPrinting and not by Apple has full AirPrint support (for example the CUPS Snap).

If the Pi and your client machine running the CUPS Snap are in the same subnet, the CUPS Snap should see the printers on the Pi and automatically create a queue.

Your manual queue should principally work, the problem you mention seems to be a DNS problem. Can you log into the Pi via ssh ubuntu.local? Does a browser on your client display the Pi’s web interface via http://ubuntu.local:631/?

All works. But not with snap cups web interface on Desktop Ubuntu. Снимок экрана от 2021-03-19 23-03-35|690x460

And auto discovering also work while adding printer. Снимок экрана от 2021-03-19 23-00-24|690x406

@adasiko soall works, also printing from the client, only the CUPS web interface of the Pi does not work?

Check whether the web interface is activated on the Pi’s CUPS. Run

cupsctl

on the Pi or llok into the Pi’s cupsd.conf. Look for a WebInterface entry and whether it is set to yes.

Server (Raspberry Pi) works fine with printer over USB and CUPS as DEB package. I do not install CUPS SNAP version on “Print Server” aka Raspberry Pi.

Only printing from client does not work with CUPS as SNAP package. Clear Desktop Ubuntu (with preinstalled CUPS as DEB package) works fine with this printing over Ethernet.

screen 2021-03-20 13-21-44|690x439

Yes. It’s DNS problem https://askubuntu.com/a/1277030/356454

  1. Clean Ubuntu Desktop installation with DEB CUPS - all works fine.
    ping ubuntu.local - OK (It’s print server on Raspberry Pi)

  2. Turn Off DEB CUPS services. Install SNAP CUPS. Add Printer from Web interface (it’s discovering fine with ubuntu.local name). Printing does not work - "Unable to locate printer “ubuntu.local”
    ping ubuntu.local - OK
    One line to /etc/hosts

192.168.181.2 ubuntu.local

And printing is working (without restart any services).

But ping is always working without problems… And original (DEB) CUPS working with it too… :thinking:

CUPS DEB has this connection:

implicitclass://HP_LaserJet_Professional_P1102_ubuntu/

SNAP CUPS this:

dnssd://HP_LaserJet_Professional_P1102%20%40%20ubuntu._ipp._tcp.local/cups?uuid=a24df837-8136-34ed-5ed3-92078c855bc5

@adasiko Is your CUPS Snap connected with the avahi-control interface?

Could you run

 snap connections | grep cups:

and paste the output here?

If it is not connected, run

sudo snap connect cups:avahi-control

Does printing with the snapped CUPS now work?

Yes

> snap connections cups
Interface                Plug                          Slot                      Notes
avahi-control            cups:avahi-control            :avahi-control            -
cups                     -                             cups:cups                 -
cups-control             cups:cups-internal            cups:cups-control         -
home                     cups:home                     :home                     -
network                  cups:network                  :network                  -
network-bind             cups:network-bind             :network-bind             -
network-manager-observe  cups:network-manager-observe  :network-manager-observe  -
raw-usb                  cups:raw-usb                  :raw-usb                  -
system-files             cups:etc-cups                 :system-files             -

@adasiko On the machine where you have the CUPS Snap running, could you run the command

sudo snap run --shell cups.cupsd

You will get a root prompt. In this shel you are under the same restrictions as your snapped cupsd. Run the command

ippfind

here and post what you get. Do you get results? Is ubuntu.local under them?
Now run

ipptool -tv URI get-printer-attributes.test

with the URIs from your ippfind output. Do you get valid printer attributes? Or do you get some kind of error output?
You can get back to your normal shell with the exit command.

adasiko@ubuntu20:~$ ping ubuntu.local -c 1
PING ubuntu.local (192.168.181.2) 56(84) bytes of data.
64 bytes from 192.168.181.2 (192.168.181.2): icmp_seq=1 ttl=64 time=0.470 ms

--- ubuntu.local ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.470/0.470/0.470/0.000 ms
adasiko@ubuntu20:~$ sudo snap run --shell cups.cupsd
root@ubuntu20:/home/adasiko# ippfind
ipp://ubuntu.local:631/printers/HP_LaserJet_Professional_P1102
root@ubuntu20:/home/adasiko# ipptool -tv ipp://ubuntu.local:631/printers/HP_LaserJet_Professional_P1102 get-printer-attributes.test
ipptool: Unable to connect to "ubuntu.local" on port 631 - Name or service not known
root@ubuntu20:/home/adasiko# 

One line “192.168.181.2 ubuntu.local” in /etc/hosts and all works. But simple ping works without it…

@adasiko Could you check the syslog (/var/log/syslog file or journalctl command) whether at the point in time when ipptool had answered ipptool: Unable to connect to "ubuntu.local" on port 631 - Name or service not known to you, whether there are messages containing audit and DENIED? This way we could see whether the CUPS Snap’s security shield is blocking DNS.

If you cannot determine the exact time when you have issued the ipptool command, simply repeat the commands from above.

Server returned error NXDOMAIN, mitigating potential DNS violation DVE-2018-0001, retrying transaction with reduced feature level UDP.

It’s systemd-resolved…

@adasiko I do not get such messages, for me all is working correctly, I can print with the CUPS Snap to a remote printer without any problems. I have Ubuntu Hirsute (upcoming 21.04).

NOTE: To run the CUPS Snap’s CUPS on a system with installed but de-activated CUPS you need to enter this additional command now to make the system’s CUPS invisible for the CUPS Snap:

sudo mv /etc/cups /etc/cups.old

Otherwise the CUPS Snap will go into the new proxy mode. Alternatively, one can suppress the proxy mode altogether and make the CUPS Snap behave as before:

sudo touch /var/snap/cups/common/no-proxy

(remove the file again to return to the new behavior)

See the README.md file:

Works great here! Everything behaves the way I’d expect it to.
Tested with the following setup:

  • OS: Ubuntu Core 20 (all-snap system).
  • Printer: connected over USB and added manually through cups.lpadmin.
  • Application: print jobs sent from a headless application snap that includes the cups-client stage-package, initiates print jobs with lp, and is connected to the CUPS snap’s cups slot.
  • Notes: my use-case only includes local printing, I did not test network printing in either direction.
1 Like