我的佳能 LBP 打印机无法在 Ubuntu 14.04 下运行

我的佳能 LBP 打印机无法在 Ubuntu 14.04 下运行

我从 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 守护进程。您可以使用以下方法解决该问题:

  1. 启用 cups 初始化脚本 (update-rc.d cups defaults)。

  2. 指示 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 库。

相关内容