![帶有 CUPS 的 Debian ARM 和 Brother DCP195C](https://rvso.com/image/1415041/%E5%B8%B6%E6%9C%89%20CUPS%20%E7%9A%84%20Debian%20ARM%20%E5%92%8C%20Brother%20DCP195C.png)
我想透過 LAN 存取我的 DCP 195C 印表機 (Brother)。為此我買了一個樹莓派並在上面安裝了CUPS。 CUPS 運作良好,其他一切也運作順利。我的問題是我無法在我的 pi 上安裝 Brother 提供的驅動程式(它們僅適用於 x86 和 x64)。我是否錯過了在 pi 上安裝驅動程式的選項?
答案1
簡而言之:您必須從 Linux 驅動程式中提取 ppd 文件
長的:
第一的
- 前往兄弟驅動程式網站並蒐索 DCP195:http://support.brother.com
- 下載 Linux deb 版本的“CUPSwrapper 印表機驅動程式(deb 套件)」
- 使用壓縮工具開啟 deb 文件,然後沿著路徑向下到達“dcp195ccupswrapper-1.1.3-1.i386/opt/brother/Printers/dcp195c/cupswrapper”
- 提取“brother_dcp195c_printer_en.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
安裝軟體包qemu
,binfmt-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 上的模擬速度不夠快,無法跟上向印表機提供資料的速度。列印工作正常,但我聽到印表機馬達在等待數據時發出不健康的噪音。
若要解決此問題,請sponge
從moreutils
套件中安裝該實用程式並進行編輯filterdcp195c
,以便透過管道傳輸$BRCONV $BRCONV_OP
(aka ) 的輸出。文件末尾的“PostScript”、“PDF”和“*”情況下應該有三行,以.brdcp195cfilter
sponge
... | $BRCONV $BRCONV_OP | sponge
這樣做的作用是吞掉長時間運行的轉換器進程的所有輸出,並僅在轉換器完成後一次性將其發送到印表機。這樣,列印開始需要更長的時間,但印表機正在以正常速度接收資料。
(sponge
將緩衝的資料儲存在暫存目錄中,因此您不受 Raspberry Pi 的 RAM 的限制)
答案3
岡瑟的回答非常有幫助。這部分是我自己的經驗和資訊的後續行動。
我沒有發現內核模組有任何問題;這可能是在過去六年中得到解決的。
我首先在 Raspberry Pi 3 上進行了測試。
為了避免ld.so
出現錯誤訊息,您可以刪除該raspi-copies-and-fills
套件。
我發現有必要安裝 Debian 的libc6:i386
和libc6: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
因為我們需要引導 glibcnobiarch
避免建置 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.gz
libc6:armhf