나는 네트워크로 연결된 잉크젯 프린터( HP all-in-one photosmart 5510
)를 가지고 있으며 현재 잉크가 마르지 않도록 프린터에 작은 작업을 보내도록 주기적으로 알려주는 간단한 스크립트를 가지고 있습니다. 저는 Ubuntu를 사용하고 있으며 프린터가 프린터 GUI에서 네트워크 프린터로 추가되었습니다.
또한 내 네트워크에는 항상 켜져 있는 작은 Linux 상자가 있는데, 집에 없을 때에도 완료할 수 있도록 이 프로세스를 cronjob으로 자동화하고 싶습니다.
Bash 스크립트에서 이미지(jpg)를 인쇄하는 좋은 방법이 있습니까? 어떻게든 프린터에서 작업 기록을 쿼리하는 것도 가능합니다(예: 마지막 작업이 인쇄된 시기를 확인하고 x일보다 오래된 경우 인쇄를 위해 문서를 보냅니다).
답변1
PDF는 한동안 표준 인쇄 형식이었습니다. PDF 파일을 한 번에 준비하세요. 당신은 그것을 사용할 수 있습니다convert
명령은 다음에서 비롯됩니다.이미지 마술사스위트(어느 쪽이든원래또는그래픽 마술사변형).
convert foo.jpg /path/to/foo.pdf
인쇄 로그인을 찾을 수 있습니다 /var/log/cups/page_log
. 관리자 계정만 읽을 수 있습니다. 이전 로그는 다음과 같은 이름의 파일 /var/log/cups/page_log.0
에 있습니다./var/log/cups/page_log.1.gz
로그 항목다음과 같습니다.
printername 1234 julumme [date] 42 1 - localhost filename.pdf
여기서는 프린터 이름과 날짜만 고려합니다. 로그 항목은 시간순으로 정렬되므로 원하는 프린터에 해당하는 마지막 항목을 가져와야 합니다. 아래는 이를 수행하고 날짜를 현재 날짜와 비교하여 지난 7일 이내에 인쇄된 내용이 없으면 파일을 인쇄하는 쉘 코드 조각입니다. photosmart
프린터에 지정한 이름으로 바꾸십시오 . 경고: 테스트되지 않은 코드입니다.
#!/bin/sh
printer_name="photosmart"
last_date=$(
{ zcat /var/log/page_log.1.gz;
cat /var/log/page_log.0 /var/log/page_log; } 2>/dev/null |
awk '
$1 == "photosmart" {sub(/\].*/, ""); sub(/.*\[/, ""); last_date = $0}
END {print last_date}
')
if [ -n "$last_date" ]; then
seconds_since_last_printing=$(($(date -d "$last_date" +%s) - $(date +%s)))
if [ $seconds_since_last_printing -lt $((7*24*60*60)) ]; then
# There was a recent print job
exit
fi
fi
lp -d "$printer_name" /path/to/foo.pdf
매일(또는 빈도가 낮은) 크론 작업에서 이 스크립트를 실행합니다. CUPS 구성을 변경하지 않는 한 일반 사용자는 로그 파일을 읽을 수 없으므로 루트로 실행해야 합니다.
흑백 및 컬러 작업을 인쇄하기 위해 다른 프린터 별칭을 사용하는 경우 로그에 다른 별칭이 표시됩니다. 그러나 옵션을 명시적으로 전달하면 색상 별칭을 사용하여 흑백 작업을 인쇄할 수 있고 그 반대로도 가능하므로 이는 신뢰할 수 있는 테스트가 아닙니다.
답변2
프린터가 설정되어 있고 우분투 상자가 프린터를 사용하고 있다고 가정하면 cups
확인하고 싶을 수도 있습니다.명령줄 인쇄 및 옵션. cronjob과 결합하면 이미지 인쇄가 간단한 작업이 됩니다.