Label printing software (Brother QL series)

Can anyone point me to (free) Linux label printing software that works well with the Brother QL series of label printers?

I have found nothing that seems able to support continuous labels. With these, the labels are cut to size by the printer. The “page size” is specified only by the width of the roll. Software should be able to cater for labels with a specified fixed length and a flexible length (ie, if I wanted to create a banner, I should be able to specify the width of the roll. The length of the label should increase as I type.

I must admit that given the issues detailed below I’m not 100% certain about Brother’s CUPs driver for our QL-710W. I know that I can send images from my own Android printing app which prints over CUPS. With that I can set at page/label size and at least with imagefitpage, I’m getting lablels, with the whole image on the label. I’d need to look further but my provisional feeling is that these problems are more likely to lie with the Linux applications. My app does not check constraints though (ie. I believe a print setting might only be enabled under certain conditions - I don’t think it is one but printing a CD media through the paper tray on my Epson printer doesn’t make lot of sense).

Accepting the limitation of both dimensions being fixed for the moment, I have tried:

gLabels: Worked OK for a pre defined fixed dimension label that matches my default label size set in CUPS. Fails when I try to create say a 38mm x 50mm label for use with a 38mm wide continuous roll. Trying to print sends the printer into an error state (red light flashing). Unchecked (I mean I could try changing the CUPS default) but I’d guess this could because of a mismatch between glabels pagesize and the roll in the printer. Any option that might change this in glables is greyed out.

inkScape: All page settings greyed out as “not available” from the start.

calligra words: This does allow me to set a page size for printing. Labels print but starting again with say 30mm x 50mm I can’t find any combination of the paper size for calligra and the printing page size, eg. portrait/landscape that will get all the text on a label. “This is a label” might for example produce “Thi” in the the centre of the lable before the print dissapears off the edge of the label.

libreoffice writer: Pretty similar to calligra words with the added problem that libreoffice either has a bug or works in revers logic to my own. I can’t set the page size in “printer options” and the only way I can change it for any printer is by selecting “use only paper size from system tray setting” (on dialogs where this is available).

kbarcode: Only offers a small fixed stet of paper sizes that only seem suitable for printing to sheets (eg A4 page) of labels.

Just a couple of comments re my doubt with the CUPS driver. The ppd file did contain UI constraints but removing them and installing a new printer with the modified ppd makes no difference. That and other printers I have seem to have the size options I think I need greyed out in gLables and inkscape…

I have succeeded in sending a text file through to CUPS (sort of via cups4j) from my desktop PC and have it print on the 38mm roll.

It really does seem that at least most of the problems are with the Linux applications I’ve tried so far.

Perhaps this will help http://unix.stackexchange.com/questions/91657/duplex-printing-without-cups

Thanks John but not really. I guess I’m clouding things here trying to work through a few of my other thoughts related to the problems I’ve been having with the Linux apps out loud as it were.

Ideally, I’d just like a GUI Linux app that “just works” with these printers. Brother’s Windows app works nicely but I can’t get it to install in Wine and I hate having to succumb to booting Windows and only keep it as an “in case I’m stuck” OS on a dual boot laptop.

Maybe, if nothing turn ups, I’ll see if I can come up with something CUPs based for my own use, probably in Java that’s a bit more geared to these stand alone/dedicated label printers than say gLabels is. Might well fail but might well learn something…

Hi John. Assuming the .ppd contains the correct configuration entries for your hardware, are you able to generate a properly formatted print job using the lpr command directly?

lpr -P <printer_name> -o <option 1> -o <option 2> foo.pdf

See here for example (P-Touch QL-500 model)…

http://blog.philippklaus.de/2015/09/brother-p-touch-ql-500-bw/

I wonder if the following P-Touch foomatic driver might work for this model?

http://www.diku.dk/~panic/P-touch/

Yes. I’m getting the same output as I did with the cups4j method I’d tried. I have one query over the driver which I am asking Brother about (I think the ppd entries intended for continuous paper are given eg. “68Dia” but there is no “38Dia”, only 38X1, etc.) but things at least print as long as the width is set, eg. with the paper I’ve got in the printer now:

lpr -P Brother_QL-710W -o PageSize=38X1 /home/jon/Desktop/btest.txt

prints but

lpr -P Brother_QL-710W -o PageSize=17X54 /home/jon/Desktop/btest.txt

produces an error condition (flashing red power light). gLabels for example won’t allow me to set a paper size for the printer.

I wonder if the following P-Touch foomatic driver might work for this model?

http://www.diku.dk/~panic/P-touch/

It builds but seems a bit dated (2009) and only seems intended to support QL-500 and QL-550. I’ve left it at that for now.

Hmm. I’ve just looked further down the ppd - I’d forgotten about the paper dimension section… All “PageSize” options are given in 2 dimensions - the “Dia” ones are square.

“38x1” is:

*PaperDimension 38X1/38mm(1-1/2"):                        "107.76 283.44"

(approx 38x100mm)

I’m not sure now that the variable length labels would be possible with CUPS.

I have found it’s easy to add a new paper size though and that would probably do me, eg, if I wanted 38x50 labels from the 38mm roll on my printer “labeltest”:

# brpapertoollpr_ql710w -P labeltest  -n 38x50 -w 38 -h 50

to remove my new “38x50” size:

# brpapertoollpr_ql710w -P labeltest  -d 38x50

I think I’m just looking for an application I like now.

But I changed my mind and went back for yet another look at the Brother driver. It does have a custom page size section commented out. I’ve tried uncommenting it but that hasn’t worked and I’m not sure it can work.

I could be wrong but as far as I can work things out:

CUPS uses /usr/lib/cups/filter/brother_lpdwrapper_ql710w which is a shell script.

This goes on to call the binary /opt/brother/PTouch/ql710w/cupswrapper/brcupsconfpt1 with a few parameters - Cups options, ppd file, etc.

As far as I can make out, this program a) validates the CUPs options and b) makes various settings to the printer making a series of calls to brprintconfpt1_ql710w eg.

