CUPS가 포함된 Debian ARM 및 Brother DCP195C

CUPS가 포함된 Debian ARM 및 Brother DCP195C

LAN을 통해 DCP 195C 프린터(Brother)에 액세스하고 싶습니다. 이를 위해 라즈베리 파이를 구입하고 여기에 CUPS를 설치했습니다. CUPS는 잘 돌아가고 다른 모든 것들도 원활하게 돌아가고 있습니다. 내 문제는 형제가 제공하는 드라이버(x86 및 x64 전용)를 내 파이에 설치할 수 없다는 것입니다. 내 파이에 드라이버를 설치하는 데 놓친 옵션이 있습니까?

답변1

간략한 설명: Linux 드라이버에서 ppd 파일을 추출해야 합니다.

긴:

첫 번째

  • Brothers Driver 웹사이트로 이동하여 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로 교체]를 통해 컵 웹 인터페이스를 엽니다.
  • "프린터 추가"를 클릭하고 "Brother DCP-195C(Brother DCP-195C)"를 선택하고 "계속"을 누릅니다.
  • 필요한 경우 향후 정보를 편집하고 "프린터 공유"를 선택한 후 "계속"을 누르십시오.
  • "또는 PPD 파일 제공"에서 추출된 "brother_dcp195c_printer_en.ppd" 파일을 찾아 업로드합니다. 다음 단계를 따르세요...완료

그 후 프린터를 사용할 수 있었지만 오류가 발생했습니다: "파일 "/usr/lib/cups/filter/brlpdwrapperdcp195c"를 사용할 수 없음" Ubuntu 노트북에 드라이버를 설치했기 때문에 / usr/lib/cups/filter/를 파이에

그 후 내 노트북이 프린터를 찾을 수 있었습니다

답변2

명령 세트가 다르더라도 에뮬레이션을 통해 Raspberry Pi에서 작동하는 i386 드라이버를 얻을 수 있습니다. 매우 느리고 인쇄물이 도착할 때까지 몇 분이 걸리지만 작동합니다.

이 포럼 게시물에서 힌트를 찾았습니다. https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=15526&start=25#p708038

1단계: Brother 설명서의 지침에 따라 드라이버를 설치합니다.

/opt/brother/Printers/dcp195c/lpd필터 바이너리 와 같은 디렉토리가 있어야 합니다 brdcp195cfilter. 이 바이너리는 filterdcp195c동일한 디렉토리의 바로 옆에 있는 쉘 스크립트 에 의해 호출됩니다 .

나는 그들이 지금 설치 스크립트를 제공한다고 생각하지만, 나는 없이 그것을 했습니다. 사전 설치해야 하는 지침이 어딘가에 있습니다.

2단계: i386 에뮬레이션 작동시키기

이는 다음 단계를 따릅니다.https://wiki.debian.org/QemuUserEmulation

2단계가 끝나면 일반 바이너리처럼 i386 바이너리를 실행할 수 있습니다. 에서는 ps ax다음과 같이 표시됩니다.

Qemu 설치

패키지를 설치 하고 qemu.binfmt-supportqemu-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

또 다른 데비안 저장소도 그럴 것입니다.

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

나를 위해 문제를 해결한 것은 (CUPS 웹 인터페이스)로 이동하여 localhost:631"프린터" 섹션에서 프린터를 수정하여 장치가 아닌 CUPS 인식 USB 장치를 사용하도록 하는 것이었습니다 usb://dev/usb/lp0.

프린터가 정상 속도로 데이터를 수신하도록 합니다.

brdcp195cfilter거대한 입력 비트맵을 수신하고 이를 나중에 프린터 장치로 파이프되는 것으로 변환하는 인쇄 프로세스의 한 단계입니다. 페이지 상단의 간단한 "Hello world" 메시지에 대한 입력 크기는 ~90MB로 측정되었습니다.

Raspberry의 에뮬레이션은 프린터에 데이터를 공급할 만큼 빠르지 않습니다. 인쇄는 작동하지만 데이터를 기다리는 동안 프린터 모터가 활성화되어 건강에 좋지 않은 소음이 들렸습니다.

이 문제를 해결하려면 패키지 sponge에서 유틸리티를 설치하고 (일명 ) 의 출력이 . 파일 끝에 "PostScript", "PDF" 및 "*" 케이스 내에 3줄이 있어야 하며 .moreutilsfilterdcp195c$BRCONV $BRCONV_OPbrdcp195cfiltersponge... | $BRCONV $BRCONV_OP | sponge

이것이 하는 일은 장기 실행 변환기 프로세스의 모든 출력을 집어삼키고 변환기가 완료될 때 한꺼번에 프린터로 보내는 것입니다. 이렇게 하면 인쇄가 시작될 때까지 시간이 더 걸리지만 프린터는 정상적인 속도로 데이터를 수신하고 있습니다.

( sponge버퍼링하는 데이터를 임시 디렉토리에 저장하므로 Raspberry Pi의 RAM에 의해 제한되지 않습니다)

답변3

귄터의 대답매우 도움이 되었습니다. 이것은 부분적으로 내 경험과 정보를 바탕으로 한 후속 조치입니다.

커널 모듈에 어떤 문제도 발견되지 않았습니다. 이 문제는 아마도 지난 6년 동안 해결되었을 것입니다.

처음에는 Raspberry Pi 3에서 테스트했습니다. 인쇄 속도는 느리지만(페이지당 ~3분) 프린터를 거의 사용하지 않으므로 괜찮습니다.

오류 메시지를 방지하려면 패키지 ld.so를 제거하면 됩니다 raspi-copies-and-fills.

libc6:i386Debian 과 를 설치해야 한다는 것을 알았습니다 libc6:armhf. 왜냐하면 이러한 패키지에는 정확한 버전 일치가 필요하고 Raspbian 버전에는 예를 들어 +rpi1. 데비안의 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분) 데비안의 armhf 패키지를 사용할 수 없습니다. 많은 독서와 시행착오 끝에 libc6:i386소스에서 Raspbian "부트스트랩" 패키지를 구축하는 데 성공했습니다.

소스 코드를 얻는 것은 쉽습니다:

apt-get source glibc
cd glibc-N.NN

다음 단계는 빌드 프로필을 선택하는 것입니다.

https://wiki.debian.org/BuildProfileSpec

  • cross왜냐하면 우리는 크로스 컴파일 중이기 때문입니다.
  • stage2glibc를 부트스트랩해야 하기 때문에
  • nobiarchamd64/x32 패키지 빌드 방지
  • nocheck빌드 종속성을 제거합니다.

다음과 같이 빌드 종속성을 설치하는 것이 가능해야 한다고 생각했습니다.

sudo apt-get -a i386 --build-profiles=cross,stage2,nobiarch,nocheck build-dep glibc

그러나 perl:i386. 어쩌면 내가 뭔가 잘못하고 있는 건 아닐까? 데비안 패키징에 대한 나의 이해가 매우 제한되어 있기 때문에 그럴 것 같습니다. 나는 대신 이렇게 했습니다:

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

관련 정보