lpr
스크립트 내에서 사용자가 선택한 프린터에 대한 명령을 사용하여 인쇄할 특정 파일을 보냅니다 .
사용자가 사용할 프린터를 선택하는 프린터 목록에서 이 lpstat -a
명령을 사용하고 첫 번째 공백 앞의 모든 항목을 프린터 이름으로 처리합니다.
이는 작동하지만 명령의 특정 출력 형식에 크게 의존합니다 lpstat -a
. 앞으로(또는 지금은 다른 배포판에서) 출력 형식이 변경되면 스크립트가 중단될까 봐 걱정됩니다.
그렇다면 제가 사용하는 것보다 더 안전하게 설치된 모든 프린터의 이름을 얻을 수 있는 방법이 있을까요?
답변1
또한 프린터 목록이 필요하며 동일한 우려 사항이 있습니다. 위의 제안에 따라 lpstat.c의 소스를 확인했습니다. "/etc/cups/printers.conf"를 읽을 수 있도록 suid가 되길 원합니다. 그러면 안 된다는 걸 이제 깨달았어요.
대신 cupd가 실행 중인 localhost:631에 HTTP POST 요청을 보냅니다. 요청 형식은 Content-Type: application/ipp 및 요청 속성 auth-info-required 및 기타 콘텐츠입니다. 더 구체적이지 않은 이유는 비표준 인코딩을 사용하기 때문입니다(참조:http://en.wikipedia.org/wiki/Internet_Printing_Protocol)... 그래서 lpstat -a 의 출력을 구문 분석하는 것이 실제로 더 깨끗하다고 생각합니다.
답변2
컴퓨터 지원 시스템(부분적으로) GPL 라이센스가 있으므로 직접 얻을 수 있습니다.유래lpstat
(1) 그리고 자신만의 애플릿을 만듭니다(GPL 라이센스)내 프린터 목록 제공- 데이터 출력 방식을 절대 변경하지 않는 프로그램.
(1)에 있는데 cups-XX/cups/systemv/lpstat.c
거기에 있는 버전 번호를 이해할 수 없습니다.
답변3
원래 질문이 있은 지 6년이 지났지만 저는 Cups 2.2.7을 사용하고 있으며 "lpstat -a"는 여전히 첫 번째 단어에서 프린터 이름을 반환합니다. 따라서 설치된 프린터 목록을 가져오는 올바른 방법이 계속될 것이라고 가정하는 것이 안전하다고 생각합니다.