brprintconfpt1_ql710w   -P ql710w   -media  "38x50" -rcfile "/tmp/brql710wrc_22740"

If the media/page size is considered “invalid”, brcupsconfpt1 falls back to the CUPs default size.

Looking at a run using a label I defined on glabels, the shell script sets the cups options to, eg.

MirrorPrint=OFF Priority=SPEED Trimtape=OFF Brightness=0 Contrast=0 media=Custom.107.72x141.73 CutAtEnd=ON number-up=1 CutLabel=1 Halftone=ERROR Feed=3 BrCompress=OFF job-uuid=urn:uuid:31b3b5c6-e308-3b36-616c-0f4028cb8076 job-originating-host-name=localhost time-at-creation=1456836157 time-at-processing=1456836157 Copies=1

There seems to be 2 problems here.

a) as that media size doesn’t exist, brcupsconfpt1 uses the CUPS default

b) Even if brprintconfpt1_ql710w was willing to accept it, brprintconfpt1_ql710w only seems willing to set its media size a) to one of its built in sizes or b) a custom size added by brpapertoollpr_ql710w

I guess it would be intersting to see what happens if I could modify the shell script to set the cupsoption media to say “myMedia” and call brpapertoollpr_ql710w to add/change it’s media type “myMedia” to use the custom dimensions. I’m not sure brprintconfpt1_ql710w would be able to modify the ppd at that stage though. That and it would take me ages to work out how to get the shell script to persom the string manipulations.

I’ve tried that now. You need to install foomatic-db-engine and run foomatic-ppdfile to create the ppds. The QL-550 ppd was close enough to get me started (I’ve since changed the pagesizes, etc.).

Autocut does not work with that version but I found the source for a “ubuntu modified” 1.4 version at Ubuntu – Error

It fails with some complaint about a missing XML file - I just copied the missing one from the 1.3 download you gave to fix it.

