Unix 打印驱动程序乐趣

主要观点:作者将 Nelko PL70E-BT 打印机连接到 FreeBSD 系统的计算机,因 Nelko 未提供 FreeBSD 驱动,需通过 PostScript Printer Descriptions (.ppd)文件配置打印机,过程中遇到自定义二进制文件 rastertolabel不兼容问题,通过启用 FreeBSD 的 Linux 二进制兼容层、使用 PatchELF 工具修改二进制可执行文件的运行路径等一系列操作,最终成功使打印机在 CUPS 中打印出所需的 shipping labels。
关键信息

  • Nelko 仅提供 Windows、MacOS 和 Linux 的驱动包,作者使用 FreeBSD 系统。
  • 从 Nelko 的 Linux 系统安装包中获取.ppd 文件和二进制文件 rastertolabel
  • rastertolabel为 Linux 系统设计,与 FreeBSD 系统不兼容,动态链接器遇到错误,缺少共享库对象 libm.so.6libstdc++.so.6
  • 使用 debootstrap 安装 Ubuntu userland 以获取 glibc 文件,通过 PatchELF 工具修改 rastertolabel的运行路径,解决链接错误。
  • 修正 /compat/ubuntu/lib64/ld-linux-x86-64.so.2 的 symlink 指向正确路径,成功打印。
    重要细节
  • 使用 ar x [file.deb] 命令解压.deb 文件,tar 提取文件。
  • 通过 file 命令查看文件类型,如 file /usr/local/libexec/cups/filter/Nelko/Filter/rastertolabel 查看 rastertolabel 的类型。
  • 使用 ldd 命令列出动态对象依赖,如 ldd /usr/local/libexec/cups/filter/Nelko/Filter/rastertolabel
  • 使用 PatchELF 工具修改运行路径,如 patchelf --set-rpath /compat/ubuntu/lib/x86_64-linux-gnu:/compat/ubuntu/lib64 /usr/local/libexec/cups/filter/Nelko/Filter/rastertolabel
  • 创建新的 symlink 修正链接错误,如 sudo ln -sf../lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /compat/ubuntu/lib64/ld-linux-x86-64.so.2
阅读 8
0 条评论