Setting up a Linux Printer Old

GT.M pipe for print DEVICE (older way):
With the introduction of the pipe device to GT.M (version V5.3-003) this simple, secure, and elegant method can be used:


 * To begin, Update the Devices file. To create a new DEVICE, enter an unused NAME of your choice.

NAME: HP-PHOTOSMART $I: PRE-OPEN EXECUTE: X "o ""p"":(command=""lpr"")::""pipe"" s IO=""p""" POST-CLOSE EXECUTE: X "c ""p""" SUBTYPE: P-OTHER80 TYPE: OTHER Note: We use TYPE:OTHER rather than Host File Server. No host file needed; output will be "piped" to the default CUPS printer. Also the fancy stuff is in the PRE-OPEN EXECUTE. For example, one can write:

PRE-OPEN EXECUTE: X "o ""p"":(command=""lpr -P Photosmart_@192.168.5.103 -o cpi=12 -o lpi=8 -o page-left=72"")::""pipe"" s IO=""p"""

In human (ok in geekspeak), this last PRE-OPEN EXECUTE says, "Open a pipe device named "p" with the command to print to the CUPS printer named "Photosmart_@192.168.5.103". Set it to give us 12 characters/inch, 8 lines/inch and a 1 inch left margin). And then set IO to that device." FileMan will then send his output to that IO device, the just-defined pipe. Finally, the POST-CLOSE EXECUTE simply closes the pipe. And it's gone. No Linux /tmp/print.txt file to clean up. No fuss, no muss.

Another option is to define the device with option raw: PRE-OPEN EXECUTE: X "o ""p"":(command=""lpr -P 1100A -o raw"")::""pipe"" s IO=""p""" And then the SUBTYPE can manage the details of formating... Portrait vs Landscape and fonts, etc.

pipe to identify CUPS printers
--JL.Z Aug 2009

VistA output to a temporary Linux file (Calling ^TMGPRNTR) (older)
Below is an older way of setting up a Linux printer. Here is the DEVICE file entry: NAME: S121-LAUGHLIN-LASER $I:  LOCATION OF TERMINAL: Laughlin_Office SUPPRESS FORM FEED AT CLOSE: YES PAGE LENGTH: 70 PRE-OPEN EXECUTE: SET IO=$$GETJOBNM^TMGPRNTR POST-CLOSE EXECUTE: DO FINISH^TMGPRNTR("laughlin_laser") SUBTYPE: P-OTHER80 TYPE: HOST FILE SERVER

Here are the supporting calls to routine ^TMGPRNTR that create a file for writing, and then send the output file to the Linux lpr system

GETJOBNM ;"Purpose: To create a unique printer job name.         ;"        This will be used during a printing process ;"       that writes the printer file to the host file system,         ;"        then passes file to Linux ;"       printing system.        ;"Output: Returns name of file to put output into ;"UNIQUE will generate a filename based on time and job number       ;"    i.e. 'Print-Job-628233034.tmp ;"write !,"here in GETJOBNM^TMGPRNTR",!       new cJobs set cJobs="PRINT JOBS"        new Filename set Filename=$$UNIQUE^%ZISUTL("/tmp/Print-Job.tmp")        ;"Now store Filename for later transfer to Linux lpr new index set index=$order(^TMP("TMG",cJobs,$J,"")) if index="" set index=1 set ^TMP("TMG",cJobs,$J,index)=Filename ;"write !,"Print job name will be:",Filename,!       quit Filename   ;"result returned by altering Filename

FINISH(Printer) ;"Purpose: to complete the printing process by sending the now-created file       ;"        to Linux CUPS (the printing system). ;"Note: The lpr system itself will delete this print file when        ;"      done (option -r) ;"Input: Printer OPTIONAL -- the name of the linux printer to send the job to.       new cJobs set cJobs="PRINT JOBS"        new index set index=$order(^TMP("TMG",cJobs,$J,""))        new Filename set Filename=$get(^TMP("TMG",cJobs,$J,index))        close IO        kill IO(1,IO)        kill ^TMP("TMG",cJobs,$J,index)        if Filename'="" do        . new CmdStr        . set CmdStr="lpr "        . if $get(Printer)'="" set CmdStr=CmdStr_"-P "_Printer        . ;"option -r --> lpr deletes file after printing done. . set CmdStr=CmdStr_" -r "_Filename_" &" . ;"write !,"Here is where I call:",!,"ZSYSTEM "_CmdStr,!       . zsystem CmdStr        . ;"write "Back from zsystem.  Returning to Fileman.",! quit

--Kdtop 10:34, 18 Sep 2005)

Linux /tmp/file (With ZSYSTEM call) (older)
On a Linux system with CUPS.

NAME: PRINTSERVER $I: /tmp/vistaprint.txt LOCATION OF TERMINAL: lpr OPEN COUNT: 1 POST-CLOSE EXECUTE: X "ZSYSTEM ""lpr -r /tmp/vistaprint.txt""" SUBTYPE: P-OTHER80 TYPE: HOST FILE SERVER

And for an elaboration of this method

NAME: HP-PHOTOSMART $I:  PRE-OPEN EXECUTE: S IO="/tmp/"_$J_"print.txt" POST-CLOSE EXECUTE: X "ZSYSTEM ""lpr -P Photosmart_@192.168.5.103 -r /tmp/""_$J_""print.txt""" SUBTYPE: P-OTHER80 TYPE: HOST FILE SERVER

Note: This DEVICE does not require the calls to ^TMGPRNTR. And, by exposing the lpr call in the POST-CLOSE EXECUTE, it allows more flexibility. For example, this relatively simple change will direct output to the default CUPS printer with 12 characters/inch, 8 lines/inch and a 1 inch left margin. :

POST-CLOSE EXECUTE: X "ZSYSTEM ""lpr -o cpi=12 -o lpi=8 -o page-left=72 -r /tmp/""_$J_""print.txt"""