Select your language

Download the ELP Linux version from here.

ELP can be installed as a filter into the CUPS environment. There can be found excellent manuals on the internet for this purposes. Here is the short reference. There are 2 principle ways to run ELP under CUPS.

  1. As a filter, like an PPDS which is a little more complex
  2. As an interface script (deprecated)

1. ELP Integration into CUPS using the Filter method

The following instructions do assume that the standard path of CUPS is /usr/lib/cups and the downloaded ELP filter from this website is renamed to ELP.Linux. If your CUPS path is different you have to adapt the settings accordingly.

1.1 Please extract the provided zip file to this folder: /usr/lib/cups/elp

Take care about the access settings using chmod for the complete directory reading, writing, creating and erase especially for the user or group lp.

1.2. Make the ELP.Linux file executable:

chmod 755 /usr/lib/cups/elp/ELP.Linux

1.3. If needed store a new "convert.ini" in the directory

1.4. Create a file "elptopcl" under /usr/lib/cups/filter with the content from below and set the permissions to 755:

# set -x
[ -n "$6" ] && exec <"$6"
/usr/lib/cups/elp/ELP.Linux STDIN STDOUT -d/usr/lib/cups/elp -c/usr/lib/cups/elp/convert.ini -p3$2 -p4$3 -q8

Notes: See ELP Command Line Arguments for full description for calling ELP.

Please note that additional parameters have to be added here, e.g. for licensing the product
If your installation path does contain blanks you need to surround the arguments with " signs:

"/usr/lib/cups/elp/ELP.Linux" STDIN STDOUT "-d/usr/lib/cups/elp" "-c/usr/lib/cups/elp/convert.ini"

1.5. Create file "my.types" at /etc/cups with the content "application/elp"

The "my" is subject to be changed, the extension ".types" is a must.

Important: Use an ASCII editor to create the in this document described files. The files have to be plain ASCII. So no RTF or other word
processor formatting information is allowed! You can create this file for example using the following command:
echo "application/elp" > /etc/cups/my.types

1.6. Create any printer:

lpadmin -p elptest -E -m raw -v lpd://

elptest is the printer Q-Name

1.7. Use an ASCII editor to edit this printer setting at /etc/cups/ppd and include the line

*cupsFilter: "application/elp 0 ELPToPCL"

IMPORTANT NOTE: If there is already a *cupsFilter definition in the PPD file, erase the old one, do NOT comment it out!

1.8. Rename this printer in any name, which is not predefined in cups e.g "ELP.ppd"

For every new Print Queue do this:

1.9.1 Create a new printer in CUPS using "raw" printing. This means without a driver

1.9.2 If CUPS would print now, cups will check in any case at /etc/cups/ppd if an associated driver could be found. Example the name is "Testprinter" the CUPS checks for a driver in "/etc/cups/ppd/" named "Testprinter.ppd".

So change into the directory /etc/cups/ppd and creat a "Link" with

"ln -s /etc/cups/ppd/ELP.ppd /etc/cups/ppd/Testprinter.ppd"


drwxr-xr-x 2 lp sys 200 Dec 17 07:59
drwxr-xr-x 6 lp sys 688 Dec 9 07:58
-rw-r--r-- 1 root root 73040 Nov 20 18:37 ELP.ppd
-rw-r--r-- 1 root root 73040 Nov 20 13:15 ELP.ppd_org
Lrwxrwxrwx 1 root root 11 Dec 17 07:59 Testprinter.ppd -> ELP.ppd
Lrwxrwxrwx 1 root root 11 Nov 19 09:56 edv2.ppd -> ELP.ppd
Lrwxrwxrwx 1 root root 11 Nov 20 15:27 tester.ppd -> ELP.ppd

1.9.3 Announce this new function to CUPS.

"lpoptions -p Testprinter -o document-format=application/elp"

If this is the first printer using this function, CUPS creates a new file at /etc/cups named "lpoptions"

Now all printers of this type can be registered direct there, if they should use ELP.

1.10. Finally: If the new print queue "Make Model" is shown as type "Local Raw Printer", the cups print system needs to be restarted for the changes to take effect.

Warning: Using this command on a productive print system may cause active print jobs to be reprinted from the beginning.

Command: /etc/init.d/cups restart (RHEL alternative: service cups restart) (SLES alternative: rccups restart)

1.11. If you need the printer name within ELP in a rule or simply as a variable, Add in rule GLOBAL of your configuration file convert.ini this key:


More environment variables are described here:
For OMR, please do not use CLASS as a printer name.

2. ELP Integration using the Interface Scripts method (deprecated)

CUPS below Version 2.2 also supports the use of "interface scripts" as known from System V AT&T printing systems. Just install the printer with the -i option:

lpadmin -p ... -i /path/to/interface-script

Note: Since all filtering is disabled when using an interface script, scripts generally should not be used unless there is no other driver for a printer.

The content of the script can be a standard ELP command line:

/user/ELP/ELP.Linux STDIN STDOUT -d/user/ELP -c/user/ELP/convert.ini

Note: If you installation path does contain blanks you need to surround the arguments with " signs:

"/user/ELP/ELP.Linux" STDIN STDOUT "-d/user/ELP" "-c/user/ELP/convert.ini"

Known "issues" when printing with Filters or Interface scripts:

The biggest problems we faced in the past is, that CUPS does not execute the filter / Interface Script. This was always because CUPS did treat the data stream in RAW mode, which means, that it is NOT passed through any filter.

Prevent printing RAW mode via SAMBA:

Printing to CUPS via UNC path, e.g. using Net Use DOS commands may cause you a headache, because the job is passed through a CUPS filter in RAW mode. In that case, simply edit /etc/samba/smb.conf and in section GLOBAL set a small # at first column in line "cups options = raw"
Example of just that part of the smb.conf:
printing = cups
#cups options=raw
Important. After having done that change you need to restart the Samba server (reload is not sufficient)

Prevent printing RAW mode via CUPS-LPD:

The CUPS-LPD command: -o name=value is most often this is used to disable the "l" filter so that remote print jobs are filtered as needed for printing.

The last client had -o application=raw and the filter was not executed. So he changed it to -o application=plain and all worked fine.


a) You find a lot more information about CUPS printing in the internet!

b) You can use the GetEnvVariable to read a needed CUPS printing environment variable into ELP, for example to add it it the PJL section of a job:

Available Cups environment variables Every filter receives a fixed set of environment variables that can be used by the filter:

  • CHARSET - The character set used by the client for this print file
  • CONTENT_TYPE - The original document type, such as "application/postscript"
  • CUPS_DATADIR - The location of CUPS data files
  • CUPS_SERVERROOT - The location of CUPS configuration files
  • DEVICE_URI - The output device URI
  • LANG - The language used by the client for this print file
  • PATH - The execution path exported to the filter
  • PPD - The full filename of the printer's PPD file
  • PRINTER - The name of the printer queue
  • RIP_CACHE - The maximum amount of memory each filter should use
  • SOFTWARE - The name of the CUPS software, typically "CUPS/1.1"
  • TZ - The local timezone
  • USER - The name of the current user


We use cookies

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.