2005-07-01
修订历史 | ||
---|---|---|
修订 1.6 | 2005-07-01 | 修订者: iw |
澄清了 hpijs 要求,添加了 lpinfo 和 lpoptions 命令 | ||
修订 1.5 | 2005-06-19 | 修订者: iw |
添加了关于成为 root 用户以执行命令的说明 | ||
修订 1.4 | 2004-01-05 | 修订者: iw |
措辞修正 | ||
修订 1.3 | 2003-11-18 | 修订者: iw |
移除了不正确的 lpadmin -h 用法 | ||
修订 1.2 | 2003-10-03 | 修订者: iw |
关于 woody 和 gs-esp 的说明,与 bash 的 enable 命令冲突以及 XP/2000 客户端的修复 | ||
修订 1.1 | 2003-06-26 | 修订者: iw |
在 Windows 共享打印机上添加了密码,修正 | ||
修订 1.0 | 2003-05-15 | 修订者: tmm |
初始发布,由 LDP 审阅 | ||
修订 0.8 | 2003-04-11 | 修订者: iw |
从 LaTeX 转换 |
Debian GNU/Linux (http://www.debian.org) 是首屈一指的志愿者支持的 Linux 发行版。不幸的是,在 Debian 中设置打印机可能很困难。此外,使用最新工具在 Windows 和 Linux 之间共享打印机的简单分步说明也很难找到。编写本 HOWTO 就是为了解决这两个问题。
本 HOWTO 将演示如何使用命令行工具配置您的 Debian 系统以进行打印。它将解释如何将文档从 Linux 发送到 Windows 打印机,以及如何与 Windows PC 共享 Linux 打印机。还提供了一些故障排除示例。
本文档的主要 URL 是 http://excess.org/docs/linux_windows_printing.html。本文档的源 Docbook/XML 和 EPS 文件可以从 http://excess.org/docs/src/ 下载。请将关于本文档的错误报告、更正和建议转发至 ian at excess dot org。
我们将使用的主要组件包括
CUPS
通用 UNIX 打印系统 (http://www.cups.org) 是一个打印后台处理程序以及一组用于使用和管理打印机的支持程序。
Samba
Samba (http://www.samba.org) 是一款允许非 Windows 计算机通过实现 Windows 文件和打印机共享协议,在网络上充当 Windows 计算机的软件。
打印机驱动程序
LinuxPrinting.org (http://www.linuxprinting.org) 提供了数量最多的打印机驱动程序,并维护着一个 Linux 支持的打印机数据库。您必须为要在 Linux 中使用的每种打印机型号下载一个打印机驱动程序。打印机驱动程序由 PPD 文件和一个过滤器程序组成,或者对于 PostScript 打印机,仅包含一个 PPD 文件。
所有必需的程序和库都是标准 Debian 存档的一部分。您可以使用常用的 Debian 打包工具下载并安装这些软件包。以下是您需要的软件包列表
CUPS 服务器
CUPS BSD 命令
CUPS 客户端程序
LinuxPrinting.org 打印机支持程序
用于 UNIX 的 Samba SMB/CIFS 服务器
用于 UNIX 的 Samba SMB/CIFS 客户端
ESP Ghostscript ( http://www.cups.org/ghostscript.php)
在 Debian GNU/Linux 3.0 (又名 woody) 软件包中不可用,请改用 "gs"。
GNU A2PS ( https://gnu.ac.cn/software/a2ps/)
以下命令将安装这些软件包。您将必须成为 root 用户或使用 sudo 来执行这些命令
apt-get update apt-get install cupsys cupsys-bsd cupsys-client foomatic-bin samba smbclient gs-esp a2ps |
特定的打印机可能需要额外的软件包。例如,对于许多 HP InkJet、DeskJet 和 LaserJet 打印机,必须安装 hpijs 软件包才能正常工作。这些打印机的 PPD 文件通过字符串hpijs在其文件名中标识。
lpadmin 命令用于配置打印机。以下是使用 CUPS 设置激光打印机的示例。您将必须成为 root 用户或使用 sudo 来执行这些命令
/usr/sbin/lpadmin -p Laser -v parallel:/dev/lp0 -P /root/laser.ppd /usr/bin/enable Laser /usr/sbin/accept Laser /usr/sbin/lpadmin -d Laser |
请注意,bash 有一个名为 enable 的内置命令,因此 bash 用户必须使用完整路径 (/usr/bin/enable) 才能启用打印机。
第一个命令创建一个名为 "Laser" 的新打印机,该打印机连接到第一个并行端口,并使用 PPD 文件/root/laser.ppd。"Laser" 随后被启用,并被告知使用 enable 和 accept 命令接受作业。最后一个命令将 "Laser" 设置为默认打印机。
如果您的打印机连接到 USB 端口,或者您不知道打印机的正确 device-uri,请尝试运行 /usr/sbin/lpinfo -v 以获取可用打印机设备的列表。
通过运行 /usr/bin/lpoptions -l,确保您的打印机的页面大小和其他选项设置正确。有关打印机配置的更详细信息,请参阅 CUPS 文档。
文档通过使用 lpr 或 lp 后跟文件名进行假脱机。您可以使用命令 lpstat -o 或 lpstat -p 查看打印队列并检查打印机状态。要取消打印作业,请使用 cancel 或 lprm 后跟作业 ID。
CUPS 假脱机守护程序称为 cupsd。它将文档转换为 PostScript,然后将其转换为打印机 图 1 的本机格式。不理解 PostScript 的打印机对文档使用栅格化或位图格式。栅格化格式可能比原始 PostScript 大得多,并且需要更长的时间才能发送到打印机。
过滤器是用于将文档从一种格式转换为另一种格式的程序。CUPS 假脱机程序将尽最大努力为发送的文档找到合适的过滤器。如果未安装适合转换文档的过滤器,您将收到类似于以下的错误lpr: 无法打印文件: client-error-document-format-not-supported.
许多应用程序不包含其文档格式的过滤器。使用这些应用程序创建的文档只能从应用程序本身内部打印,除非将文档导出为 PostScript 或另一种标准格式。
SMB 和 CIFS 是 Windows 文件和打印机共享协议。我们使用 Samba 通过这些协议与 Windows PC 通信。在配置 CUPS 之前,我们应该确保可以使用 smbclient(Samba SMB/CIFS 客户端 图 2)连接到 Windows PC。
以下是创建与 Windows PC 连接的示例
/usr/bin/smbclient -L rice -U fred added interface ip=10.6.7.234 bcast=10.6.7.255 nmask=255.255.255.0 Got a positive name query response from 10.6.7.8 ( 10.6.7.8 ) Password: (not shown) Sharename Type Comment PRINTER$ Disk INKJET Printer STUFF Disk IPC$ IPC Remote Inter Process Communication |
显示的命令请求列出名为 "rice" 的 Windows PC 上的共享,用户 ID 为 "fred"。结果显示一个名为 "INKJET" 的打印机。
如果 Windows 命名服务不可用,您将需要使用-I开关指定 Windows PC 的 IP 地址,如
/usr/bin/smbclient -I 10.6.7.8 -L rice -N |
有关更多信息,请参阅关于 smbclient 用法的 Samba 文档。
找到 Windows 打印机后,您可以配置 CUPS。首先使用以下命令验证您的 CUPS 安装是否具有 smb 后端
ls -l /usr/lib/cups/backend/smb |
如果此文件不存在,请通过发出以下命令创建它
ln -s `which smbspool` /usr/lib/cups/backend/smb |
以下是设置上面显示的打印机的示例。您将必须成为 root 用户或使用 sudo 来执行这些命令
/usr/sbin/lpadmin -p RicePrinter -v smb://fred:mypass@rice/INKJET -P /root/inkjet.ppd /usr/bin/enable RicePrinter /usr/sbin/accept RicePrinter /usr/sbin/lpadmin -d RicePrinter |
如上所述,bash 有一个名为 enable 的内置命令,因此 bash 用户必须使用完整路径 (/usr/bin/enable) 才能启用打印机。
"lpadmin" 命令通过将用户名、密码、netbios 名称和打印机名称作为单个参数来设置共享的 Windows 打印机。有关上述命令的进一步说明,请参阅 第 2.3 节。
您的打印机现在可以进行测试了。使用 lp 命令后跟文件名,或通过从应用程序内部打印文档,将文件发送到打印机。
Samba 使用 nmbd 和 smbd 守护程序与 Windows PC 共享文件和打印机。nmbd 充当 Windows 命名服务,将您的计算机名称广播到 LAN 上的 Windows PC。smbd 接受来自 Windows PC 的文件和打印机请求 图 3。
您将需要为您共享的每个 Linux 打印机下载并安装 Windows 打印机驱动程序。Windows 打印机驱动程序可以通过搜索打印机制造商的网站找到。
如果您允许匿名访问您的打印机,您将需要为远程打印作业创建一个用户帐户
/usr/sbin/adduser --system --disabled-password smbprint |
此命令向您的系统添加一个名为 "smbprint" 的用户。确保/home/smbprint,"smbprint" 用户的主目录中有足够的磁盘空间来假脱机文件。检查 "smbprint" 用户是否没有权限在您的系统上读取或修改敏感文件和目录。如果您已配置 CUPS 以限制系统上某些用户进行打印,则必须允许 "smbprint" 用户访问您要共享的打印机。
Samba 配置文件是/etc/samba/smb.conf。以下是设置为使用 CUPS 和 "smbprint" 用户的示例配置文件
[global] printcap name = cups printing = cups security = share [printers] browseable = yes printable = yes public = yes create mode = 0700 guest only = yes use client driver = yes guest account = smbprint path = /home/smbprint |
请注意,此配置将允许任何可以建立网络连接到您的计算机的人进行打印,并且不建议用于不受信任网络上的计算机,例如直接连接到 Internet 的计算机。如果您需要实施访问控制,请设置 security = user 或 security = domain 并阅读 Samba man 页面以获取更多信息。
将上述设置添加到 Samba 配置文件后,您必须使用以下命令重新启动 Samba
/etc/init.d/samba restart |
Windows 打印机驱动程序在通过网络发送输出之前,会为打印机格式化输出。您必须配置 CUPS 以接受预格式化的输出,方法是取消注释/etc/cups/mime.convs:
application/octet-stream application/vnd.cups-raw 0 - |
中的以下行。还要取消注释/etc/cups/mime.types:
application/octet-stream |
中的以下行。现在必须告诉 CUPS 允许来自网络上其他机器的连接。将以下行添加到/etc/cups/cupsd.conf:
<Location /printers> AuthType None Order Deny,Allow Deny From None Allow From All </Location> |
最后,使用以下命令重新启动 cups
/etc/init.d/cupsys restart |
您的 Linux 打印机现在应该已共享给 LAN 上的 Windows PC。按照通常的步骤将网络打印机添加到 Windows PC,并记住打印测试页。
当 smbspool(CUPS 使用的 smbclient 实用程序)无法正确连接时,它会发出幽默但不太有用的错误消息。其中一条消息是无法连接到 SAMBA 主机: Success.连接失败的另一个迹象是,当打印到 Windows 打印机时,文档似乎卡在队列中。
使用以下命令查看 CUPS 日志中的最新条目
/usr/bin/tail /var/log/cups/error_log |
如果您看到类似于cli_connect() failed...的消息,则 smbspool 无法找到您尝试连接的 Windows PC。检查 Windows PC 主机名的拼写。检查 Windows PC 是否已打开且其网络连接是否正常工作。确保您可以按照 第 3.1 节 中所示,使用 smbclient 连接到它。
如果您看到类似于SMB tree connect failed: ERRSRV - ERRinvnetname然后 smbclient 已连接到 Windows PC,但无法连接到您请求的打印机。使用 第 3.1 节 中所示的 smbclient 检查共享打印机的拼写。
其他故障包括无法打印到本地打印机以及打印作业从队列中消失而未打印。您可能还会看到模糊的错误消息,例如Child process 2384 exited with status 32.
将 CUPS 的日志记录级别提高到 "debug" 以查看有关打印作业失败之前发生的更多消息。
在文本编辑器中打开主 CUPS 配置文件/etc/cups/cupsd.conf。
将读取 "LogLevel warn" 的行更改为 "LogLevel debug"。
保存配置文件并退出文本编辑器。
使用命令重新启动 CUPS 服务器
/etc/init.d/cupsys restart |
您可以使用以下命令跟踪 CUPS 日志
/usr/bin/tail -f /var/log/cups/error_log |
您应该看到一行显示Scheduler shutting down due to SIGTERM。这表示 CUPS 服务器已成功停止。
再次发送您的打印作业,并注意出现的有用的调试消息。一个有用的调试消息示例是GNU Ghostscript 7.05: Can't start ijs server 'hpijs'.在这种情况下,解决方案是安装 "hpijs" 软件包。
如果您无法确定故障原因,请在 Internet 上搜索您看到的错误消息中的关键词;很可能有人以前已经解决了您的问题。您也可以尝试将 第 2.2 节 中列出的软件包升级到最新版本。
版权所有 © 2003 Ian Ward。
本手册是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新发布和/或修改它;无论是版本 2,还是(由您选择)任何更高版本。
发布本手册是希望它有用,但不作任何担保;甚至没有对适销性或特定用途适用性的暗示保证。有关更多详细信息,请参阅 GNU 通用公共许可证。
GNU 通用公共许可证的副本在 Debian GNU/Linux 发行版中以 /usr/share/common-licenses/GPL 提供,或在万维网上以 https://gnu.ac.cn/copyleft/gpl.html 提供。您也可以写信给 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA 来获取它。