이 저장소에는 PAPPL을 사용하여 여러 운영 체제에서 IPP 인쇄를 지원하는 PostScript 프린터용 프린터 응용 프로그램이 포함되어 있습니다. 또한 cup-filters 2.x(libcupsfilters, libppd의 필터 기능) 및 pappl-retrofit(프린터 응용 프로그램의 클래식 CUPS 드라이버 캡슐화)의 리소스를 사용합니다. 이 작업(또는 현재 pappl-retrofit 코드)은 hp-printer-app에서 파생됩니다.
귀하의 기여를 환영합니다. 이슈와 풀 리퀘스트를 게시해주세요.
비래스터 프린터 응용 프로그램: 대상 형식은 고급/벡터 형식인 PostScript입니다. PostScript 또는 PDF의 입력 데이터가 허용되며 필요한 변환은 래스터 단계 사이에 없이 수행됩니다.
cup-filters 2.x의 새로운 필터 기능을 사용하는 프린터 응용 프로그램입니다. 필터 함수는 CUPS 필터에서 파생된 라이브러리 함수로, 2000년 CUPS 도입을 시작으로 수십 년간의 개발과 개선이 담겨 있습니다.
클래식 CUPS 드라이버용 개조 프린터 응용 프로그램으로, 이 경우 PostScript 프린터용 PPD 파일 중 가장 간단한 형태입니다. Snap에 포함된 저장소의 PPD 파일 목록을 나열하고, 실제 프린터에 필요한 PPD를 로드하고, PPD에서 옵션을 추출하여 웹 인터페이스에 표시하고, 작업 설정을 IPP 속성으로 받아들이고, PPD에서 제공하는 PostScript 코드를 올바르게 삽입합니다. 출력 데이터 스트림에 넣습니다.
원시(입력 형식은 프린터의 기본 형식) 작업을 통과하지 않는 프린터 응용 프로그램입니다. PPD 파일의 PostScript 코드가 항상 출력 스트림에 삽입되도록 하기 위해 입력 형식으로 존재하지 않는 프린터의 기본 형식 "application/vnd.printer-spec"을 호출하므로 "application/postscript" 입력이 강제됩니다. pstops() 필터 함수를 통해.
확장 가능한 프린터 응용 프로그램: 사용자는 관리 웹 인터페이스를 통해 PPD 파일을 추가하여 추가 프린터 모델을 지원할 수 있습니다.
추가 속성은 다음과 같습니다.
일련의 필터를 통해 데이터를 전달할 수 있도록 하위 프로세스로 분기하기 위한 코드를 다시 만들 필요가 없도록 하기 위해 필터 기능을 만들어 데이터를 프린터로 보내고 실제로 변환하는 필터의 체인을 형성합니다. filterChain() 필터 함수를 사용하여 이 필터 함수로 함수(pstops() 및 pdftops() 중 하나)를 사용합니다.
PWG/Apple 래스터 입력의 경우 처리가 스트리밍되도록 래스터 콜백을 사용하여 크고 무한히 긴 작업을 허용합니다. libppd 함수를 사용하여 출력 스트림에 PPD 옵션의 PostScript 코드를 삽입하고 filterPOn() 함수를 사용하여 libppd 함수에 대한 파일 설명자를 만들어 장치로 데이터를 보냅니다.
PostScript 프린터 응용 프로그램 Snap에는 foomatic-db 및 HPLIP 프로젝트의 모든 PostScript PPD 파일이 내장되어 있으므로 일반적으로 Linux 배포판과 함께 제공되는 대부분의 PostScript 프린터 PPD가 있습니다. 이 엄청난 수의 PPD가 Snap 크기를 크게 늘리는 것을 방지하기 위해 pyppd를 사용하여 PPD를 고도로 압축합니다. 일부 PPD는 추가 기능을 위해 특정 CUPS 필터를 사용합니다. 이러한 필터는 Snap에 포함되어 있으므로 추가 기능이 지원됩니다(대부분의 경우 PIN으로 보호된 인쇄). 사용자는 Snap을 재구축할 필요 없이 추가 PPD를 추가할 수 있습니다(아래 참조).
프린터의 IEEE-1284 장치 ID를 사용하여 처음에 PostScript 프린터인지 확인하고(CMD: 필드를 통해) 프린터가 전혀 지원되는지 확인한 다음 제조업체와 모델을 통해 PPD로 명시적으로 지원하는지 확인합니다. PPD가 없는 PostScript 프린터에는 일반 PPD가 할당됩니다. 제조사/모델 조회 전 CMD: 필드를 확인하여 추가 기능 모듈에서 PostScript를 제공하는 경우 해당 모듈이 실제로 설치되었는지 확인합니다.
표준 작업 IPP 속성은 가장 적합한 PPD 옵션 설정에 매핑되므로 사용자는 표준 IPP 속성만 지원하고 PPD 옵션을 검색할 수 없는 모든 유형의 클라이언트(예: 전화 또는 IoT 장치)에서 인쇄할 수 있습니다. 트레이, 미디어 크기, 미디어 유형 및 양면 인쇄는 쉽게 매핑할 수 있지만 PPD 파일에서 관련 옵션이 많이 다르기 때문에 색상과 품질의 경우 더 복잡해집니다. 여기서는 자동으로(과제에 대해 ~10000 PPD를 직접 편집하려는 사람) print-color-mode
( color
/ monochrome
), print-quality
( draft
/ normal
/ high
) 및 현재 프린터의 PPD에 있는 print-content-optimize
( auto
/ photo
/ graphics
/ text
/ text-and-graphics
). 따라서 프린터별 옵션 설정을 처리할 필요 없이 프린터의 전체 품질이나 속도에 쉽게 액세스할 수 있습니다(원래 옵션은 여전히 웹 관리 인터페이스를 통해 액세스할 수 있습니다).
특정 프린터 모델(프린터 응용 프로그램의 "드라이버")에 대한 프린터 기능은 프린터 응용 프로그램에 설정된 인쇄 대기열의 수명 동안 정적이지 않습니다. 사용자는 웹 관리 인터페이스의 페이지를 통해 하드웨어 액세서리(추가 용지함, 양면 장치, 마무리 장치 등)가 프린터에 설치되어 있는지 구성할 수 있으며 프린터 응용 프로그램은 드라이버 데이터 구조와 이를 통해 프린터 기능을 업데이트합니다. get-printer-attributes IPP 요청에 대한 응답이 적절하게 업데이트됩니다.
PostScript는 완전한 프로그래밍 언어이며 많은 PostScript 프린터에서는 적절한 PostScript 코드를 실행하는 옵션 설정 및 설치 가능한 하드웨어 액세서리의 존재 여부를 쿼리할 수 있습니다. 설정을 쿼리할 수 있는 경우 제조업체는 쿼리 가능한 옵션과 함께 필요한 PostScript 코드를 PPD 파일에 넣습니다. 이러한 쿼리는 프린터 애플리케이션의 웹 인터페이스에서 지원됩니다.
사용 가능한 프린터 장치는 PAPPL 자체 백엔드가 아닌 CUPS의 백엔드에서 검색(및 사용)됩니다. 이러한 방식으로 호환성 문제가 있는 USB 프린터에 대한 기발한 해결 방법이 사용되며(편집 가능) PostScript 출력은 소켓(일반적으로 포트 9100) 외에 IPP, IPPS(암호화됨!) 및 LPD를 통해 프린터로 전송될 수 있습니다. SNMP 백엔드를 구성할 수 있습니다(커뮤니티, 주소 범위).
비정상적인 시스템 구성이나 개인 방화벽이 있는 경우 프린터가 검색되지 않을 수 있습니다. 이러한 상황에서는 호스트 이름/IP 필드와 함께 완전히 수동으로 "네트워크 프린터" 항목을 입력하는 것이 도움이 될 수 있습니다.
이미 추가된 사용자 PPD 파일 목록의 "PPD 파일 추가" 페이지에서 프린터 응용 프로그램에 설정된 프린터에서 실제로 사용되는 파일을 표시하여 사용자가 이러한 파일을 제거하는 것을 방지합니다.
공급업체 옵션에 대한 사람이 읽을 수 있는 문자열(PAPPL의 지원 필요: 문제 #58: 현지화 지원)
국제화/현지화(PAPPL의 지원 필요: 문제 #58: 현지화 지원)
ps_status() 함수를 통한 SNMP 잉크 수준 확인(PAPPL의 지원 필요: 문제 #83: CUPS는 백엔드를 통해 IPP 및 SNMP 잉크 수준 폴링을 수행하며 PAPPL에는 이에 대한 기능이 있어야 함)
libqpdf 및/또는 libppd 없이 빌드하기 위한 컵 필터용 빌드 옵션, 전자를 사용하면 QPDF를 다운로드하고 빌드하지 않고도 이 프린터 애플리케이션의 스냅을 생성할 수 있습니다.
이 프린터 애플리케이션을 실행하고 사용하려면 Snap Store에서 간단히 설치하세요.
sudo snap install --edge ps-printer-app
그런 다음 아래 지침에 따라 설정하세요.
Snap을 직접 빌드하려면 이 저장소의 기본 디렉터리에서 다음을 실행하세요.
snapcraft snap
그러면 필요한 모든 패키지가 다운로드되고 PostScript 프린터 응용 프로그램이 빌드됩니다. 아직 적절한 릴리스가 없기 때문에 PAPPL(향후 1.0) 및 cup-filters(향후 2.0)는 GIT 리포지토리에서 직접 가져옵니다. 이로 인해 이 프린터 응용 프로그램이 갑자기 더 이상 빌드되지 않을 수도 있습니다.
참고: Ubuntu Groovy(20.10)에는 Snap을 빌드하지 못하게 하는 버그가 있습니다. Snapcraft 포럼에서 이 토론을 참조하세요. 문제는 이미 해결되었지만 아직 Groovy에 포함되지 않았습니다.
이전(예: 20.04) 또는 최신(예: 21.04) Ubuntu 버전이 작동합니다.
결과 스냅 실행을 설치하려면
sudo snap install --dangerous ps-printer-app_1.0_amd64.snap
프린터 응용 프로그램은 서버 데몬으로 자동으로 시작됩니다.
웹 인터페이스를 입력
http://localhost:8000/
웹 인터페이스를 사용하여 프린터를 추가합니다. 이름을 입력하고 검색된 프린터를 선택한 다음 제조업체와 모델을 선택합니다. 또한 설치된 액세서리, 로드된 미디어 및 옵션 기본값을 설정합니다. 액세서리 구성 및 옵션 기본값도 프린터에서 폴링될 수 있습니다.
그런 다음 PDF, PostScript, JPEG, Apple Raster 또는 PWG 래스터 파일을 인쇄하십시오.
ps-printer-app FILE
또는 CUPS, CUPS(및 컵 검색)로 인쇄하고 이 프린터 응용 프로그램으로 설정된 프린터를 드라이버 없는 IPP 프린터(IPP Everywhere 및 AirPrint)로 검색하고 처리합니다.
웹 인터페이스의 "PPD 파일 추가" 버튼을 사용하거나 PPD 파일을 수동으로 복사하여 스냅을 다시 작성하지 않고도 PPD 파일을 추가할 수도 있습니다.
sudo cp PPDFILE /var/snap/ps-printer-app/common/ppd/
PPD 파일을 수동으로 복사(또는 제거)한 후 서버를 다시 시작하거나 웹 인터페이스에서 "PPD 파일 추가" 페이지 하단에 있는 "새로 고침" 버튼을 클릭하세요. 그러면 내부 드라이버 목록에 변경 사항이 추가됩니다.
드라이버를 선택하기 위한 드롭다운의 "프린터 추가" 페이지에서 사용자가 추가한 PPD 파일은 "USER-ADDED"로 표시됩니다. 자동 드라이버 선택으로 프린터를 설정할 때 사용자가 추가한 PPD 파일이 선호됩니다.
위 명령줄의 PPDFILE
단일 PPD 파일일 수 없으며 임의 개수의 단일 PPD 파일, PPD를 포함하는 .tar.gz
파일(임의 디렉터리 구조) 및 일반적으로 /usr/lib/cups/driver
에 저장되는 PPD-gemerating 실행 파일일 수 있습니다. /usr/lib/cups/driver
. 언급된 유형의 파일을 포함하는 /var/snap/ps-printer-app/current/ppd/
에 임의의 하위 디렉터리 구조를 만들 수도 있습니다. PPD 파일을 나열하고 생성하는 것 이외의 작업을 수행하는 실행 파일을 여기에 넣지 않도록 하세요.
웹 인터페이스를 사용하면 /var/snap/ps-printer-app/current/ppd/
자체에서 개별 PPD(비압축 또는 gzip
으로 압축)만 관리할 수 있습니다. 아카이브, 실행 파일 또는 하위 디렉터리는 표시되지 않으며 적절한 업로드가 허용되지 않습니다. 이는 특히 루트 권한 없이 실행 파일을 추가하는 것을 방지합니다.
추가된 모든 PPD 파일은 PostScript 프린터용이어야 합니다. PostScript가 아닌 PPD 파일은 CUPS 드라이버용이므로 작동하려면 추가 파일이 필요하고 이러한 파일은 이 프린터 응용 프로그램에서 지원되지 않습니다. 해당 파일이 업로드되면 "PPD 파일 추가" 페이지에 경고가 표시됩니다.
보다
ps-printer-app --help
더 많은 옵션을 확인하세요.
터미널 창에서 자세한 로깅을 위해 "-o log-level=debug" 인수를 사용하십시오.
추가적인 USB 특수 규칙을 위해 /var/snap/ps-printer-app/common/usb/
에 파일을 추가할 수 있습니다. 새로운 규칙을 도입하기 위해 Snap이 업데이트될 때마다 교체되므로 빠른 테스트를 위해서만 기존 파일을 편집하세요.
SNMP 네트워크 프린터 검색을 구성하기 위해 /var/snap/ps-printer-app/common/cups/snmp.conf
파일을 편집할 수 있습니다.
또한 시스템에 PAPPL, cup-filters 2.x 및 pappl-retrofit을 설치하지 않고도 "빠르고 더러운" 빌드를 수행할 수 있습니다. PAPPL의 최신 GIT 스냅샷, cup-filters의 최신 GIT 스냅샷, pappl-retrofit의 최신 GIT 스냅샷(각각의 마스터 브랜치)이 있는 디렉터리가 필요합니다. 모두 컴파일해야 하며( ./autogen.sh; ./configure; make
) 설치할 필요가 없습니다. 또한 필요한 모든 라이브러리의 헤더 파일을 설치합니다("libcups2-dev"를 설치하면 됩니다).
ps-printer-app.c가 있는 디렉토리에서 명령줄을 실행합니다.
gcc -o ps-printer-app ps-printer-app.c $PAPPL_SRC/pappl/libpappl.a $CUPS_FILTERS_SRC/.libs/libppd.a $CUPS_FILTERS_SRC/.libs/libcupsfilters.a $PAPPL_RETROFIT_SRC/.libs/libpappl-retrofit.a -ldl -lpthread -lppd -lcups -lavahi-common -lavahi-client -lgnutls -ljpeg -lpng16 -ltiff -lz -lm -lusb-1.0 -lpam -lqpdf -lstdc++ -I. -I$PAPPL_SRC/pappl -I$CUPS_FILTERS_SRC/ppd -I$CUPS_FILTERS_SRC/cupsfilters -I$PAPPL_RETROFIT_SRC/pappl/retrofit -L$CUPS_FILTERS_SRC/.libs/ -L$PAPPL_RETROFIT_SRC/.libs/
Makefile도 있지만 시스템에 PAPPL, cup-filters 2.x 및 pappl-retrofit을 설치해야 합니다.
달리다
./ps-printer-app --help
스냅되지 않은 버전을 실행하면 기본적으로 PPD 파일이 검색됩니다.
/usr/share/ppd/
/usr/lib/cups/driver/
/var/lib/ps-printer-app/ppd/
마지막 경로는 웹 인터페이스의 "PPD 파일 추가" 페이지를 사용하여 PPD 파일을 추가할 때 사용됩니다.
대신 PPD_PATHS
환경 변수를 설정하여 다른 장소를 검색할 수 있습니다.
PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
콜론으로 구분된 임의의 경로 목록을 변수에 넣기만 하면 됩니다. 항상 "PPD 파일 추가" 페이지에서 마지막 경로가 사용됩니다. 래퍼 스크립트를 만드는 것이 좋습니다.
이 프린터 응용 프로그램은 PAPPL이 아닌 CUPS의 백엔드를 사용합니다. 즉, USB 프린터의 경우 호환성 문제에 대한 CUPS의 USB 특수 해결 방법이 사용되며 네트워크 프린터도 IPP, IPPS 및 LPD 프로토콜과 함께 사용할 수 있으며 SNMP 프린터 검색을 구성할 수 있습니다.
필요한 경우 /usr/share/cups/usb
및 /etc/cups/snmp.conf
파일의 USB Quirk 규칙을 편집할 수 있습니다.
CUPS(최소한 백엔드)가 설치되어 있는지 확인하세요.
PDF 작업을 인쇄하려면 Ghostscript도 필요합니다.
테스트 페이지 testpage.ps
에 액세스하려면 TESTPAGE_DIR 환경 변수를 사용하세요.
TESTPAGE_DIR=`pwd` PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
또는 테스트 페이지를 직접 생성하려는 경우(PostScript, PDF, PNG, JPEG, Apple Raster, PWG Raster):
TESTPAGE=/path/to/my/testpage/my_testpage.ps PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
PostScript 프린터 응용 프로그램은 Till Kamppeter의 저작권 © 2020입니다.
이는 PAPPL을 사용하는 래스터 프린터 응용 프로그램의 첫 번째 작업 모델인 HP PCL 프린터 응용 프로그램에서 파생되었습니다. 여기에서 이용 가능합니다:
https://github.com/michaelrsweet/hp-printer-app
HP PCL 프린터 응용 프로그램의 저작권은 Michael R Sweet의 2019-2020입니다.
이 소프트웨어는 GPL2/LGPL2 소프트웨어(예: 이전 버전의 CUPS)에 대한 연결을 허용하는 것을 제외하고 Apache 라이센스 버전 2.0에 따라 라이센스가 부여됩니다. 자세한 내용은 "LICENSE" 및 "NOTICE" 파일을 참조하십시오.