쉘 스크립트를 가상 프린터로 사용

쉘 스크립트를 가상 프린터로 사용

PDF 파일을 인수로 사용하고 추가 프린터별 옵션을 사용하여 인쇄하는 쉘 스크립트가 있습니다. 이 스크립트를 GUI에서 선택할 수 있는 가상 프린터로 추가하려면 어떻게 해야 합니까?

쉘 스크립트는 PDF 파일을 가져와 짝수 페이지를 인쇄하고 zenity를 사용하여 사용자에게 페이지를 넘기라는 메시지를 표시한 다음 홀수 페이지를 인쇄하는 수동 양면 스크립트입니다.

내 현재 작업 흐름은 다음과 같습니다.

  1. 파일->인쇄->파일에 저장->tmp.pdf
  2. my_duplex_script tmp.pdf
  3. rm tmp.pdf

그것을 만드는 방법이 있습니까?

  1. 파일->인쇄->my_script_as_virtual_printer

참고: 이 작업은 Linux mint 13 cinnamon에서 수행되었습니다. 나는 그것을 시도했지만 gnome-manual-duplex그것은 나에게 효과가 없습니다.


PDF 파일로 인쇄할 수 있는 GUI 대화 상자 표준 GTK 인쇄 대화상자

my_duplex_script

#!/bin/bash

lp_args=
while getopts o: opt
do
    case "$opt" in
        o)  lp_args="$lp_args -o $OPTARG" ;;
        \?) echo >&2 Invalid argument; exit 1 ;;
    esac
done
shift `expr $OPTIND - 1`

file=$1
page_count=$(pdfinfo "$file" | grep Pages | awk '{print $2}')
is_odd=`expr $page_count % 2`

if [ $is_odd -eq 1 ]
then
    #outputting blank
    echo | lp -s -t "$file"-blank
fi

#printing even reversed
lp -s -o page-set=even -o outputorder=reverse $lp_args -t "$file"-even "$file"

if zenity --question --text="Flip and reinsert the entire stack when printing has finished." --ok-label="Proceed" --cancel-label="Cancel"
then
    #printing odd reversed
    lp -s -o page-set=odd -o outputorder=reverse $lp_args -t "$file"-odd "$file"
else
    echo >&2 User abort
    exit 1
fi

exit 0

답변1

나는 이것을 시도한 적이 없지만 다음과 같은 도구가 있습니다.tea4cups인쇄를 수행하기 위해 스크립트에 프리훅을 구현할 수 있는 것 같습니다. 그런 다음 이 인쇄를 취소하고 컵이 실제로 실제 프린터로 가는 대신 스크립트가 인쇄되도록 허용할 수 있습니다.

발췌

가능성은 무궁무진합니다:

  • CUPS에서는 동일한 작업을 여러 프린터에 동시에 보낼 수 없습니다.
  • 모든 인쇄 작업을 자동으로 PDF로 보관합니다.
  • 중복 인쇄 작업 억제(샘플 구성 파일에 간단한 예가 표시되어 있음)
  • 15분만에 인쇄회계솔루션 만들기 (네, 맞습니다)
  • 등...

Tea4cups는 다음과 같은 편의를 제공합니다.

Tea4CUPS는 명령을 시작하는 세 가지 방법을 제공합니다.

  • 필터: 필터는 입력 데이터가 프린터로 전송되거나 아래 정의된 프리후크 및 포스트후크에서 사용되기 전에 입력 데이터를 수정할 수 있습니다. 현재 인쇄 대기열당 하나의 필터를 정의할 수 있습니다.
  • prehooks: 인쇄 작업이 실제 프린터로 전송되기 전에 시작되도록 보장됩니다. -1을 종료하는 프리후크는 인쇄 작업을 취소할 수 있습니다. 특정 인쇄 대기열에 대해 원하는 만큼의 프리후크를 정의할 수 있습니다.
  • posthooks: 작업이 이전에 prehook에 의해 취소되지 않는 한 인쇄 작업이 실제 프린터로 전송된 후에 시작이 보장됩니다. 특정 인쇄 대기열에 대해 원하는 수의 포스트후크를 정의할 수 있습니다.

답변2

이 스크립트를 GUI에서 선택할 수 있는 가상 프린터로 추가하려면 어떻게 해야 합니까?

가상 프린터를 추가하려면 /etc/printcap. 프린트 캡익숙해지는 데 시간이 걸립니다.

이를 수행하는 방법의 예가 여기에 나와 있습니다.Samba의 PDF 서비스 사용:

# /etc/printcap
# PDF Service entry

lp|pdf|PDF Printer:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/pdf:\
        :af=/var/spool/lpd/pdf/acct:\
        :mx#0:sh:\
        :if=/usr/bin/smbprint:

/usr/bin/smbprint스크립트는 인쇄 필터 역할을 합니다. 프린터 자체는 /dev/null.

설치해야 할 수도 있지만 cups-bsd일반적으로 기본 구성입니다.

답변3

파티에 늦었지만 똑같은 일을 하고 싶지만 다른 해결책을 찾지 못했습니다.

제가 어떻게 해결했는지 여기에 적어보겠습니다. 어쩌면 다른 사람이 이 솔루션이 유용하다고 생각할 수도 있습니다.

  • 인쇄용 파일을 캡처하기 위한 머그 필터를 만들었습니다.
  • 파일을 인쇄하기 위한 백엔드를 만들었습니다.
  • 훌륭하고 간단한 설치 프로그램을 만들었습니다.

소스 코드는 github에 있습니다: https://github.com/dentys03/manual_duplex_linux

모든 HP 프린터에서 작동합니다. 다른 프린터에도 적응하기 쉬울 것 같아요.

관련 정보