u/Glittering_Project_1

▲ 13 r/StallmanWasRight+1 crossposts

Hi all. While trying to print something on my printer that worked fine for years, I got the error message "A printer's ink pad is at the end of its service life. Please contact EPSON Support." (or the german equivalent "Tintenkissen am Ende seiner Lebenszeit"). The printer subsequently seized to work and locked me out of the touchscreen and wifi connectivity.

Since I didn't really feel like paying a huge amount of money to EPSON Support, here is how to fix that for the price of a 5$ replacement part. This will work with a bunch of Epson printer models (all models known by PyReInk) and works on virtually all operating systems.

When cleaning the printer inkjets, a bit of waste ink is purged into a sponge that fills up overtime. To prevent this sponge from oversaturating and leaking, a waste ink counter (WIC) exists and blocks the user from printing when the sponge is almost full. So the first step is to fix the physical problem by replacing the sponge. One can just order such a replacement sponge from various office suppliers (make sure it fits your model) and replace it using online tutorials. (Technically I think you can also just wash it to get rid of the ink but I haven't tried that)

After the sponge is replaced, here comes the hairy part you would usually have to pay the epson support for: Resetting the WIC count that is stored in the printer's memory. Luckily, I found a tool that does exactly this (github.com repository). It is written in python, and I recommend installing the uv version manager for ease of use. Just follow the installation instructions for your operating system here.

As a note of caution: You are modifying the EEPROM of your printer (this is where the WIC count is stored). Doing so can (in the worst case) brick your printer completely. You should follow the instructions closely and if you feel unsure ask some LLM about it. I provide no warrantly and assume no liabiliy regarding this guide.

To get the tool running, download the repository, and open a command terminal inside the repo (if you're on windows you should open an administrator terminal). Then you can run uv add pyusb zeroconf pysnmp to install required dependencies. Now, create a file called main.py, and put the following code into it:

import reinkpy

for p in reinkpy.Device.find():
  print(p.info)

You also need to plug in your printer via usb, and may need to stop additional services running on your device that might also use the printer as they might interfere with our script.

When now running .venv/bin/python main.py, you should get a list of printers attached. Make sure the printer you want to reset is in there. (If you are on linux, you should preface this command with sudo, on Windows this should already work when using an admin terminal)

Replace the contents of main.py with the following:

import reinkpy

printer = reinkpy.Device.from_usb(manufacturer="EPSON")
epson = printer.epson

if not epson.spec.model:
  print("could not get printer model, you can try to set it manually using `epson.configure("your-model")  # e.g. XP-630`
  exit()

print(epson.read_eeprom(*range(256)))

And run it like before. This should spit out a bunch of numbers in the format [(0, 0), (1, 0), (2, 1), ...] . To finally write all zeros into the WIC counter stored in eeprom, just append epson.reset_waste()inside of your script. You should see something like

INFO   reinkpy.epson    Running do_reset_All_waste_counters_x06x10x11x12x13x14x15x34x35x1ED
INFO   reinkpy.d4       Entering IEEE 1284.4 mode...
INFO   reinkpy.d4       Exit OK

This means it worked. Now as a last step, turn of the printer using the power button, wait for a few seconds and turn it back on. This will make the eeprom values persist. The error message should be gone now. Voila!

Small note: I wrote this guide off memory after doing all this today, so it might contain small errors. Corrections are welcome.

u/Glittering_Project_1 — 28 days ago