Brother 打印机驱动打包

出自 ArchWiki

此条目或章节已过时。

原因:本页面编写于 i686 架构停止支持之前。因此,它提供的示例使用了 i386 软件包,并且在打包时没有考虑 32 位软件包指南。(在 Talk:Packaging Brother printer drivers 中讨论)

Brother 为其打印机提供 Linux 驱动程序,但仅以 .rpm 和/或 .deb 软件包形式提供。本文解释了为了为打印机驱动程序创建 PKGBUILD,需要对 Brother 提供的 DEB 和 RPM 软件包的内容进行哪些调整。可以在 AUR 中搜索到 Brother 打印机的其他 PKGBUILD 示例。

CUPS 使用 .ppd 文件和过滤器二进制文件处理打印机。一旦安装了这两个文件,就可以在 CUPS 中添加打印机。

从 .deb 创建 PKGBUILD

Brother 提供了“驱动程序安装工具”以及两个 .deb 软件包。

一个是 LPR 驱动程序,另一个是 CUPS 包装器(在 LPR 驱动程序之上运行)。两者都可以在 Brother 的“支持与下载”页面上找到(例如,对于 HL-L9200CDW)。

可以创建一个 PKGBUILD,它将自动从 Brother 提供的 URL 直接下载并安装 .deb 软件包。因此,您需要从 Brother 网站获取两个 .deb 软件包的直接下载链接(例如,对于 HL-L9200CDW,您有 LPR 驱动程序CUPS 包装器)。

一旦您获得了两个 .deb 软件包的下载 URL,请使用来自 brother-hll8360cdw-lpr-binAURbrother-hll8360cdw-cups-binAUR 的现有 PKGBUILD 文件作为模板。您将需要调整软件包名称。将 url= 更改为您特定打印机型号的 Brother 支持页面 URL,source= 需要调整为 .deb 软件包的 URL。以下 PKGBUILD 示例基于 brother-hll8360cdw-cups-binAUR,但已针对 HL-L9200CDW LPR 打印机驱动程序进行了调整

# Maintainer: John Doe <joe@example.com>
pkgname=brother-hll9200cdw-lpr-bin
pkgver=1.1.2
pkgrel=1
pkgdesc="LPR driver for Brother HL-L9200CDW(T) printer"
arch=("i686" "x86_64")
url="https://support.brother.com/g/b/producttop.aspx?c=ca&lang=en&prod=hll9200cdw_us_as_cn"
license=("EULA")
source=("http://www.brother.com/pub/bsc/linux/packages/hll9200cdwlpr-1.1.2-1.i386.deb")
md5sums=("30124df7d49362906a2a118eff3c710e")
package() {
        tar -xf data.tar.gz -C "${pkgdir}"
}

不要忘记更新 md5sum。pkgver 版本应与 Brother 的打印机驱动程序版本相同(请注意,LPR 和 CUPS 包装器的版本可能不同)。也为 CUPS 包装器创建 PKGBUILD 文件

# Maintainer: John Doe <joe@example.com>
pkgname=brother-hll9200cdw-cups-bin
pkgver=1.1.3
pkgrel=1
pkgdesc="CUPS wrapper for Brother HL-L9200CDW(T) printer"
arch=("i686" "x86_64")
url="https://support.brother.com/g/b/producttop.aspx?c=ca&lang=en&prod=hll9200cdw_us_as_cn"
license=("EULA")
source=("http://www.brother.com/pub/bsc/linux/packages/hll9200cdwcupswrapper-1.1.3-1.i386.deb")
md5sums=("0a802088aac7236a3c309b2b46b37f11")
package() {
       tar -xf data.tar.gz -C "${pkgdir}"
}

最后,使用 makepkg 测试/安装您新创建的 PKGBUILD 文件。如果一切正常,请不要忘记将您的新驱动程序发布到 AUR。有关详细信息,请参阅 AUR 提交指南

从 .rpm 创建 PKGBUILD

不幸的是,Brother 的驱动程序存在一些问题

  • CUPS 驱动程序构建在 lpr 驱动程序之上。
  • CUPS 驱动程序包包含一个单独的安装 shell 脚本,其中嵌入了 ppd 和过滤器。它在安装期间由 rpm 执行。它提取 ppd 和过滤器,并以 Red Hat 特定的方式执行一些安装过程。
  • CUPS 驱动程序包使用的路径不符合 Arch 打包标准

这些问题可以解决。

  • lpr 驱动程序不需要安装,因此 PKGBUILD 可以只提取 lpr 驱动程序的 RPM 软件包中的文件。
  • CUPS 驱动程序的 RPM 应该包含一个单独的 shell 脚本。例如,对于 brother-hl2030AUR 软件包,PKGBUILD 更改了三件事
    1. 路径已更改。
    2. 除了“cat <<EOF”或“echo > ...”或任何将 *.ppd 或过滤器输出到单独文件的命令外,所有命令都被禁用。这是通过将不相关的指令包装在 if false; then ... fi 中完成的。
    3. ppd 和过滤器的目标文件名已更改,以便它们安装到与 PKGBUILD 相同的目录中。请注意,嵌入式过滤器的路径也已更改。
  • 为了修复路径以符合 Arch 打包标准,可以在从 lpr 和 CUPS 驱动程序解压的所有文本文件上使用 sed 或类似工具。查看 brother-hl2030AUR 软件包中的补丁,以检查哪些文件受到影响。

实际上,在上述更改之后,脚本只会将 ppd 和过滤器输出到某个已知位置。然后,PKGBUILD 会将它们复制到 $pkgdir 中的正确目录

install -m 644 -D ppd "${pkgdir}/usr/share/cups/model/HL2030.ppd"
install -m 755 -D filter  "${pkgdir}/usr/lib/cups/filter/brlpdwrapperHL2030"

lpr 驱动程序文件也需要复制到 $pkgdir 中!

其他更改

编辑安装脚本

-#PSTOPSFILTER=`which pstops`
+PSTOPSFILTER='/usr/lib/cups/filter/pstops'

由于 pstops 未安装在标准位置,因此需要硬编码路径。

此条目或章节的事实准确性存在争议。

原因:原始作者“不记得”为什么需要这样做,或者是否根本需要这样做(在 Talk:Packaging Brother printer drivers 中讨论)

这也可能需要添加。

+[psconvert2]
+pstops=/usr/lib/cups/filter/pstops

x86_64

因为某些提供的二进制文件仅为 32 位,所以在 x86_64 系统上可能需要安装一些额外的 multilib 软件包,例如 32 位版本的 glibc (lib32-glibc)。