![Debian ARM 和带有 CUPS 的 Brother DCP195C](https://linux22.com/image/1415041/Debian%20ARM%20%E5%92%8C%E5%B8%A6%E6%9C%89%20CUPS%20%E7%9A%84%20Brother%20DCP195C.png)
我想通过 LAN 访问我的 DCP 195C 打印机(Brother)。为此,我购买了一台树莓派并在其上安装了 CUPS。CUPS 运行良好,其他一切也运行顺畅。我的问题是我无法在我的树莓派上安装 Brother 提供的驱动程序(它们仅适用于 x86 和 x64)。我是否错过了在树莓派上安装驱动程序的选项?
答案1
简而言之:你必须从 Linux 驱动程序中提取 ppd 文件
长的:
第一的
- 转到 Brothers Driver 网站并搜索 DCP195:http://support.brother.com
- 下载 Linux deb 版本的“CUPSwrapper 打印机驱动程序(deb 包)“
- 使用压缩工具打开 deb 文件并按照路径向下找到“dcp195ccupswrapper-1.1.3-1.i386/opt/brother/Printers/dcp195c/cupswrapper”
- 提取“brother_dcp195c_printer_en.ppd”文件
第二
https://192.168.1.2:631/admin
通过[将 ip 替换为 pi]打开 cups 网络界面- 点击“添加打印机”选择“Brother DCP-195C(Brother DCP-195C)”并按“继续”
- 如有必要,编辑后续信息,选中“共享打印机”并按“继续”
- 在“或提供 PPD 文件”中浏览到提取的“brother_dcp195c_printer_en.ppd”文件并上传按照后续步骤...完成
之后,打印机可用,但出现错误:“文件“/usr/lib/cups/filter/brlpdwrapperdcp195c”不可用”因为我在 Ubuntu 笔记本电脑上安装了驱动程序,所以我只需将文件从笔记本电脑的 /usr/lib/cups/filter/ 复制到 pi
此后,我的笔记本电脑可以找到打印机
答案2
您可以通过仿真让 i386 驱动程序在 Raspberry Pi 上运行,即使它具有不同的指令集。它非常慢,需要几分钟才能打印输出,但它可以工作。
我在这个论坛帖子中找到了提示: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=15526&start=25#p708038
步骤 1:按照 Brother 文档中的说明安装驱动程序
您应该有一个包含/opt/brother/Printers/dcp195c/lpd
过滤器二进制文件的目录brdcp195cfilter
。该二进制文件由filterdcp195c
同一目录中紧挨着它的 shell 脚本调用。
我相信他们现在提供了安装脚本,但我没有安装。有些地方有关于需要预先安装什么的说明。
步骤 2:让 i386 仿真工作
按照以下步骤操作https://wiki.debian.org/QemuUserEmulation
在第 2 步结束时,您应该能够像运行常规二进制文件一样运行 i386 二进制文件。在 中ps ax
,它们将显示
安装 Qemu
安装软件包qemu
,binfmt-support
然后qemu-user-static
。
运行update-binfmts --display
以查看支持哪些二进制格式。它们应该在 Raspbian 和 Debian 上自动启用。
安装 x86 支持库
在 Raspbian 上,将如下行添加到您的/etc/apt/sources.list
:
## Debian i386
deb [arch=i386] http://http.debian.net/debian stable main contrib non-free
另一个 Debian 存储库也可以。
Raspbian 存储库没有 x86 二进制文件,因此请[arch=armhf]
在现有行中添加以 开头的行deb
。以 开头的行deb-src
可以保持原样。
告诉 Raspbian 您想要一个带有 i386 软件包的多架构系统,并获取 i386 libc。要使此update
步骤有效,您需要导入并信任 Debian GPG 密钥来进行软件包管理。
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386
此时,您应该能够执行brdcp195cfilter
驱动程序附带的二进制文件:
$ ./brdcp195cfilter
ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
Error: invalid option !!
如果你看到这个输出,说明它成功了。该Error: invalid option !!
行brdcp195cfilter
抱怨你应该传递参数。
可选:删除ld.so
错误消息
Raspbian 会将该库/etc/ld.so.preload
预加载libarmmem
到所有进程中。该库会用 ARM 汇编编写的更快例程替换一些昂贵的内存例程,但对于运行 Raspbian 来说并非绝对必要。
忽略该警告是安全的,但从中删除或注释掉该行也是安全的/etc/ld.so.preload
。如果不禁用,该警告将显示在 CUPS 错误日志中。
步骤 3:使用 CUPS 进行操作
您应该按照 Brother 网站上的说明安装 CUPS。
USB 连接不稳定
在我的 Raspberry 上,dmesg
日志在某些时候会在这些行之间快速交替:
[58981.586842] usblp0: removed
[59222.794260] usblp 1-1.3:1.0: usblp0: USB Bidirectional printer dev 8 if 0 alt 0 proto 2 vid 0x04F9 pid 0x0222
对我来说,解决这个问题的方法是转到localhost:631
(CUPS 网络界面)并修改“打印机”部分中的打印机,以便它使用 CUPS 识别的 USB 设备而不是设备usb://dev/usb/lp0
。
让打印机以正常速度接收数据
brdcp195cfilter
是打印过程中的一个步骤,它接收一个巨大的输入位图,并将其转换为稍后通过管道传输到打印机设备的内容。我测量了页面顶部一条简单的“Hello world”消息的输入大小约为 90MB。
Raspberry 上的仿真速度不够快,无法跟上向打印机提供数据的速度。打印工作正常,但我听到打印机电机在等待数据时发出不正常的噪音。
sponge
要修复此问题,请从软件包中安装实用程序moreutils
并进行编辑,以便(又名)filterdcp195c
的输出通过管道传输。文件末尾的“PostScript”、“PDF”和“*”框内应该有三行,以结尾。$BRCONV $BRCONV_OP
brdcp195cfilter
sponge
... | $BRCONV $BRCONV_OP | sponge
这样做的目的是吞噬长时间运行的转换器进程的所有输出,并仅在转换器完成后一次性将其发送到打印机。这样,打印开始需要更长的时间,但打印机正在以正常速度接收数据。
(sponge
将缓冲的数据存储在临时目录中,因此您不受 Raspberry Pi 的 RAM 的限制)
答案3
Günther 的回答非常有帮助。这部分是我自己的经验和信息的后续。
我没有发现内核模块有任何问题;这个问题可能在过去六年内已经修复。
我首先在 Raspberry Pi 3 上进行了测试。它的打印速度很慢(每页约 3 分钟),但我很少使用打印机,所以这是可以接受的。
为了避免ld.so
出现错误消息,您可以删除该raspi-copies-and-fills
包。
我发现有必要安装 Debian 的libc6:i386
和libc6:armhf
,因为这些软件包需要完全匹配的版本,而 Raspbian 版本包含例如+rpi1
。Debian 的 armhf 软件包似乎可以在 Raspberry Pi 3 上正常工作;我相信它们应该可以在 Raspberry Pi 2 (armv7) 及更高版本和新的 Raspberry Pi Zero 2 W 上运行,但不能在 Raspberry Pi 1 或 Zero/W (armv6) 上运行。注意,任何混合发行版的人都应该查看man apt_preferences
。
我想使用 Raspberry Pi Zero W 作为我的打印服务器。这更慢(每页约 5 分钟),并且不能使用 Debian 的 armhf 包。经过大量阅读和反复试验后,我设法libc6:i386
从源代码构建了一个 Raspbian“引导”包。
获取源代码很容易:
apt-get source glibc
cd glibc-N.NN
事实证明,下一步是选择构建配置文件。
https://wiki.debian.org/BuildProfileSpec
cross
因为我们正在交叉编译stage2
因为我们需要引导 glibcnobiarch
避免构建 amd64/x32 包nocheck
消除了构建依赖
我认为应该可以按如下方式安装构建依赖项:
sudo apt-get -a i386 --build-profiles=cross,stage2,nobiarch,nocheck build-dep glibc
但是,由于某些软件包不可用,例如,该操作失败perl:i386
。也许我做错了什么?由于我对 Debian 打包的了解非常有限,所以很有可能。我改为这样做:
sudo apt-get build-dep glibc
然后检查需要debian/control
哪个版本gcc
,然后:
sudo apt install dpkg-cross gcc-10-i686-linux-gnu g++-10-i686-linux-gnu
这通常相当于安装crossbuild-essential-i386
。
现在我们就可以建造了。
dpkg-buildpackage --no-sign -b -a i386 --build-profiles=cross,stage2,nobiarch,nocheck -d
笔记:
- 在单核 armv6 Raspberry Pi 上,构建过程需要很长时间。我建议使用更快的 Raspberry Pi 来构建软件包。
- 这个“bootstrap”包足以满足我的需求。我不知道它是否有一些功能限制。
- 当我尝试安装软件包时,它与Raspbian 提供的
libc6:i386
现有文件发生冲突。我重命名了现有文件,软件包安装正确。changelog.Debian.gz
libc6:armhf