Debian ARM 和带有 CUPS 的 Brother DCP195C

Debian ARM 和带有 CUPS 的 Brother DCP195C

我想通过 LAN 访问我的 DCP 195C 打印机(Brother)。为此,我购买了一台树莓派并在其上安装了 CUPS。CUPS 运行良好,其他一切也运行顺畅。我的问题是我无法在我的树莓派上安装 Brother 提供的驱动程序(它们仅适用于 x86 和 x64)。我是否错过了在树莓派上安装驱动程序的选项?

答案1

简而言之:你必须从 Linux 驱动程序中提取 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

安装软件包qemubinfmt-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_OPbrdcp195cfiltersponge... | $BRCONV $BRCONV_OP | sponge

这样做的目的是吞噬长时间运行的转换器进程的所有输出,并仅在转换器完成后一次性将其发送到打印机。这样,打印开始需要更长的时间,但打印机正在以正常速度接收数据。

sponge将缓冲的数据存储在临时目录中,因此您不受 Raspberry Pi 的 RAM 的限制)

答案3

Günther 的回答非常有帮助。这部分是我自己的经验和信息的后续。

我没有发现内核模块有任何问题;这个问题可能在过去六年内已经修复。

我首先在 Raspberry Pi 3 上进行了测试。它的打印速度很慢(每页约 3 分钟),但我很少使用打印机,所以这是可以接受的。

为了避免ld.so出现错误消息,您可以删除该raspi-copies-and-fills包。

我发现有必要安装 Debian 的libc6:i386libc6: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因为我们需要引导 glibc
  • nobiarch避免构建 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.gzlibc6:armhf

相关内容