我从 Canon 下载了 Linux CAPT 驱动程序 V2.60,并安装了两个 .deb 包,它们列在 Ubuntu 软件中心的 64 位文件夹下。我的 Canon 打印机仍然无法被识别。我还需要做什么吗?我的打印机是通过 USB 连接的。
Ubuntu 可以很好地替代我的办公室,但不幸的是,没有打印机支持,我仍然需要依赖 Windows。
答案1
Canon CAPT 打印机驱动程序是闭源的,并且 Canon 提供的二进制库是针对 i386 编译的。因此,如果您使用的是 amd64,则需要先启用多架构并安装一些库:
# amd64 only
dpkg --add-architecture i386
apt-get update
apt-get install libstdc++6:i386 libxml2:i386 zlib1g:i386 libpopt0:i386
如果还没有杯子,请安装:
apt-get install cups
下载并解压 Canon CAPT 打印机驱动程序:
wget http://gdlp01.c-wss.com/gds/6/0100004596
tar -zxvf Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz/03/Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz
根据您的体系结构安装 32 位或 64 位驱动程序:
32 位
dpkg -i Linux_CAPT_PrinterDriver_V260_uk_EN/32-bit_Driver/Debian/*.deb
64 位
dpkg -i Linux_CAPT_PrinterDriver_V260_uk_EN/64-bit_Driver/Debian/*.deb
现在查找/usr/share/cups/model
描述打印机的 ppd 文件并选择与您的打印机匹配(或最接近)的文件:
# grep -H ModelName /usr/share/cups/model/*.ppd | less
...
/usr/share/cups/model/CNCUPSLBP6018CAPTS.ppd:*ModelName: "Canon LBP6000/LBP6018 CAPT (US)"
在这种情况下,我们选择CNCUPSLBP6018CAPTS.ppd
与型号 LBP6000 匹配。
(注意 - 如果您找不到与您的打印机匹配的打印机,请查看 Canon tar.gz 档案中的 README-capt-*txt 文件 - 在名为“对象打印机”的部分中,它包含每个 .ppd 文件支持的打印机的精确列表)。
添加打印机:
# lpadmin -p LBP6000 -m CNCUPSLBP6018CAPTS.ppd -v ccp://localhost:59687
# lpadmin -p LBP6000 -E
# ccpdadmin -p LBP6000 -o /dev/usb/lp0
并配置您的系统以自动启动 Canon ccpd 守护程序:
# update-rc.d ccpd defaults
问题
佳能打印机驱动程序存在几个问题:
它是为 Debian 构建的,最后支持的 Ubuntu 版本是 12.04。但它在 14.04 中也能运行。
它包含为 32 位 i386 构建的闭源二进制库,因此无法在 amd64 上本地运行(即使在 64 位包中)
captstatusui 包含对 cnsktmodule.c 的无限制调用,在某些系统上
strcpy
会失败并出现错误aborted *** buffer overflow detected ***
佳能打印机驱动程序实际上是一个单独的守护进程,它通过本地或网络套接字与 cups 通信 - 它会在您的系统上留下一个开放的网络端口,我怀疑佳能代码是否曾被审计过是否存在安全漏洞
打印机可以在 cups 中出现两次(一次是自动检测到的 USB 打印机,一次是 Canon CCPD 守护程序),但如果您尝试打印到“USB”打印机,它将无法工作。在打印机设置中,如果您看到打印机配置为 USB 打印机,则必须手动禁用它(右键单击,禁用)
Canon 使用自己的专有软件和协议与打印机通信,这就是为什么它不与 cups 集成,无法自动检测,并且需要手动安装驱动程序。可以合理地期望打印机应该被自动检测并正常工作,但这在 Canon LBP 上是不可能的。我的下一台打印机将是一台“只与”开源驱动程序兼容的打印机,可能是一台支持PCL——打印机命令语言标准,例如兄弟HL-2250DN(廉价双面网络打印机,以前是亚马逊最畅销的激光打印机),或者HP Linux 推荐的打印机与他们的开源软件兼容高压磷脂酰肌醇软件。
源代码的构建脚本很旧,而且有点混乱。由于包含闭源 i386 二进制库,并且构建脚本中缺乏对多架构的支持,因此很难编译出完全可用的 64 位版本。只要您解决了构建系统中的各种错误,就可以在 32 位系统上编译 32 位版本。
问题:ccpd 挂起
有时 ccpd 会挂起并且队列只显示“正在处理,自...”
尝试手动重启:
pkill -9 -x ccpd
pkill -9 -x captmoncnabc
/etc/init.d/ccpd start
/etc/init.d/ccpd status
问题:ccpd 无法工作 - 系统启动后只有一个 ccpd 进程在运行
为了正常运行,系统中应该有两个 ccpd 进程运行。 ccpd 守护进程依赖于在分叉第二个进程之前运行 cups 守护进程。您可以使用以下方法解决该问题:
启用 cups 初始化脚本 (update-rc.d cups defaults)。
指示 ccpd init 脚本在 cups init 之后运行(update-rc.d ccpd 默认为 99),或者在 /etc/rc.local 脚本中添加“sleep 10 && /etc/init.d/ccpd start”。
如果您想使用 UDEV 规则和启动脚本,请注意 UDEV 规则在 CUPS 初始化脚本之前执行,因此重新启动 ccpd 初始化脚本而不是简单地启动可能会很有用。例如,您可以在“/etc/rc.local”中放置以下字符串:
睡眠 10 && /etc/init.d/ccpd 重启
(解决方案来自 Ubuntu 维基百科)
向佳能支持部门报告错误和问题
佳能有一个官方电子邮件地址,用于报告驱动程序的任何错误和问题:
[email protected]
从源代码构建
如果您想尝试从源代码构建和安装,请按照以下说明操作(Arch 构建脚本也可能有帮助):
sudo apt-get install build-essential automake libtool libgtk2.0-dev libglade2-dev libcups2-dev
wget http://gdlp01.c-wss.com/gds/6/0100004596/03/Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz
tar -zxvf Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz
cd Linux_CAPT_PrinterDriver_V260_uk_EN/Src/
# do cndrvcups-common
sudo apt-get install build-essential automake libtool libgtk2.0-dev libglade2-dev libcups2-dev
rm -rf cndrvcups-common-2.60-1/
tar -zxvf cndrvcups-common-2.60-1.tar.gz
cd cndrvcups-common-2.60-1/
sed -i -e 's/-lcups/-lcups -lgmodule-2.0/' cngplp/src/Makefile.am
dpkg-buildpackage -b -uc
cd ..
sudo apt-get install cups
sudo dpkg -i cndrvcups-common_2.60-1_amd64.deb
# do cndrvcups-capt
rm -rf cndrvcups-capt-2.60-1/
tar -zxvf cndrvcups-capt-2.60-1.tar.gz
cd cndrvcups-capt-2.60-1/
export echo=echo
sed -i -e 's/dh_shlibdeps/dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info/' debian/rules
sed -i -e 's/eval cmds=\"$old_archive_cmds/echo/' cngplp/ltmain.sh
sed -i -e 's:uimain.h":uimain.h"\n#include <cups/ppd.h>:' statusui/src/ppapdata.c
sed -i -e 's/cnsktmodule.la/cnsktmodule.la -lpthread/' statusui/src/Makefile.am
debian/rules configure
sed -i -e 's/RANLIB=/#RANLIB=/' cngplp/libtool
debian/rules build
fakeroot debian/rules install
fakeroot debian/rules binary-arch
cd ..
sudo dpkg -i cndrvcups-capt_2.60-1_amd64.deb
我将其包含进来只是为了给任何倾向于遵循此路径的人一个提示。大多数人不应该尝试从源代码构建它。即使在 amd64 系统上,生成的包也会包含封闭的 i386 库。