การใช้เชลล์สคริปต์เป็นเครื่องพิมพ์เสมือน


10

ฉันมีเชลล์สคริปต์ที่ใช้ไฟล์ 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แต่ใช้ไม่ได้สำหรับฉัน


กล่องโต้ตอบ GUI ซึ่งฉันสามารถพิมพ์เป็นไฟล์ PDF ได้ กล่องโต้ตอบการพิมพ์ 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

คำตอบ:


2

ฉันไม่เคยลองสิ่งนี้มาก่อน แต่มีเครื่องมือหนึ่งtea4cupsซึ่งดูเหมือนว่าคุณสามารถใช้ prehook กับสคริปต์ของคุณซึ่งจะทำการพิมพ์ จากนั้นคุณสามารถยกเลิกการพิมพ์นี้และไม่ได้ไปที่เครื่องพิมพ์จริงผ่านทางถ้วยทำให้สคริปต์ของคุณทำการพิมพ์แทน

สิ่งที่สกัดมา

ความเป็นไปได้ไม่มีที่สิ้นสุด:

  • ส่งงานเดียวกันไปยังเครื่องพิมพ์หลายเครื่องในเวลาเดียวกันซึ่งไม่สามารถทำได้ด้วย CUPS
  • จัดเก็บ PDF ของงานพิมพ์ทั้งหมดโดยอัตโนมัติ
  • ห้ามพิมพ์งานซ้ำ (ตัวอย่างง่าย ๆ แสดงในไฟล์กำหนดค่าตัวอย่าง)
  • สร้างวิธีแก้ไขปัญหาการพิมพ์บัญชีใน 15 นาที (ใช่นี้เป็นจริง)
  • ฯลฯ ...

Tea4cups ให้สิ่งอำนวยความสะดวกดังต่อไปนี้:

Tea4CUPS มีสามวิธีในการเรียกใช้คำสั่ง:

  • ตัวกรอง: ตัวกรองสามารถแก้ไขข้อมูลอินพุตก่อนที่จะถูกส่งไปยังเครื่องพิมพ์หรือทำให้พร้อมใช้งานสำหรับ pre และ post hooks ที่กำหนดไว้ด้านล่าง ปัจจุบันสามารถกำหนดตัวกรองเดียวได้ต่อคิวการพิมพ์
  • prehooks: สิ่งเหล่านี้รับประกันว่าจะเปิดตัวก่อนที่งานพิมพ์จะถูกส่งไปยังเครื่องพิมพ์จริง การอุ่นล่วงหน้าใด ๆ ที่ออกจาก -1 สามารถยกเลิกงานพิมพ์ได้ จำนวนอุ่นล่วงหน้าใด ๆ ที่สามารถกำหนดสำหรับคิวการพิมพ์ที่เฉพาะเจาะจง
  • posthooks: สิ่งเหล่านี้รับประกันว่าจะเปิดตัวหลังจากงานพิมพ์ได้ถูกส่งไปยังเครื่องพิมพ์จริงนอกเสียจากว่างานก่อนหน้าถูกยกเลิกโดยอุ่น จำนวน Posthooks ใด ๆ ที่สามารถกำหนดสำหรับคิวการพิมพ์เฉพาะ

2

ฉันจะเพิ่มสคริปต์นี้เป็นเครื่องพิมพ์เสมือนที่สามารถเลือกได้จาก GUI ได้อย่างไร

/etc/printcapการโฆษณาเครื่องพิมพ์เสมือนเพียงแก้ไข สิ่งนี้ไม่ใช่เรื่องง่ายเพราะไวยากรณ์ของ PRINTCAPจำเป็นต้องคุ้นเคย

ตัวอย่างวิธีการแสดงให้เห็นที่นี่บริการ 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แต่บ่อยครั้งที่มันเป็นค่าเริ่มต้น


โปรดทราบว่าprintcapเป็นไฟล์การกำหนดค่าสำหรับ BSD lpr หรือ lprNG ไม่ใช่สำหรับ CUPS ซึ่งเป็นมาตรฐานแบบพฤตินัยทุกวันนี้และเป็นมาตรฐานใน Mint
Gilles 'หยุดความชั่วร้าย'

ดังนั้นฉันพูดถึงcups-bsdแพคเกจซึ่งยังมีอยู่ใน Mint โดยค่าเริ่มต้นติดตั้งและได้รับการสนับสนุนเป็นอย่างดี cups-bsdไม่ใช่ lprng! มันเป็นเพียงเสื้อคลุมที่ให้การทำงานของการพิมพ์ BSD สำหรับถ้วยเพื่อสนับสนุนแอปพลิเคชันที่ใช้lprสำหรับการพิมพ์ (เช่น xpdf)

0

ไปงานปาร์ตี้สาย แต่ฉันต้องการทำสิ่งเดียวกันและฉันไม่พบวิธีแก้ปัญหาอื่น ๆ

ฉันจะเขียนที่นี่ว่าฉันจะแก้ไขมันได้อย่างไรบางทีคนอื่นอาจพบว่ามีประโยชน์

  • ทำตัวกรองสำหรับถ้วยเพื่อจับไฟล์ที่จะพิมพ์
  • ทำแบ็กเอนด์เพื่อพิมพ์ไฟล์
  • ทำโปรแกรมติดตั้งที่ดีและใช้งานง่าย

ซอร์สโค้ดอยู่บน github: https://github.com/dentys03/manual_duplex_linux

ควรทำงานกับเครื่องพิมพ์ HP เครื่องใดก็ได้ ปรับตัวได้อย่างง่ายดายสำหรับเครื่องพิมพ์อื่น ๆ ฉันเดา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.