This driver is supporting custom page sizes and seems to work well. The only thing I’ve had trouble with is continuous vs label type media. I’ll use 2 print queues with different defaults for this.

That’s good to know, and may be helpful to others who come searching.

Autocut does not work with that version but I found the source for a “ubuntu modified” 1.4 version at Ubuntu – Error

It fails with some complaint about a missing XML file - I just copied the missing one from the 1.3 download you gave to fix it.

This driver is supporting custom page sizes and seems to work well. The only thing I’ve had trouble with is continuous vs label type media. I’ll use 2 print queues with different defaults for this.

That’s a pragmatic solution to achieving support for both types of media. It’s disappointing Brother hasn’t made the effort with their driver for this model.

Yep. I think it’s a great little printer (and with the £82 promotional bundle of the printer plus 4 full size (not “starter”) rolls of paper offer we found, I think an attractive buy) but I am disappointed with their Linux “support”.

It’s probably worthwhile contributing here

http://www.linuxfoundation.org/collaborate/workgroups/openprinting/database/foomatic#Contributing_data_or_codehttp://www.linuxfoundation.org/collaborate/workgroups/openprinting/database/instructionsforcontributors

I’ve only got a cobbled up ppd file (PageSize, PageRegion, ImageableArea and PaperDimension sections in ppd for QL-550 replaced with those from Brothers ppd for QL-710w and the postscript the ptouch driver had added to suit, eg).

*PageSize 17x54/17mm x 54mm(2/3" x 2-1/8"):    "<</PageSize[48 153]/ImagingBBox null/MediaType (labels)>>setpagedevice"
*PageSize 17x87/17mm x 87mm(2/3" x 3-7/16"):    "<</PageSize[48 246]/ImagingBBox null/MediaType (labels)>>setpagedevice"

that I think should be right. Even if I knew it was right, I think to add it to the foomatic system, the information would have to be “translated” and split between several XML files.

I guess it would be nice if the main project was revived or forked or something. As things stand, it appears to me that a couple of distributions are going their own way with patches/modifications to the 2009 1.3 code (eg. the ubuntu 1.4 I used). And I’d guess the rastertoptch program has the potential to support the whole PT and QL range - at least mostly just needing the XML data for the other printers.

But I don’t understand how these projects work. Nor do I understand the rasterptch code nor as I learned from my only ever attempt at making something available open source the “personality” to consider getting involved…

I understand. It can be quite tedious/frustrating when you have something to share, but not sure how to contribute.

FWIW, I note there is an openprinting forum
http://forums.openprinting.org/index.php?18

A total drift perhaps but that is an approach I use for the other 2 printers at home. The Xerox laser usually either prints 300x300 mono or (less commonly) 600x600 colour and the Epson P50. “photo glossy” and (less commonly) “Lower res plain paper”.

I know these may only need a couple of options changing but I find it more convenient) and I feel in the case of my parents, far more understandable to eg. just know you want to print to say “LaserMono”.

I use a sort of extension of this with the scanner so (oddly written in php but I was using php a fair bit at the time…) so we have:

<?php

function setval($val, $min, $max, $default){
  if ($val == "")
    return $default;
  
  if ($val < $min)
    return $min;

  if ($val >$max)
    return $max;
  
  return $val;
  
}

$printer = "";
if ($argc >1)
  $printer = $argv[1];

if ($printer == "LaserColour")
  $brightness = 25;
else
  $brightness = 10;

if ($printer != "")
  $printer = "-d " . $argv[1];

$val = readline("Brightness (1-100) $brightness]: ");
$brightness = setval($val, 1, 100, $brightness);
$val = readline("Copies (1-100) [1]: "); 
$copies = setval($val, 1, 100, 1);

$command = "scanimage --brightness $brightness | lp $printer -o fitplot -n $copies";
exec($command);
?>

And a couple of desktop icons “Colour Copy” and “Mono Copy”.

May seem daft to others but it’s something that works in this household…