Files
mesh-catalog/modules/cups/README.md
T
jochen d0d5546088 Give the remaining tray applets their modules, each with one start
openrazer (the official driver, daemon and library), polychromatic (the
AUR tray, kept as found; its i3 line moves out of the i3 module into its
own node-display-session contribution), forticlient (the AUR VPN client:
its service declared, its configuration never read) and nm-applet (the
desktop half of NetworkManager, apart from the server-side module).

The openrazer daemon fails on both workstations because the account is
not in the openrazer group; openrazer_check names it and the README
carries the one-off step, since the account's user resource is zsh's.

desktop.go learns to tell a program from another sharing its 15-character
command name, so polychromatic's tools never count or end themselves, and
a copies test holds the six carriers to one text.
2026-10-05 15:10:30 +02:00

104 lines
5.6 KiB
Markdown

# cups
Printing on the two workstations (novox/hq research 027/02: "`cups` with the printer's driver"; to-be 42
phase 2 step 9).
## Owns
| what | where |
|---|---|
| the print scheduler | package `cups` |
| driverless printing: the filters that turn a document into what an IPP Everywhere printer takes | package `cups-filters` |
| the scheduler, started on demand and at boot | `cups.socket` and `cups.service`, running and enabled |
All from the official repositories. The queues (`/etc/cups/printers.conf`, the PPDs CUPS generates)
and the default printer are CUPS's own state, set through its tools. They are found (ADR 0182), and
the module declares none of them.
## The printer's driver: none needed for the Brother
Research 027 asked for "`cups` with the printer's driver". Measured on 2026-10-04:
| workstation | queue | device | prints through | driver package installed |
|---|---|---|---|---|
| laptop | `Brother` (MFC-L8690CDW) | `ipp://` on the LAN | **IPP Everywhere, driverless** | `brother-mfc-l8690cdw` (AUR), unused |
| desktop | `Brother_MFC_Novox` (default) | `ipp://` on the LAN | **IPP Everywhere, driverless** | `brother-mfc-l8390cdw` and its `-debug` (AUR), unused |
| desktop | `Kanjuro` (Canon PIXMA MG4200) | `cnijnet:` | the vendor's PPD and filter | `cnijfilter-mg4200` 3.80 (AUR) |
**Both Brother queues already print without a vendor driver.** CUPS's own IPP Everywhere support,
with `cups-filters`, is the whole driver. The vendor packages installed beside them serve no queue,
and the laptop's pulls in 32-bit glibc from multilib for a filter nothing runs. So the module declares
no driver, and the Brother needs nothing outside the official repositories.
**The Canon is the exception, and it is blocked.** Its driver is a user-repository package from 2012,
with its own network backend. Like snapd, it waits for the mesh's package repository (research 027
question 1, option P2). Until then it stays as found on the desktop. If the printer answers IPP (check
with `cups_drivers` on a fresh queue, or `driverless` from `cups-filters`), a driverless queue replaces
it and the question goes away.
## Improves
- **An owner for the scheduler.** It runs on both workstations today, enabled by nothing the mesh records.
- **No driver package that nothing uses.** The README's one-off step below removes them, once.
- **Supplies and state from anywhere.** `cups_printers` answers each queue's toner levels and flags a
low one. It also answers why a queue stopped, without opening the printer's page.
- **The laptop has no default printer**, so a print without a named printer fails there.
`cups_default` sets one; it is the operator's choice, not declared.
## Tools
All answer JSON; `(r)` reads, `(a)` acts. They run as the operator account. CUPS lets any account
print and cancel its own jobs. Setting the default, resuming a printer, and cancelling another
account's job are kept for its administrators, so those go through `sudo -n`; a cancel tries the
account first.
| tool | what |
|---|---|
| `cups_printers` (r) | every queue: state, enabled, accepting, default, device, make and model, driverless or not, state reasons, supply levels (low flagged) |
| `cups_queue` (r) | jobs waiting or printing, or the completed ones, newest first, bounded |
| `cups_cancel` (a) | one job, or every job on a printer |
| `cups_print` (a) | a file on this machine to a printer or the default, with copies and IPP options; answers the job id |
| `cups_default` (r/a) | read the default, or set it |
| `cups_resume` (a) | enable a stopped printer and make it accept jobs |
| `cups_drivers` (r) | how each queue prints, the packages that bring filters and backends (foreign ones flagged), findings, and the driver models CUPS offers, filtered |
## What changes when it is assigned
Nothing on disk on either workstation: both have `cups` (explicit) and `cups-filters` (as its
dependency), with `cups.socket` and `cups.service` enabled and running. The packages become the
mesh's; `cups-filters` is now declared explicitly.
## The one-off step for the operator (ADR 0182)
The mesh removes nothing it did not install. Once the Brother queues are confirmed printing (they do
today), remove the unused vendor drivers, once:
- **laptop:** `brother-mfc-l8690cdw`, then whatever `pacman -Qdtq` shows it alone pulled in
(`lib32-glibc`).
- **desktop:** `brother-mfc-l8390cdw` and `brother-mfc-l8390cdw-debug`. Keep `cnijfilter-mg4200` while
the Canon queue is used.
## The print applet: not this module's
The desktop has `system-config-printer` (official, explicit, installed 2026-10-04). Its package ships
`/etc/xdg/autostart/print-applet.desktop`, so from the desktop's next login `dex` starts
`system-config-printer-applet`, a tray icon for print jobs and printer problems. The laptop does not
have the package.
This module does not take it:
- `cups` needs no display and declares nothing graphical. The applet requires `x11-display`, and a
GTK package in this module would put it on any machine that prints, the laptop included, where the
operator never installed it.
- The queues and the default printer are already this module's tools (`cups_printers`, `cups_queue`,
`cups_default`), which is most of what the applet's window offers.
So the applet is left as found on the desktop, started by its package's entry. If it is wanted on both
workstations, it becomes a `system-config-printer` desktop module of its own, beside `blueman` and
`nm-applet`, requiring `x11-display`. If not, removing the package on the desktop ends it.
## Leaves as found
The queues and their PPDs, the default printer, `cups.path` (enabled by the package's preset),
`system-config-printer` on the desktop, and `cnijfilter-mg4200`.