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