Environment
- Printer: Ricoh Aficio SP 112 (USB, serial X024M530950)
- OS: Armbian (Debian trixie), aarch64
- Package: printer-driver-foo2zjs 20200505dfsg0-3+b1 (Debian package)
- Driver/PPD: Ricoh SP 112 Foomatic/foo2ddst (recommended), grayscale
Symptom
- CUPS accepts the job, foomatic-rip/foo2ddst-wrapper run without errors,
all data is sent to the USB device without error.
- The printer receives the job (confirmed by directly writing the raw
DDST stream to /dev/usb/lp0, bypassing CUPS entirely) but never feeds
paper. The status LED blinks continuously and the job never completes
on the printer side.
- The built-in printer self-test (via the physical Start button) prints
fine, confirming the paper feed mechanism itself is not broken.
- Printing the exact same document from Windows using Ricoh's official
driver works fine on the same printer/cable.
- Printing via an alternative community CUPS filter
(https://github.com/vaginessa/ricoh-sp112-ppd, "pstoricohddst-gdi")
also works fine on the same printer.
Diagnosis
Comparing the PJL header emitted by foo2ddst.c against the working
pstoricohddst-gdi script, I found that foo2ddst never sends
"@pjl SET HOLD=OFF", while pstoricohddst-gdi always does:
@PJL SET COVER=OFF
@PJL SET HOLD=OFF <-- present in the working driver, missing in foo2ddst
I confirmed via grep -n HOLD foo2ddst.c that this PJL command is never
emitted anywhere in foo2ddst.c.
Fix
Adding this single line after the existing COVER=OFF line in foo2ddst.c
(~line 693, function that emits the PJL job header) resolves the issue
on my unit:
fprintf(fp, "@PJL SET COVER=OFF\r\n");
fprintf(fp, "@PJL SET HOLD=OFF\r\n"); // <-- added
After rebuilding foo2ddst with this change, the printer feeds paper and
prints correctly through CUPS as expected.
Notes
- This may only affect certain SP111/SP112 firmware revisions that
default job HOLD state differently; other users may not see this
since foo2ddst apparently works for other SP112 units.
- I also tested disabling JBG_LRLTWO in the JBIG encoding options as an
earlier hypothesis; that change alone did NOT fix the issue. The
HOLD=OFF fix above is what actually resolved it.
- Happy to test further patches or provide additional captured DDST
streams if useful.
Environment
Symptom
all data is sent to the USB device without error.
DDST stream to /dev/usb/lp0, bypassing CUPS entirely) but never feeds
paper. The status LED blinks continuously and the job never completes
on the printer side.
fine, confirming the paper feed mechanism itself is not broken.
driver works fine on the same printer/cable.
(https://github.com/vaginessa/ricoh-sp112-ppd, "pstoricohddst-gdi")
also works fine on the same printer.
Diagnosis
Comparing the PJL header emitted by foo2ddst.c against the working
pstoricohddst-gdi script, I found that foo2ddst never sends
"@pjl SET HOLD=OFF", while pstoricohddst-gdi always does:
I confirmed via
grep -n HOLD foo2ddst.cthat this PJL command is neveremitted anywhere in foo2ddst.c.
Fix
Adding this single line after the existing COVER=OFF line in foo2ddst.c
(~line 693, function that emits the PJL job header) resolves the issue
on my unit:
After rebuilding foo2ddst with this change, the printer feeds paper and
prints correctly through CUPS as expected.
Notes
default job HOLD state differently; other users may not see this
since foo2ddst apparently works for other SP112 units.
earlier hypothesis; that change alone did NOT fix the issue. The
HOLD=OFF fix above is what actually resolved it.
streams if useful.