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