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

跳转到:导航搜索

情况

您想打印到连接到SMB主机的打印机,或者可以通过SMB主机通过网络寻址的打印机。

本文适用于 Linux 下 CUPS 版本高达 2.x,以及那里的传统过滤系统和后端。

如今的无驱动程序打印工作流程则大不相同。

背景信息

SMB主机是指可以通过SMB协议寻址的主机。通常,这是一个Windows主机。但是,它也可以是运行“Samba”服务的Linux主机。为了通过SMB协议寻址打印机,SMB主机必须为此打印机提供“共享”。

打印机共享在网络中由唯一的“名称”标识

  • SMB主机的hostname(始终需要)
  • 共享的名称(始终需要)
  • “工作组”的名称(并非始终需要)


此外,访问打印机共享可能需要用户名和密码。

这些由SMB协议要求的名称由NetBIOS名称服务管理,必须与TCP/IP网络中的常用DNS名称服务明确区分。虽然SMB协议基于TCP/IP协议,但SMB协议使用NetBIOS而不是DNS作为名称服务。NetBIOS主机名可能与DNS主机名不同,但通常NetBIOS主机名和DNS主机名是相同的。但是,DNS域名在NetBIOS名称空间中没有任何意义。因此,由DNS主机名和DNS域名组成的完整DNS主机名在NetBIOS名称空间中没有任何意义。

当Linux主机通过SMB协议寻址打印机时,这仅仅是为了数据传输。SMB主机不会将应用程序(例如,PostScript)中的打印数据转换为特定于打印机的数据。因此,过滤必须在Linux主机上进行,这需要Linux主机上有一个完整的打印系统。必须在Linux主机上设置一个带有过滤的队列。在数据过滤后,队列将特定于打印机的数据发送到SMB共享。SMB共享接收特定于打印机的数据并将其转发到与共享关联的打印机。

流程

所需软件包

  • 需要“samba-client”软件包才能将数据(打印机数据)发送到SMB共享。
  • 此外,还需要一个完整的打印系统(CUPS加上打印机驱动程序)。

确定NetBIOS名称

“nmbstatus”命令列出网络中可用的工作组和各自的NetBIOS主机名,例如

user@host> nmbstatus
Found 123 hosts. Collecting additional information. Please wait.
...
WORKGROUP    TUX-NET
MEMBERS      GEEKO     TUX
...

确定可用共享

“smbclient -L NetBIOS-hostname -N”命令列出具有指定NetBIOS主机名的SMB主机上可用的共享,例如

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

如果需要,添加“-U username%password”以列出需要用户名和密码才能访问的共享

smbclient -L GEEKO -U USER%PASSWORD -N

测试打印机

以下命令通过SMB共享将一个回车符“\r”发送到打印机。不会打印任何内容,但打印机可能会弹出空白页。

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

插入相应的NetBIOS主机名和共享。如果需要,可以将工作组以及用户名和密码添加到smbclient命令中

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

如果打印机能够直接打印ASCII文本(无需任何额外的打印机驱动程序软件),则可以将echo命令替换为命令

echo -en "\rHello\r\f"

打印单词“Hello”,请参阅SDB:Installing a Printer

整个命令序列可能如下所示

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

插入正确的NetBIOS主机名和共享。如果需要,插入密码、用户名和工作组。

CUPS的正确DeviceURI

在CUPS中,/etc/cups/printers.conf中的DeviceURI确定应如何将数据发送到打印机(或SMB共享)。DeviceURI必须如“man smbspool”中所指定的那样

smb://server/printer
smb://workgroup/server/printer
smb://username:password@server/printer
smb://username:password@workgroup/server/printer

“server”指的是NetBIOS主机名,“printer”指的是共享。对于“server”和“printer”(以及“username”、“password”和“workgroup”,如果需要),必须与用于NetBIOS主机名和共享(以及密码、用户名和工作组,如果需要)的上述命令中的值相对应。

当代版本

请参阅Swerdna的当代版本:Printer Sharing: openSUSE 10 and 11 Samba Print Server for Linux & Windows Clients

更多信息

Portal:Printing