How to install printers?

I am trying to get a HP Laserjet 1018 to work with Bluefin-DX. When I run hp-plugin in the terminal, the installation stops with a “error:Plugin installation failed”. What is the preferred method of installing hp-plugin / HPLIP on Bluefin?

Answering my own question if anyone else has this issue: HP printer - #6 by sankarvinayak - Fedora Discussion

It is related to a long standing bug in fedora silverblue can be found in bugzilla redhat

It is caused by the design of the silverblue which will not allow modification to the /usr directry.

HP plugin and firmware are inserted into the /usr/share/hplip/ folder by the hp-setup utility and the firmware are in /usr/share/hplip/data/firmware

The only workaround I found is to temporarily unlock the /usr by using the command
ostree admin unlock
and then running the hp-setup or hp-plugin utility which enable you to print until the next reboot after which the /usr will be as the old.

So each time you have to unlock and install the drivers if you want to print.

It was reported to the upstream hp project long time ago and no changes has been made.

Newer printers mostly support the IPP and does not require the proprietary plugin installation step.
so for someone like me with an older HP printer the options are

  1. Install fedora workstation instead of silverblue you will not have any issue setting up
  2. Unlock /usr every time you need to print
  3. If available use the open open printing drivers (with mixed results for my laserjet 1007)

It’s a bummer that this doesn’t work, you’d think just adding the hplip packages would work, we’ve had those in there since November of last year. :imp:

If the firmware is redistributable I wonder if we can just include it on disk as part of the container build?

Since you have the firmware. Can you try printing with cups with that firmware specified?

Additionally, if you need just that directory mutable there are workarounds so you don’t have to do admin unlock

What are the workarounds, specifically?

take a look at how we handle swtpm. You can bind mount a mutable location over the something in /usr

1 Like

I tried to look up but couldn’t find relevant info. From my (limited) understanding, I think you meant creating a directory in a location that is writable, e.g. /var/mydir, then bind mount this directory over the directory in /usr that we want to be mutable, e.g. /usr/somedir, using the sudo mount --bind command. Correct me if I’m wrong.

Would the bind mount persist over a reboot?

You got the gist of it.

Unfortunately no. You can look at swtpm-workaround and incus-workaround services to see how we handled it.

I would also recommend trying CUPs and specifying the firmware there. At work I found an HP 44" plotter and was able to interact just fine using Gutenberg ppds.


However I see what you mean that it calls for the proprietary plugin

I found a solution called gutenprint, it’s already available for install on Fedora Packages, so just add it to the section of packages.json that pertains to your setup.

Here’s my file - I put it under all.include.bluefin[]: bluefin/packages.json at 4a536f04fe2d6c74fc348ced0664859198ba59fb · jamescalderon/bluefin · GitHub

Gutenprint is already included as a dependency.

1 Like

I’ve a HP LaserJet MFP M426fdw.
How can I install the driver for the printer?
I mean,which way should I use gutenprint, (or any other way) to install the drivers?
I’ve tried hplip but it cannot install on bluefin.

The only way I found is to use a systemd service that uses an overlay each time the computer or the printer is turned on, as described in this thread of the Fedora forum.

It’s an ugly way to do it, but it works on my side and until HP releases their plugin as a binary package and relies on their awful .run file to install the proprietary blob, it’s about the only way to do it on an image based distro.

Fiddling with the Settings app in Printers → HP → Printer Details → Search for Drivers, I selected my model and drivers were installed.
It says ‘No active jobs’, but trying to print I get that the printer ‘Rejecting jobs’. It’s connected in my Lan and I can print from every other device mac, win, ios

Yes, your model, like mine requires the hp binary plugin : What is the HPLIP Binary Plug-In and How Do I Install It? | hp's Developer Portal

You need to use the systemd service I linked to in order to use it, as the hp-plugin utility does not work on Bluefin or any “atomic” distro where the image is read-only.

Fedora Silverblue opened a ticket years ago and HP has done nothing to help. I tried every possible way to install it on a custom image. The only way I found to make it work, after days of searching for a solution, is the one I linked.

1 Like

My printer (Canon LBP622Cdw) requires a cups filter in /usr/lib/cups/filter so I can’t use the driver package canon provides for it.

My workaround was to open up the CUPS web interface, http://localhost:631/admin, and add my printer there using ipp. The address for mine is

ipps://canon-printer.lan:10443/ipp/print

No drivers required, all the necessary features. Maybe your printer can use ipp or ipps too

Wait what? Do you mean we could send people with these acursed printers to a solution that would work?

No. HP printers have an entirely different problem. I have HP LaserJet 1018 but I expect many other work in a similar fashion:

They don’t have persistent storage for the firmware so every time you turn it on a firmware must be loaded into the printer. A simple cat/tee command can do that, e.g. cat <firmware> > /dev/usb/lp0. But it must be done or the printer won’t work. This can be automated with a simple udev rule, in fact that’s what hplip and foo2zjs do, however there’s a catch. The firmwares’ license doesn’t allow public redistribution, and the license must be explicitly accepted by the user. hplip and foo2zjs solves this problem in a similar fashion: they provide tools that download the firmwares and the udev rules and make the user accept the license before installing them. Both has a problem. Fedora’s foo2zjs package contains only the ppd drivers and excludes anything firmware related from it, hplip tries to write the read-only part of the system. It should be possible to create a simple ujust task to properly install foo2zjs along with its missing udev rules, however foo2zjs supports only a very limited number of printers, so focusing on hplip instead would be better. I didn’t look into hplip to know if there’s any way to solve its problem but I know it has a config file in /etc where it’s possible to specify the directories it uses so there’s hope.