I'm trying to setup an old Lexmark 1100 printer via an USB-to-Parallel adapter.
It seems that Debian correctly recognizes the adapter:
root@debian:~# dmesg | tail --lines=6
[ 130.042983] usb 5-1: new full-speed USB device number 2 using ohci-pci
[ 130.232289] usb 5-1: New USB device found, idVendor=1a86, idProduct=7584
[ 130.232297] usb 5-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 130.232301] usb 5-1: Product: USB2.0-Print
[ 130.399415] usblp 5-1:1.0: usblp0: USB Bidirectional printer dev 2 if 0 alt 1 proto 2 vid 0x1A86 pid 0x7584
[ 130.399507] usbcore: registered new interface driver usblp
CUPS installation also happens without any visible error.
Basically, I'm following the steps available at OpenPrinting installation:
apt install lsb
- download the 64bit driver for Debian
dpkg -i openprinting-lm1100_1.0.2a-6lsb3.2_amd64.deb
- Start Menu > Preferences > Print Settings
- Add printer to CUPS
(sometimes the device is listed as "Unknown" sometimes as "Lexmark 1000", although the correct would be "Lexmark 1100", and the connection is always listed as "USB")
Unfortunately, after such installation steps, the printer simply doesn't print. When I try to print a test page, most of the time the printer remains quiet like dead. The only info I've got from CUPS is "Printer State: Processing - Sending data to printer."
Looking at the driver package, there are two simple scripts (lm1100change
and lm1100back
) that moves the print head to service and parking position:
root@debian:~# cat /opt/OpenPrinting-lm1100/bin/lm1100change
#!/bin/sh
dd if=/opt/OpenPrinting-lm1100/share/lexmarkchange of=/dev/lp0
root@debian:~# cat /opt/OpenPrinting-lm1100/bin/lm1100back
#!/bin/sh
dd if=/opt/OpenPrinting-lm1100/share/lexmarkback of=/dev/lp0
They are hardcoded to use /dev/lp0
and should probably be edited to use the USB-to-Parallel adapter instead. However, even replacing /dev/lp0
with /dev/usb/lp0
such scripts still don't work.
I'm sure this issue is not due to broken hardware because:
- The printer works fine via a PCI parallel card.
- The USB-to-parallel adapter works fine with an Epson Stylus Color 480 printer.
Questions
- Any idea how to make the scripts
lm1100change
andlm1100back
work? - Does the Lexmark 1100 driver supports an USB-to-Parallel adapter?
If not, is there any workaround? ex: symbolic links? - Any idea how to install the Lexmark 1100 printer via an USB-to-Parallel adapter?
System Specification
- Operating System: Debian Stretch LXDE
- USB-to-Parallel Printer Adapter: BF-1284 | Manual
- Printer: Lexmark 1100 Color Jetprinter | User's Guide
Debug
root@debian:~# lpstat -lp
Lexmark-Lexmark-1000-3 root 1024 Tue 19 Nov 2019 12:26:55 PM -03
Status: Sending data to printer.
Alerts: job-printing
queued for Lexmark-Lexmark-1000
root@debian:~# lpstat -v
device for Lexmark-Lexmark-1000: usb://Lexmark/1000
root@debian:~# cat /var/log/daemon.log | tail
Nov 19 13:16:30 debian systemd[1]: Stopped target Printer.
Nov 19 13:16:36 debian systemd[1]: cups.socket: Socket service cups.service already active, refusing.
Nov 19 13:16:36 debian systemd[1]: Failed to listen on CUPS Scheduler.
Nov 19 13:16:36 debian systemd[1]: Dependency failed for Configure Plugged-In Printer.
Nov 19 13:16:36 debian systemd[1]: configure-printer@usb-003-006.service: Job configure-printer@usb-003-006.service/start failed with result 'dependency'.
Nov 19 13:16:36 debian systemd[1]: Reached target Printer.
Nov 19 13:17:15 debian dbus[357]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service'
Nov 19 13:17:15 debian systemd[1]: Starting Hostname Service...
Nov 19 13:17:15 debian dbus[357]: [system] Successfully activated service 'org.freedesktop.hostname1'
Nov 19 13:17:15 debian systemd[1]: Started Hostname Service.
root@debian:~# systemctl cat configure-printer@usb-003-006.service
# /lib/systemd/system/configure-printer@.service
[Unit]
Description=Configure Plugged-In Printer
Requires=cups.socket
After=cups.socket
[Service]
ExecStart=/lib/udev/udev-configure-printer add "%i"
Follow-up
Considering that the scripts lm1100change
and lm1100back
where hardcoded with /dev/lp0
instead of /dev/usb/lp0
, at first you might guess that the executable lm1100
would also be hardcoded as /dev/lp0
instead of /dev/usb/lp0
.
However, a careful look at the source code shows that the only reference to /dev/lp0
were in the comments and in the readme:
lx.c
* Usage:
* Create the script 'lp':
* !/bin/sh
* gs -q -sDEVICE=pbmraw -r288 \
* -dNOPAUSE -dSAFER -dBATCH \
* -sOutputFile=- \
* $1 | lx > /dev/lp0
* then call:
* lp <file>.ps
README
A way to print a postscript file would be to run:
gs -q -sDEVICE=ppmraw \
-r300 \
-sPAPERSIZE=(Letter|A4|Legal) \
-dNOPAUSE \
-dSAFER \
-sOutputFile=- \
- | lm1100 - > /dev/lp(0|1|2)
Therefore, it seems that lx
is device path agnostic and the source code doesn't need to be recompile. It would be just a matter of calling:
gs -q -sDEVICE=pbmraw -r288 \
-dNOPAUSE -dSAFER -dBATCH \
-sOutputFile=- \
$1 | lx > /dev/usb/lp0
in order to make it print via the USB-to-Parallel adapter.
Recently, I've talked to one of the developers which explained the following:
The program 'lx' is very simple: it gets the pixels and send them to the printer without any strong conversion. If the binary flow sent by the program is the same as the one the printer receives, it should work. As it does not, this means the binary flow is changed somewhere in the system (USB to parallel driver, USB driver) and/or in the USB to parallel device. I cannot know where.
Moreover:
Your problem is not easy to solve: it asks for low level debug. The first things to check are the creation of the printer (/dev/lp0 or some other name), and, then, if simple commands (head move) are working...
Finally, since the developer is having trouble with this issue, I will have to give up and continue using the cumbersome Desktop PCI-Parallel card.
lpstat -lp
? How aboutlpstat -v
? When you attempt to print, does it result in any messages produced in/var/log/daemon.log
? What do they say?