Thanks to the OpenPrinting Database and the Common Unix Printing System (CUPS), printer support on GNU/Linux is much easier than it was at the turn of the millennium. However, one area in which support still lags is in the detection of ink levels in inkjet printers.
Chances are that an ink level utility will be available only if you have a Canon, Epson, or Hewlett-Packard printer -- and even then, only if you're lucky. If you have an Epson Stylus, you may be able to use Mtink, while for other printers by these manufacturers, your best bet is one of the graphical displays for the Libinklevel library.
To use either Mtink or a Libinklevel front end, you need to know your printer's manufacturer and model and the parallel or USB port with which it connects to your computer. Although both programs have some degree of auto-detection, in both cases it is unreliable.
The easiest way to gather the information you need is to open the Printer tool in the GNOME Administration menu or the KDE Control Center and select your inkjet printer. In the GNOME tool, you have to click the Become Administrator button and enter the root password in order to see the printer port, while in the KDE tool, you should click the Add Printer button with the inkjet on to have it auto-detected.
Alternatively, you can get the information from the /proc directory for USB devices. In Debian, the command would be
less /proc/bus/usb/devices, but in other distributions, you might have to search the /proc directory a little to find the exact location.
You also need to have access to the printer from your everyday account. In most modern desktop distributions, you should have this access automatically. If you don't, you need to add the account's username to the printing group -- in many distributions, the group is lp -- either through your desktop user and group tool or by manually editing /etc/group and changing permissions on the port.
With these preliminaries taken care of, you can install the monitor of your choice. Both Mtink and Libinklevel are available in most distributions. If you do not find the front end you prefer in your distro's repository, you can always download the source code. Since all these utilities are small, compiling should take no more than a couple of minutes. Dependencies include both the GNU Compiler Collection (gcc) and libieee1284, which communicates with parallel ports.
Before using a Libinklevel display, you might want to go to the project site and check its list of supported printers. Printers not supported, the site suggests, either do not transmit ink level information, or do not do so in an orthodox way, or may be too new to be supported. Unsupported printers include many models of Hewlett-Packard DeskJet and OfficeJet printers. In addition, some Canon printers report only whether there is or isn't enough ink remaining to use a cartridge.
Using the monitors
All the ink level monitors function in much the same way. They include functions to detect or set up the printer, indicators of the amount of ink remaining -- usually in the form of a bar graph -- and a reset for when you change ink cartridges. Most of them place an icon in the notification tray on your desktop.
In Mtink, you also have the options to clear the nozzle, align the cartridge head, and reset the printer, all of which are necessary because the hardware that is part of the cartridge on other inkjets is apparently part of the printer in Epson Stylus models. More than 90 models are supported in Mtink and Ttink, its command-line equivalent, which many distributions no longer bother carrying. According to snippets on the Internet, Mtink may also detect other models of Epson printers, or even printers made by other manufacturers, but I have been unable to verify this claim.
Should you choose to use Libinklevel, you have no shortage of front ends. The project site lists pyinklevel, a Python utility, but the link is no longer active. For those who prefer the command line, Ink is available from Markus Heinz, the developer of Libinklevel, although you may soon tire of having to specify the type of printer and port each time you want to check on the ink levels. On GNOME, you have the option of using GMSO or Inkblot, both of which differ more in appearance than functionality or ease of use. On KDE, the choices include Kink, which has the advantage of being set up with a wizard; Ink Level Monitor, a desktop applet using Karamba; and QInk, which is only at version 0.3.4 but is finding its way into the major distributions.
Your choice of ink level monitor will probably be based chiefly on its support for your inkjet. However, if you are using one based on Libinklevel, you might have the luxury of choosing one by other criteria, including your desktop preference and sense of aesthetics -- given their common dependency, there is no functional reason to prefer one of the Libinklevel's graphical interfaces over another.
However, with printer models being released so rapidly -- especially at the lower end of the market, where many inkjets reside -- you are just as likely to find that your printer is unsupported, especially if it is recent. In this situation, your best choice is to contact the Libinklevel project and ask for support.