
때때로 랩톱에서 작업할 때 프린터에 연결되어 있지 않기 때문에 나중에 인쇄하기 위해 몇 가지 문서를 대기열에 추가하고 싶을 때가 있습니다.
그러나 실제 프린터 대기열은 이를 위해 설계되지 않았습니다. 그들은 즉시 문서를 인쇄하려고 시도하고 네트워크에 연결되자마자 갑자기 인쇄를 시작합니다. 이는 일반적으로 내가 원하는 작업이 아닙니다. 더욱이 때로는 대기열에 있는 문서의 순서를 변경하고 싶은데, 특히 일부 문서가 인쇄를 시작한 후에는 쉽지 않습니다.
또한 프린터에 용지나 토너가 부족하여 문서를 다른 프린터로 다시 인쇄하고 싶은 경우 인쇄가 실패하는 경우도 있습니다. 예를 들어 CUPS
또는 의 경우 이는 간단하지 않습니다 system-config-printer
. 일반적으로 돌아가서 PDF 리더를 다시 열고 다시 시작해야 합니다. 내가 아는 PDF 리더 중 어느 것도 나중에 인쇄할 문서 목록을 유지하는 기능을 제공하지 않지만 이는 내가 모르는 어딘가에 PDF 리더의 숨겨진 기능일 수 있습니다.
어쨌든, 제가 하고 싶은 일은 다음과 같습니다.
- 인쇄하려는 PDF 목록을 지정하세요.
- 전체 목록을 잃지 않고 애플리케이션을 닫거나 재부팅할 수 있도록 해당 목록을 디스크에 보관하세요.
- 실제로 해당 프린터에 연결되어 있지 않은 상태에서 미리 보내려는 프린터를 지정하세요.
- 색상, 양면, 매수 등의 인쇄 옵션을 지정합니다.
- 나중에 해당 프린터 할당과 인쇄 옵션을 변경하세요.
- 버튼을 누르거나 명령을 실행하여 실제로 문서를 인쇄할 때까지 기다리십시오.
- 인쇄가 작동하지 않거나 나중에 다시 인쇄하려는 경우를 대비하여 이미 인쇄된 문서 목록을 별도로 보관하세요.
쉘 스크립트, 텍스트 파일의 경로 목록을 사용하여 무언가를 해킹할 수 있다는 것을 알고 있지만 lpr
이 문제는 이미 더 강력하고 우아한 방식으로 해결되었다는 느낌을 지울 수 없습니다.
보너스 포인트:
- 문서를 PDF 리더에서 열 필요는 없습니다. 나는 그것들을 찾아보는 것이 아니라 인쇄하고 싶습니다. 그리고 그것들이 동일한 애플리케이션일 필요는 없습니다.
- 목록이 두 개 이상입니다.
- Postscript, DjVu 및 기타 페이지 설명 형식에도 사용할 수 있습니다.
- 파일 관리자에서 끌어서 놓습니다.
어떤 제안이 있으십니까?
답변1
제가 하는 일은 다음과 같습니다. 요청하신 것만큼 다재다능하지는 않지만 거의 괜찮게 작동합니다. 모든 프린터를 정의해야 하며 다음 두 스크립트가 필요합니다.
stop_printers
:#!/bin/bash -f # allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`) for i in ${allp[@]}; do echo -n Printer $i: cupsdisable "$i" echo " " paused. done
start_printers
:#!/bin/bash -f # allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`) for i in ${allp[@]}; do echo -n Printer $i: cupsenable "$i" echo " " restarted. done
이를 경로(예 ~/bin
: )에 넣고 를 사용하여 실행 가능하게 만들어야 합니다 chmod +x
.경고: 이름에 공백이 있는 프린터가 없습니다. 이 경우 스크립트는 테스트되지 않습니다. (하지만 쉘 스크립트 전문가 중 한 명이 스크립트를 즉시 수정할 것이라고 확신합니다 ;-)...)
이제 다음을 발행할 수 있습니다.
[romano:~] % stop_printers
Printer PDF: paused.
Printer ColorDEA: paused.
Printer Deskjet_6980: paused.
Printer fotocop5: paused.
원하는 곳 어디에서나 인쇄할 수 있으며 프린터는 일시 중지됩니다.
대기열을 볼 수 있습니다.
[romano:~] % lpq -PDeskjet_6980
Deskjet_6980 is not ready
Rank Owner Job File(s) Total Size
1st romano 439 Bones_3+RG.pdf — Flesh depth 125952 bytes
(AFAIK, 인쇄 대기열은 재부팅 후에도 지속됩니다.) 그리고 인쇄하고 싶을 때:
[romano:~] % start_printers
Printer PDF: restarted.
Printer ColorDEA: restarted.
Printer Deskjet_6980: restarted.
Printer fotocop5: restarted.
lprm
필요한 경우 를 사용하여 작업을 제거할 수 있습니다. lpr
명령줄을 통해 문서를 대기열에 추가하고 다른 "목록"을 원하는 경우 동일한 프린터를 다른 이름으로 여러 번 정의하는 것을 금지하는 사람은 없습니다.
cupsenable <printername>
각 프린터를 수동으로 다시 시작할 수도 있습니다. 프롬프트에서 실행하기만 하면 됩니다 .
이 솔루션으로 할 수 없는 일은 나중에 인쇄 옵션을 변경하는 것입니다. 이를 위해서는 문서를 대기열에서 빼고 다시 대기열에 넣어야 합니다.
답변2
내 패키지(뻔뻔한 플러그),듀플렉스원하는 작업 중 일부를 수행하고 자신의 버전을 롤링하는 데 유용할 수 있는 bash 기능을 포함합니다. (bash로 코딩되어 있으므로 수정하기가 상대적으로 쉬울 것이며 가능하다면 도와드리겠습니다.)
이는 비양면 프린터에서 양면 인쇄를 에뮬레이트하도록 설계되었으며 자체적으로 간단한 인쇄 대기열 관리를 구현합니다. gui 및 cli 인터페이스가 모두 있습니다.
현재 버전은 양면 인쇄만 가능하며 비양면 프린터에서만 작동합니다. 그러나 양면 에뮬레이션 소프트웨어 없이 기본적으로 프린터 및 대기열 관리에 불과한 양면 하드웨어가 있는 프린터를 처리하는 새 버전이 작업 중입니다. (누군가 프로젝트 등을 통해 나에게 직접 연락하려는 경우 이미 작동하는 스크립트의 알파 버전을 사용할 수 있습니다.)
시스템은 현재 기본 프린터로 인쇄하지만 dplx 및 duplex 스크립트는 lp에 전달되는 추가 인수를 허용하고 프린터 및 기타 속성과 같이 lp가 이해하는 모든 옵션을 설정하는 데 사용할 수 있습니다.
시스템은 현재 PDF, PostScript 및 일반 텍스트 파일을 처리합니다.
단 한가지는 그럴 것이다~ 아니다do는 다음의 파일로 인쇄 옵션을 사용하여 생성된 파일을 인쇄합니다.이내에아크로레드. 이러한 파일은 lp에서 작동하지 않으며 문제가 무엇인지 파악하기 위해 업스트림 사람들의 관심을 끌 수 없었습니다.
개인적으로 저는 프린터를 사용할 수 있는 경우에도 거의 모든 것을 "오프라인"(대부분의 응용 프로그램이 지원하는 파일로 인쇄 옵션 사용)으로 인쇄합니다. 내가 하고 있는 일에 집중하는 데 도움이 됩니다. 나중에 적절한 중단점에 도달하면 일괄 작업을 인쇄합니다.
인쇄 대기열을 갖는 것은 다시 생성할 필요 없이 무언가의 또 다른 복사본을 인쇄하려는 경우에도 매우 유용하며 용지 걸림이나 토너 부족과 같은 프린터 오류를 처리하는 데 필수적입니다.
답변3
이 문제에 대한 완전한 해결책은 없는 것 같습니다. 그러나 여기에 제가 다음 .bashrc
과 유사한 기능을 추가했습니다.르마노의 답변위에서는 자동 완성 기능이 추가되어 더욱 편리해졌습니다.
all-printers() {
if [ "$*" = "" ]
then
# Print usage."
printf "Usage:\n"
printf "all-printers start\n"
printf "all-printers stop\n"
return 1
elif ! [ "$1" = "stop" -o "$1" = "start" ]
then
printf "Unrecognized command: $1\n"
return 1
fi
cut -f 1 -d '|' /etc/printcap |
grep -v '^#' |
while read printer_name
do
if [ "$1" = "stop" ]
then
cupsdisable "$printer_name"
printf "$printer_name stopped.\n"
elif [ "$1" = "start" ]
then
cupsenable "$printer_name"
printf "$printer_name started.\n"
fi
done
}
complete -W 'stop start' all-printers