Introduction

This page covers only how to install a Netware Printer Queue in Ubuntu.

What is Needed

perl - Larry Wall's Practical Extraction and Report Language, needed for ncp script.

ipx - utilities to configure the kernel ipx interface.

ncpfs - a set of utilities to use resources from NetWare servers, in particular nprint to print to a netware printer queue.

Begin the work

Run Terminal (Applications-> Accessories -> Terminal)

Command> gksu nautilus

Create script file 'ncp' using gedit in /usr/lib/cups/backend directory.

Note that first line of this file should be following: #! /usr/bin/perl -w

NCP script

Create the script /usr/lib/cups/backend/ncp

  • #
    #! /usr/bin/perl -w
    #
    # NCP backend for CUPS
    #
    # Copyright (C) 2001 Sergey Vlasov <vsu@altlinux.ru>
    #
    #   This program is free software; you can redistribute it and/or modify it
    #   under the terms of the GNU General Public License as published by the Free
    #   Software Foundation; either version 2 of the License, or (at your option)
    #   any later version.
    #
    #   This program is distributed in the hope that it will be useful, but
    #   WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    #   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    #   for more details.
    #
    #   You should have received a copy of the GNU General Public License
    #   along with this program; if not, write to the Free Software
    #   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
    #
    
    use strict;
    
    ########################################################################
    # Configurable parameters
    ########################################################################
    
    # nprint program name (you may want to put the full pathname here)
    my $NPRINT = "nprint";
    
    # Home directory (the .nwclient file will be searched there)
    my $NCP_HOME = "/root";
    
    ########################################################################
    # End of configurable parameters
    ########################################################################
    
    
    
    # No arguments means show available devices
    if (scalar(@ARGV) == 0) {
        print "network ncp \"Unknown\" \"NetWare Printer via NCP\"\n";
        exit 0;
    }
    
    # Check number of arguments
    if (scalar(@ARGV) < 5 || scalar(@ARGV) > 6) {
        print STDERR "ERROR: ncp job user title copies options [filename]\n";
        exit 1;
    }
    
    my ($job, $user, $title, $copies, $options, $file) = @ARGV;
    my $printer = $ENV{"DEVICE_URI"};
    
    # These variables will hold the URI parts
    my ($server, $queue, $nwuser, $nwpass);
    
    # Parse the printer URI into parts
    for ($printer) {
    
        # ncp://USERNAME:PASSWORD@SERVER/QUEUE
        m|^ncp://(.+):(.*)@(.+)/(.+)| && do {
            $nwuser = $1;
            $nwpass = $2;
            $server = $3;
            $queue = $4;
            last;
        };
    
        # ncp://USERNAME@SERVER/QUEUE
        m|^ncp://(.+)@(.+)/(.+)| && do {
            $nwuser = $1;
            $server = $2;
            $queue = $3;
            last;
        };
    
        # ncp://SERVER/QUEUE
        m|^ncp://(.+)/(.+)| && do {
            $server = $1;
            $queue = $2;
            last;
        };
    }
    
    # Check if the URI was parsed correctly
    if (not defined $server or not defined $queue) {
        print STDERR "ERROR: malformed printer URI\n";
        exit 1;
    }
    
    # Unquote the URI parts (must be done after splitting)
    $nwuser =~ s/%([a-fA-F0-9]{2})/chr(hex($1))/ge if defined $nwuser;
    $nwpass =~ s/%([a-fA-F0-9]{2})/chr(hex($1))/ge if defined $nwpass;
    $server =~ s/%([a-fA-F0-9]{2})/chr(hex($1))/ge if defined $server;
    $queue  =~ s/%([a-fA-F0-9]{2})/chr(hex($1))/ge if defined $queue;
    
    # Fixed part of the nprint command
    my @command = ($NPRINT, "-S", $server, "-q", $queue, "-N");
    
    # Add "-U USERNAME" if specified
    if (defined $nwuser) {
        push @command, "-U";
        push @command, $nwuser;
    }
    
    # Add "-P PASSWORD" if specified
    if (defined $nwpass) {
        push @command, "-P";
        push @command, $nwpass;
    }
    
    # Append the print file name or "-" to read from stdin
    if (defined $file) {
        if ($file =~ /^-/) {
            # Avoid file names which look like switches
            $file = "./$file";
        }
        push @command, $file;
    } else {
        push @command, "-";
    }
    
    # nprint will read $HOME/.nwclient, so need to set it
    $ENV{"HOME"} = $NCP_HOME;
    
    # all is ready, run nprint (directly, without using shell)
    my $result = system { $command[0] } @command;
    
    # if not ok, print the error message in the format required by CUPS
    if ($result != 0) {
        print STDERR "ERROR: nprint exited with status $result\n";
        exit 1;
    }
    
    # normal exit
    exit 0;

