Brother 打印机驱动打包
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-binAUR 和 brother-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 更改了三件事
- 路径已更改。
- 除了“
cat <<EOF
”或“echo > ...
”或任何将 *.ppd 或过滤器输出到单独文件的命令外,所有命令都被禁用。这是通过将不相关的指令包装在if false; then ... fi
中完成的。 - 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 未安装在标准位置,因此需要硬编码路径。
这也可能需要添加。
+[psconvert2] +pstops=/usr/lib/cups/filter/pstops
x86_64
因为某些提供的二进制文件仅为 32 位,所以在 x86_64 系统上可能需要安装一些额外的 multilib 软件包,例如 32 位版本的 glibc (lib32-glibc)。