帶有 CUPS 的 Debian ARM 和 Brother DCP195C

帶有 CUPS 的 Debian ARM 和 Brother DCP195C

我想透過 LAN 存取我的 DCP 195C 印表機 (Brother)。為此我買了一個樹莓派並在上面安裝了CUPS。 CUPS 運作良好,其他一切也運作順利。我的問題是我無法在我的 pi 上安裝 Brother 提供的驅動程式(它們僅適用於 x86 和 x64)。我是否錯過了在 pi 上安裝驅動程式的選項?

答案1

簡而言之:您必須從 Linux 驅動程式中提取 ppd 文件

長的:

第一的

第二

  • https://192.168.1.2:631/admin 透過[將 ip 替換為 pi's]開啟 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 Web 介面)並在「印表機」部分修改印表機,以便它使用 CUPS 識別的 USB 裝置而不是裝置usb://dev/usb/lp0

讓印表機以正常速度接收數據

brdcp195cfilter是列印過程中的一個步驟,它接收巨大的輸入位圖,並將其轉換為稍後透過管道傳輸到印表機裝置的內容。我測量了頁面頂部簡單的“Hello world”訊息的輸入大小約為 90MB。

Raspberry 上的模擬速度不夠快,無法跟上向印表機提供資料的速度。列印工作正常,但我聽到印表機馬達在等待數據時發出不健康的噪音。

若要解決此問題,請spongemoreutils套件中安裝該實用程式並進行編輯filterdcp195c,以便透過管道傳輸$BRCONV $BRCONV_OP(aka ) 的輸出。文件末尾的“PostScript”、“PDF”和“*”情況下應該有三行,以.brdcp195cfiltersponge... | $BRCONV $BRCONV_OP | sponge

這樣做的作用是吞掉長時間運行的轉換器進程的所有輸出,並僅在轉換器完成後一次性將其發送到印表機。這樣,列印開始需要更長的時間,但印表機正在以正常速度接收資料。

sponge將緩衝的資料儲存在暫存目錄中,因此您不受 Raspberry Pi 的 RAM 的限制)

答案3

岡瑟的回答非常有幫助。這部分是我自己的經驗和資訊的後續行動。

我沒有發現內核模組有任何問題;這可能是在過去六年中得到解決的。

我首先在 Raspberry Pi 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 來建立軟體包。
  • 這個「引導程式」包足以滿足我的需求。我不知道它是否有一些功能限制。
  • 當我嘗試安裝我的套件時,它與Raspbian 提供的libc6:i386現有檔案發生衝突。我重命名了現有文件,並且包安裝正確。changelog.Debian.gzlibc6:armhf

相關內容