* Don't forget to make the script executable:

  • sudo chmod +x /usr/lib/cups/backend/ncp

Restart CUPS

  • After changing this file, restart CUPS by running ...
    • sudo /etc/init.d/cups restart

* Create a file ".nwclient" in $NCP_HOME directory (generally /root) with following line:

NETWARE_SERVERNAME/NETWARE_USERNAME PASSWORD

Add a Netware Printer with Gnome menu System

1. Add a printer definition, using Printing (Gnome menu System -> Administration -> Printing).

Select Other printer type.

In the URl: type

  • ncp://NETWARE_SERVERNAME/PRINTER_Q

If at this point you don't see 'Netware Printer via ncp' then refer to 'NCP Script' above.

Select the relevant printer etc. and you should have a working Netware Printer.

Add a Netware Printer with Cups Web Interface

This needs an Administrator account.

Please refer to NetworkPrintingWithUbuntu -> Ubuntu Client Machine for more info.

  • # /etc/cups/cupsd.conf
    # Simple CUPS configuration file for a pure client machine:
    # which has:
    # - printers of its own, (and any local printers will be shared?)
    # - no need for security within the machine, ie a personal workstation
    # - a network connection to a local network, where it will find CUPS-controlled printer servers
    
    # Log general information in error_log - change "info" to "debug" for
    # troubleshooting...
    LogLevel warning
    
    # Administrator user group...
    SystemGroup lpadmin
    
    # Only listen for connections from the local machine.
    # These settings are configured in /etc/cups/cups.d/ports.conf so that
    # changing them does not require to change this file.
    # Listen localhost:631
    # Listen /var/run/cups/cups.sock
    
    # This setup also allows access to the "Administrative tasks" system at
    # http://localhost:631
    # File based on Ubuntu 5.10 (Breezy Badger) (Linux version 2.6.12-10-386)
    # Server Directives are explained in http://localhost:631/sam.html
        
    # 25/04/2006
    # DavidTangye@netscape.net
        
    ConfigFilePerm 0600
    LogLevel info
    Printcap /var/run/cups/printcap
    RunAsUser Yes
    ### Listen fails. Use Port
    #Listen 127.0.0.1:631
    #Listen 10.0.0.0/8:631
    #Listen 128.0.0.0/16:631
    #Listen 192.168.0.0/24:631
    Port 631
        
    # Show shared printers on the local network.
    # The 'Browsing' setting is configured in /etc/cups/cups.d/browse.conf
    # so that changing it does not require to change this file.
    # Browsing Off
    BrowseOrder allow,deny
    BrowseAllow @LOCAL
    BrowseAddress @LOCAL
         
    # Restrict access to the server...
    # <Location />
    #  Order allow,deny
    #  Allow localhost
    #  Allow @LOCAL
    #</Location>
    <Location />
    AuthType None
    Order Deny,Allow
    Deny From All
    Allow From @LOCAL
    </Location>
         
    <Location /jobs>
    AuthType None
    Order Deny,Allow
    Deny From All
    Allow From @LOCAL
    </Location>
         
    <Location /printers>
    AuthType None
    Order Deny,Allow
    Deny From All
    Allow From @LOCAL
    </Location>
         
    # Restrict access to the admin pages...
    #<Location /admin>
    #  Order allow,deny
    #  Allow localhost
    # </Location>
    <Location /admin>
    AuthType None
    Order Deny,Allow
    Deny From All
    Allow From @LOCAL
    </Location>
    
    # Default authentication type, when authentication is required...
    DefaultAuthType Basic
    
    # Restrict access to configuration files...
    <Location /admin/conf>
      AuthType Basic
      Require user @SYSTEM
      Order allow,deny
      Allow localhost
    </Location>
    
    # Set the default printer/job policies...
    <Policy default>
      # Job-related operations must be done by the owner or an adminstrator...
      <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job>
        Require user @OWNER @SYSTEM
        Order deny,allow
      </Limit>
    
      # All administration operations require an adminstrator to authenticate...
      <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>
        AuthType Basic
        Require user @SYSTEM
        Order deny,allow
      </Limit>
    
      # Only the owner or an administrator can cancel or authenticate a job...
      <Limit Cancel-Job CUPS-Authenticate-Job>
        Require user @OWNER @SYSTEM
        Order deny,allow
      </Limit>
    
      <Limit All>
        Order deny,allow
      </Limit>
    </Policy>
    
    # Include files in /etc/cups/conf.d
    Include /etc/cups/cups.d/ports.conf
    Include /etc/cups/cups.d/browse.conf

To access the Cups Web Interface goto http://localhost:631/


AccessingNetwareShares CategoryNetworking

NetwarePrintingFromUbuntu (last edited 2009-12-30 07:57:51 by rjkothari)