SDB:Printing via SMB (Samba) Share or Windows Share

Jump to: navigation, search


You want to print to a printer that is connected to an SMB host or a printer that can be addressed over the network via an SMB host.

This article is for CUPS up to version 2.x under Linux with the traditional filtering system and backends there.

The nowadays driverless printing workflow is rather different.

Background Information

An SMB host is a host that can be addressed by means of the SMB protocol. Normally, this is a Windows host. However, it can also be a Linux host running the "Samba" service. To address the printer by means of the SMB protocol, the SMB host must have a "share" for this printer.

The printer share is identified by unique "names" in the network:

  • Host name of the SMB host (always needed)
  • Name of the shares (always needed)
  • Name of the "workgroup" (not always needed)

Additionally, a user name and a password may be required to access the printer share.

These names, which are required by the SMB protocol, are managed by the NetBIOS name service, which must be clearly distinguished from the usual DNS name service in TCP/IP networks. Although the SMB protocol is based on the TCP/IP protocol, the SMB protocol uses NetBIOS instead of DNS as name service. The NetBIOS host name can be different from the DNS host name, but usually the NetBIOS host name and the DNS host name are identical. However, the DNS domain does not make any sense in the NetBIOS name space. Accordingly, the fully qualified DNS host name consisting of the DNS host name and DNS domain does not make any sense in the NetBIOS name space.

When a printer is addressed by a Linux host by means of the SMB protocol, this is merely for data transfer. The SMB host does not convert the print data from the applications (e.g., PostScript) to printer-specific data. Therefore, the filtering must take place on the Linux host, which requires a complete print system on the Linux host. A queue with filtering must be set up on the Linux host. After the data is filtered, the queue sends the printer-specific data to the SMB share. The SMB share receives the printer-specific data and forwards it to the printer associated with the share.


Required Packages

  • The package "samba-client" is needed for sending data (printer data) to an SMB share.
  • Additionally, a complete print system (CUPS plus printer drivers) is needed.

Determining the NetBIOS Names

The command "nmbstatus" lists the workgroups available in the network and the respective NetBIOS host names, for example:

user@host> nmbstatus
Found 123 hosts. Collecting additional information. Please wait.

Determining the Available Shares

The command "smbclient -L NetBIOS-hostname -N" lists available shares on the SMB host with the specified NetBIOS host names, for example:

 user@host> smbclient -L GEEKO -N
 Sharename      Type      Comment
 ---------      ----      -------
 LPT1           Printer

If necessary, add "-U username%password" to list shares that require a user name and a password for access:


Testing the Printer

The following command sends one carriage-return character "\r" to the printer via the SMB share. Nothing is printed, but the printer may eject an empty page.

echo -en "\r" | smbclient "//NetBIOS-hostname/share" -c "print -" -N

Insert the respective NetBIOS host name and the share. If necessary, a workgroup and a user name and password can be added to the smbclient command:

smbclient "//NetBIOS-hostname/share" "password" -c "print -" -N -U "username" -W "workgroup"

If the printer is able to print ASCII text directly (without any additional printer driver software), the echo command can be replaced with the command

echo -en "\rHello\r\f"

to print the word "Hello", see SDB:Installing a Printer.

The entire command sequence could appear as follows:

echo -en "\rHello\r\f" | smbclient "//NetBIOS-hostname/share" "password" -c "print -" -N -U "username" -W "workgroup"

Insert the correct NetBIOS host name and share. If necessary, insert the password, user name, and workgroup.

The Correct DeviceURI for CUPS

In CUPS, the DeviceURI in /etc/cups/printers.conf determines how the data should be sent to the printer (or to the SMB share). The DeviceURI must be as specified in "man smbspool":


"server" refers to the NetBIOS host name and "printer" refers to the share. The values for "server" and "printer" (and for "username", "password", and "workgroup", if necessary) must correspond to those used in the above command for the NetBIOS host name and share (and for the password, user name, and workgroup, if necessary).

Contemporary Version

See Swerdna's contemporary version: Printer Sharing: openSUSE 10 and 11 Samba Print Server for Linux & Windows Clients

Further Information