CUPS로 전송된 인쇄 작업의 매개변수를 보려면 어떻게 해야 합니까?

CUPS로 전송된 인쇄 작업의 매개변수를 보려면 어떻게 해야 합니까?

PDF 파일을 인쇄해야 하는 프로그램을 작성 중입니다 lp. PDF 뷰어와 GUI를 사용하여 파일을 인쇄할 수 있지만 lp사용하는 데 문제가 있습니다. 명령에서 사용할 수 있도록 PDF 뷰어가 CUPS에 보내는 옵션이 무엇인지 정확히 알고 싶지만 lpCUPS 인터페이스에서는 이 작업을 수행할 수 있는 방법이 없습니다. 가능합니까?

답변1

예를 들어 명령줄에서 PDF 뷰어를 실행하는 방법을 알고 있다면 xpdf my.pdf다음 명령을 대신 사용하세요.

strace -f -e execve xpdf my.pdf

그러면 다음과 같은 줄이 출력됩니다.

execve("/usr/bin/lp", ["lp", "-abc", "my.pdf"], ...

이는 배열에 표시된 매개변수와 함께 실행 중인 명령을 보여줍니다 [,,,].

명령줄에서 뷰어를 실행할 수 없는 경우 프로세스 ID(사용 ps fax또는 유사)를 찾고 2519인 경우 다음을 사용하여 strace를 연결합니다.

strace -f -e execve -p 2519

비슷한 결과가 나와야 합니다. control-cstrace를 종료하려면 입력하세요 .

이는 실행을 표시하지 않을 수 있지만 lp필요한 경우 strace에 수행 중인 작업을 더 많이 표시하도록 요청할 수 있습니다.

답변2

CUPS는 작업의 모든 옵션(및 메타데이터)을c- 파일(제어 파일)은 실제 스풀 데이터와 함께 전송됩니다.d- 파일 입력/var/스풀/컵/.

제어 파일의 이름은 다음과 같습니다.cNNNNNN, 여기서 NNNNNN은 CUPS 작업 ID를 나타냅니다.

나는 항상 이것을 알고 있었습니다. 어제 이 파일들을 자세히 살펴봐야 했지만 바이너리로 인코딩되어 있기 때문에 strings간단히 실행해도 충분한 결과를 얻을 수 없었습니다.

처음에 StackOverflow에 관련 질문을 했는데, 그러다가 c 파일을 파싱할 수 있는 도구를 찾았습니다. CUPS 소스 코드에 있지만 기본적으로 빌드되지 않으므로 심지어 가장 괴짜 CUPS 사용자에게도 거의 보이지 않습니다(그리고 Linux 배포 패키저에서도 빌드되지 않습니다).

그것의 이름은testipp.

이를 빌드하는 방법과 StackOverflow에서 사용하는 방법을 설명했습니다.

답변3

CUPS error_log파일(보통 다음 위치에 있음) 에 접근할 수 있는 경우/var/log/cups/) 및 CUPS가 LogLevel debug해당 설정에 있는 경우(/etc/cups/cupsd.conf파일), 문자열이 포함된 줄을 찾아 각 작업이 CUPS에 전달하는 명령줄 매개변수를 확인할 수 있습니다 argv[5].

argv[5]CUPS가 각 필터 명령줄의 다섯 번째 인수에 표시하는 이러한 모든 매개 변수를 포함합니다. 그 전에는 같은 줄에 해당 작업 ID가 로 인쇄되어 있는 것을 볼 수 있습니다 [Job NNNNNN].

관련 정보