Sunday, November 1, 2015

Dymo LabelWriter Duo Ubuntu Tape Setup


The Dymo LabelWriter Duo is two printers in one, the upper part prints paper labels and the lower part prints adhesive tape. Setting up Ubuntu to print to the upper label printer is easy, the tape section is more involved, so after I figured it out I thought it's worth writing down here so that you won't have to go through the same try-and-error process!

First, install the Dymo drivers on your Ubuntu system if you haven't done so yet:

sudo apt-get install printer-driver-dymo

(Alternatively, you can download the SDK from http://var.dymo.com/US/resources/sdk/linux/ and install the Ubuntu packages libcups2-dev and libcupsimage2-dev, and then run ./configure; make; sudo make install.)

Once the drivers are installed and the Dymo LabelWriter Duo has been powered up and plugged into the Ubuntu PC's USB port, the "Printers" dialog on Ubuntu (search for "printers" after pressing that galaxy-like Ubuntu icon in the upper left corner of the Unity desktop) should show this new printer:


Double-click on that new icon and you'll see the following dialog:


Now, since this is the configuration for the upper label printer and not the lower tape printer, we need to change both the "Device URI" and the "Make and Model" to talk to the lower tape printer instead.

First, click the "Change" button next to the "Make and Model" setting:


You should get a progress indicator saying that Ubuntu is searching for drivers and after a short while a list of manufacturers is shown at the bottom. If that list doesn't come up for some reason, I've found that it helps randomly clicking some of the radio buttons at the top, and returning to the "Select printer from database" setting, and the list will come up. Select "DYMO (recommended)" and click the "Forward" button at the bottom to proceed to the next screen:


You'll find "LabelWriter Duo Label" preselected, but we want "Labelwriter DUO Tape 128" instead. Click "Forward" to confirm. In the next dialog, the second radio button will be selected, but pick the first one that says "Use the new PPD ..." and click "Apply" at the bottom:


You should now be back at the main configuration screen for the LabelWriter Duo printer:



Next, click the "Change" button next to the Device URI:


The selection should be on the first item, change it to the second that says "Tape" (not "Label"). Note that the URI adds a interface=1 at the end, this is how the LabelWriter knows that you want to address the tape function, not the label function. Next, click "Apply" at the bottom and "OK" to get back to the main screen.

Click "OK" to confirm all your changes so far. The newly configured tape printer will still show as "LabelWriter Duo Label", so simply right-click on the icon and rename it:


That's it! If you want another printer (and you most certainly will) for the label part, simply unplug the printer and plug it back in. Ubuntu will then create a second icon for the label part, which you can select in your printing process if you want labels.

You can now print to the tape section of the LabelWriter Duo with the usual lpr command. Select the page size according to the tape you're using, mine is 6mm wide, so I used this:

lpr -P LabelWriter-DUO-Tape -o PageSize=6_mm__1___Label__Auto_ document.pdf

The document in document.pdf is a landscape PDF document which is 144x54 points in size, to format it you can use the following Perl script which uses the PDF::Create CPAN module. 

Enjoy!

#!/usr/local/bin/perl -w
###########################################
# dymo-tape
# Mike Schilli, 2015 (m@perlmeister.com)
###########################################
use strict;
use PDF::Create;
use Encode qw( _utf8_on );

my( $string ) = @ARGV;

die "usage: $0 string" if !defined $string;
_utf8_on( $string );

my $pdf = PDF::Create->new(
  filename => 'label.pdf' );

my $width     = 144;
my $height    = 54;
my $font_size = 20 / length( $string ) * 11;
my $adjust    = $font_size/7;

my $page = $pdf->new_page(
 'MediaBox' => [ 0, 0, $width, $height ], Rotate => 90 );

my $f1 = $pdf->font(
  Subtype  => 'Type1',
  Encoding => 'WinAnsiEncoding',
  BaseFont => 'Helvetica'
);

$page->stringc( $f1,
  $font_size,
  $width/2,
  ($height - $font_size)/2 + $adjust,
  $string );

$pdf->close;

system "lpr -P LabelWriter-DUO-Tape -o PageSize=6_mm__1___Label__Auto_ label.pdf";