Network printers have the prerequisites - enablement of IPP port on the printer is the minimum, mDNS is required for automatic printer discovery by `libcups`.
* [command]`ipptool` command which sends IPP Get-Printer-Attributes request to the network printer passes:
Get printer attributes using get-printer-attributes [PASS]
...
----
, where `printer.example.com` is the hostname or IP of your network printer,
* look for AirPrint among device specification,
* https://www.pwg.org/printers/[Officially certified printers for IPP Everywhere],
* check xref:_how_to_setup_cups_temporary_queues_with_network_printer[manual] for enabling CUPS temporary queues - if your printer is seen in the end in CUPS commands that way, your printer is capable of driverless printing,
* [USB devices only] check for IPP over USB (xref:_how_to_find_out_if_my_usb_device_supports_ipp_over_usb[manual] here).
== How to find out my multifunction device or standalone scanner is capable of driverless scanning?
* check the device specification and look for eSCL/AirScan/WSD - if any of these are mentioned, the device is capable of driverless scanning
* most devices which advertise they can do AirPrint are capable of AirScan too
* [USB devices only] check for IPP over USB (xref:_how_to_find_out_if_my_usb_device_supports_ipp_over_usb[manual] here).
== How to find out if my USB device supports IPP over USB
Check whether your USB device has a following text in [command]`lsusb -v` output:
----
...
bInterfaceClass 7 Printer
bInterfaceSubClass 1 Printer
bInterfaceProtocol 4
iInterface 0
...
----
If the device has the _bInterfaceClass 7_, _bInterfaceSubClass 1_ and _bInterfaceProtocol 4_ in the sequence, it supports IPP over USB which is critical for USB device driverless printing and scanning.
== How to install a print queue
The answer is you don't have to install at all :) if your device is new enough, is in your local network or is an USB device, has IPP/AirPrint/mDNS enabled and your *avahi-daemon* is running, CUPS is able to create a temporary queue for you right away in the print dialog, print via it and remove it after successful printing. But there are still use cases when permanent installation is needed like sharing a print queue, different print queue defaults or printer being in different subnet, so I will cover a permanent instalation too.
=== How to setup CUPS temporary queues with network printer
If your printer is capable of AirPrint, IPP and MDNS is enabled in your printer and printer is in your local network, then to get CUPS temporary queues working you need:
* choose device manufacturer and model (*IPP Everywhere* for driverless printers)
* set a different default options if needed and finish
*Notes:*
Adding a permanent queue for driverless USB printers or non-driverless printers installed in a printer application is usually unnecessary, because they are shared by mDNS on localhost, so any application using CUPS 2.0+ API functions (cupsGetDests(), cupsGetNamedDest(), cupsCopyDestInfo()) should be able to pick them automatically (for network printer it depends whether the device is in the same subnet as your machine). Installling them permanently should be necessary only if an application doesn't use the recent API or to work around a bug which happens when using them as temporary queues.
If there are more devices via *ipp-usb* or printer applications, they listen on different ports - devices via ipp-usb start on port 60000, separate printer applications start on port 8000.
==== Installation via CLI commands ====
* you will need a device uri - `<device_uri>`, which you can find by `lpinfo -v`:
----
$ lpinfo -v
direct usb://HP/Officejet%20Pro%208500%20A909a?serial=NNNNNNNNN&interface=1
== How to install a printer via printer application in SNAP and making it available for CUPS
Currently printer applications are available in SNAPs on Fedora. I'm planning to release them as RPMs, but the code base will be the same, so its testing can happen even with SNAPs.
* install snapd,
First we have to install snapd for testing purposes:
----
$ sudo dnf -y install snapd
$ sudo ln -s /var/lib/snapd/snap /snap
$ snap version
----
If the installation had been successful, the last command will show snapd's version.
First the SNAP with printer application has to be installed and started by the commands below. All printer applications are available in SNAP Store under the same names as they are at https://github.com/orgs/OpenPrinting/repositories[OpenPrinting repositories]. We will use [filename]`ps-printer-app` printer application in the next steps.
After starting the printer application its web interface becomes available at http://localhost:8000 - if user installs and runs another printer application, it will become available at localhost on the next port (8001). The printer application can contain several printers (as [filename]`cupsd` does).
* click on `Add Printer` on the main page,
* choose the printer's name,
* select the found device or choose `Network printer` from `Device` scroll menu and provide hostname or IP of the device,
* choose to auto-detect driver or select the driver by yourself,
* click on `Add Printer`,
* now the printer should be available at least on localhost via mDNS (if [filename]`avahi-daemon` is running and `nss-mdns` is installed)- check it by [filename]`avahi-browse`(`avahi-tools` has to be installed):
Scanners in Linux don't have to be installed the same way as printers are if they are in the same network or connected via USB - you just need *sane-backends* to be installed and any scanning application will communicate with scanner/multifunction device via the backend which supports the scanner.
However, the older HP scanners and multifunction devices require an additional package - *hplip* - and its binary plugins downloaded via [command]`hp-plugin -i` if they aren't supported by sane-backends already.
=== How to make driverless scanning work
For LAN located and USB devices:
* have *avahi-daemon* enabled and running
----
$ sudo systemctl enable avahi-daemon
$ sudo systemctl start avahi-daemon
----
* enable MDNS in firewall
* [USB devices only] install *ipp-usb*
For network scanners in a different network:
* set the scanner device uri in [filename]`/etc/sane.d/airscan.conf` - see:
----
man sane-airscan
----
== How to setup mDNS with systemd-resolved
systemd-resolved is enabled and running by default since F33 and can be setup to work with Avahi on mDNS support which CUPS needs - Avahi does the advertising, registering and sharing devices, and resolved will handle '.local' address resolution. It will work with following steps:
* put [option]`MulticastDNS=resolve` into [filename]`/etc/systemd/resolved.conf`