วิธีการเพิ่มเครื่องพิมพ์ที่ปลอมเป็นตัวแทนเป็นโมฆะใน CUPS


12

ฉันกำลังเขียนซอฟต์แวร์ที่รองรับเครื่องพิมพ์หลายเครื่อง ในการทดสอบฉันต้องเพิ่มเครื่องพิมพ์หลายเครื่องในเซิร์ฟเวอร์ CUPS ของฉัน ฉันจะทำสิ่งนั้นได้อย่างไร

ฉันต้องการเพิ่มเครื่องพิมพ์ปลอมสองสามตัวที่จะส่งงานไปยัง / dev / null โดยตรง ด้วยวิธีนี้ฉันสามารถดูรายการ "งานที่เสร็จสมบูรณ์" ในอินเตอร์เฟส CUPS และสังเกตว่าซอฟต์แวร์ของฉันใช้เครื่องพิมพ์ที่ถูกต้องสำหรับแต่ละงานหรือไม่


ไม่ถูกต้อง "lpadmin -p lp0 -E -v / dev / null -m raw"
Ashika Umanga Umagiliya

1
ดูยังสร้างหุ่นเครื่องพิมพ์
Wilfred Hughes

คำตอบ:


11

ทางออกหนึ่งคือการติดตั้งถ้วยรูปแบบไฟล์ PDF เพิ่มเครื่องพิมพ์เสมือนที่เขียนไฟล์ PDF มีบทเรียนมากมายบนเว็บเกี่ยวกับวิธีการติดตั้งและกำหนดค่า ตั้งแต่ผมใช้ Gentoo ฉันได้อ่านGentoo-วิกิพีเดียซึ่งกล่าวถึงSabayon วิกิพีเดีย

ถ้วยรูปแบบไฟล์ PDFเครื่องพิมพ์เสมือนมีแฟ้มการกำหนดค่าใน/etc/cups/cups-pdf.confและโดยค่าเริ่มต้นไฟล์ PDF /var/spool/cups-pdf/${USER}ทั้งหมดจะถูกเขียนไปยัง

(หมายเหตุ: บน Ubuntu มันเขียนถึง ~ / PDF /)

มีข้อ จำกัด เล็กน้อยแม้ว่า:

  • เนื่องจากมีไฟล์กำหนดค่าเพียงไฟล์เดียวเครื่องพิมพ์ PDF หลายเครื่องจึงบันทึกลงในไดเรกทอรีเดียวกัน

  • ไม่สามารถพิมพ์ข้อมูล "ดิบ" (โดยใช้ตัวอย่างlpr -o raw) แม้แต่การส่งไฟล์ PDF ในฐานะงานดิบจะไม่ทำงาน งานพิมพ์แบบ Raw จะสร้างไฟล์ PDF เปล่าที่มีเพียงหน้าเปล่า

แม้จะมีข้อ จำกัด เหล่านี้มันก็ทำงานได้อย่างสมบูรณ์แบบสำหรับความต้องการของฉัน


เชิงอรรถ: หากผู้ใช้ใช้ Gnome หรือพิมพ์ผ่านแอพพลิเคชั่น GTK + แสดงว่ามีเครื่องพิมพ์หลอก "Print to File" อยู่ในกล่องโต้ตอบการพิมพ์ ดังนั้นทำไมผู้ใช้ยังต้องการเพิ่มเครื่องพิมพ์ PDF เสมือน นี่คือสาเหตุบางประการ:

  • "Print to File" นั้นเฉพาะกับ GTK + และไม่สามารถใช้ได้กับแอปพลิเคชันที่ไม่ใช่ GTK + (อาจ KDE มีคุณสมบัติคล้ายกัน แต่ฉันไม่แน่ใจ)
  • มันเป็นไปได้ที่จะสร้าง PDF จาก "แอปพลิเคชัน" Flash ที่ออกแบบมาสำหรับการพิมพ์ ยกตัวอย่างเช่นPocketMod
  • การเพิ่มเครื่องพิมพ์เสมือนลงใน CUPS ทำให้สามารถทดสอบการพิมพ์โดยใช้เชลล์สคริปต์หรือซอฟต์แวร์อื่น ๆ ที่พูดกับ CUPS โดยตรง สิ่งนี้มีประโยชน์เป็นพิเศษสำหรับนักพัฒนาในขณะที่ทดสอบแอปพลิเคชันของพวกเขา
  • เป็นไปได้ที่จะ "แบ่งปัน" เครื่องพิมพ์เสมือนนี้กับเครือข่ายท้องถิ่น ไม่มีประโยชน์อย่างแน่นอน แต่เป็นไปได้
  • เป็นไปได้ที่จะแนบคำสั่งหลังการประมวลผลที่จะดำเนินการทันทีหลังจากไฟล์ PDF ได้รับการบันทึก

10

ฟอรัม Cups มีคำตอบที่สมบูรณ์ / ถูกต้องมากขึ้นสำหรับคำถามนี้

คำตอบคือควรตั้งค่าอุปกรณ์ URI เป็นไฟล์: / dev / null

ดังนั้นในการตั้งค่า Ubuntu ของฉัน:

  • อุปกรณ์ URI: ไฟล์: / dev / null
  • ยี่ห้อและรุ่น: Local Raw Printer

ซึ่งเหมาะกับฉันอย่างสมบูรณ์แบบ

ฉันค้นหาฟอรัม Cups อีกครั้งและพบสิ่งนี้:

Commandline Null Printer Setup ในฟอรัม Cups

ใน cupsd.conf ของคุณ:

FileDevice yes

ตั้งค่าเครื่องพิมพ์

lpadmin -p nowhere -E -v file:/dev/null

เครื่องพิมพ์ทดสอบ

who |lp -d nowhere

ฉันแค่ดูที่ผลงานพิมพ์ของฉันตอนนี้: รายละเอียดเล็ก ๆ น้อย ๆ สีสดใสที่มันธรรมดากระโดดออกมาที่หน้าฉัน ... เดี๋ยวก่อนเดี๋ยวก่อน ....
Andrew Russell

ขอขอบคุณ. ฉันต้องการเครื่องพิมพ์จำลองใน Virtual Machine เพื่อจับภาพหน้าจอคำแนะนำ :)
njallam

ขอบคุณ สิ่งนี้ได้ผลwineเช่นกัน
Tinti

7

คุณสามารถสร้างเครื่องพิมพ์ที่ส่งออกไป/dev/nullด้วยlpadmin:

$ sudo lpadmin -p myprinter -E -v file:///dev/null

สิ่งนี้จะถูกเขียนถึง/etc/cups/printers.confแต่คุณยังสามารถดูเครื่องพิมพ์ด้วยlpstat:

$ sudo lpstat -s
myprinter accepting requests since Thu 22 Jan 2015 11:04:46 AM GMT
system default destination: myprinter
device for myprinter: ///dev/null

โปรดทราบว่าคุณอาจจำเป็นต้องเปิดการใช้งานใน FileDevice /etc/cups/cupsd.conf บนลินุกซ์ distros

ในการทำให้เครื่องพิมพ์ใหม่ของคุณเป็นค่าเริ่มต้นให้ใช้lpoptions:

$ sudo lpoptions -d myprinter

จะลบออกได้อย่างไร?
ริชาร์ด

@Richard ใช้งานlpadmin -x myprinterหรือเว็บอินเตอร์เฟส
Torkel Bjørnson-Langen

2

ippserverหนึ่งของการแก้ปัญหาที่ดีที่สุดคือการใช้งาน มันมาพร้อมกับCUPSv2.2.2และสูงกว่า หรือคุณจะได้รับโครงการจากที่นี่: IPP การใช้งานตัวอย่าง

ตามคำอธิบายในหน้าคู่มือ :

ippserver เป็นเซิร์ฟเวอร์ Internet Printing Protocol (IPP) ที่เรียบง่ายซึ่งเป็นไปตามข้อกำหนด IPP ทุกหนทุกแห่งและข้อมูลจำเพาะโครงสร้างพื้นฐานส่วนขยาย (INFRA) ของ IPP ที่ใช้ร่วมกัน มันสามารถใช้เป็นเซิร์ฟเวอร์การพิมพ์แบบสแตนด์อโลนและ / หรือเซิร์ฟเวอร์โครงสร้างพื้นฐานขั้นพื้นฐานมากระหว่างไคลเอนต์ IPP มาตรฐานและผู้รับมอบฉันทะ IPP ที่สอดคล้องกับข้อกำหนดของ INFRA

หากต้องการใช้งานสิ่งที่คุณต้องทำคือเรียกใช้ippserver "My cool printer"และจะสร้างเครื่องพิมพ์เสมือนพร้อมชื่อMy cool printerให้คุณ มันทำงานเหมือนเว็บเซิร์ฟเวอร์และฟังพอร์ตเฉพาะ

ippserver "My other cool printer" -p 8888ในกรณีที่คุณต้องการเครื่องพิมพ์หลายเครื่องคุณสามารถเรียกใช้เซิร์ฟเวอร์ในพอร์ตหลายใช้

คุณสามารถระบุคุณลักษณะเครื่องพิมพ์โดยใช้ไฟล์แอตทริบิวต์ ตัวอย่างเช่นเครื่องพิมพ์ของคุณรองรับงานพิมพ์คุณภาพสูงที่เป็นค่าเริ่มต้นคุณสามารถเพิ่มคุณสมบัติต่อไปนี้ในไฟล์คุณสมบัติ:

ATTR enum print-quality-default high

และรันเซิร์ฟเวอร์โดยใช้:

ippserver "My high quality cool printer" -a attributes-file.txt

อ้างอิง:

  1. ตัวอย่าง IPP ของ PWG
  2. CUPS ipptoolfile man page

1

นำมาจากhttp://inai.de/linux/adm_virtualprinter :

เครื่องพิมพ์เสมือนใน CUPS

ในการสร้างเครื่องพิมพ์ใน CUPS ที่ส่งข้อมูลไปที่ไหน (เช่น /dev/null) มีหลายวิธี หน้านี้ใช้socket:// วิธีการ

ตั้งค่า xinetd ก่อน

สิ่งที่เราต้องการคือบริการ TCP Discard ที่พอร์ต 9 Xinetd มีในตัวดังนั้นเราจึงสามารถใช้มันได้ ตรวจสอบให้แน่ใจว่าคำจำกัดความต่อไปนี้มีอยู่ในไฟล์กำหนดค่าของ xinetd ซึ่งโดยปกติ /etc/xinetd.d/discardแล้ว ควรมีบริการดังนี้:

    บริการทิ้ง
        ประเภท = ภายใน
        id = ยกเลิกการสตรีม
        socket_type = กระแส
        โปรโตคอล = tcp
        user = root
        รอ = ไม่
        ปิดการใช้งาน = ไม่
        FLAGS = IPv6 IPv4 
รันrcxinetd reloadเพื่ออ่านไฟล์คอนฟิกูเรชันอีกครั้งและเปิดใช้งานdiscardเซอร์วิสใหม่ หรือใช้rcxinetd startหาก xinetd ไม่ได้ใช้งานอยู่

เครื่องพิมพ์ CUPS

ตอนนี้ไปที่ส่วนหน้าของเว็บ CUPS และเพิ่มเครื่องพิมพ์ใหม่ ในฐานะปลายทางให้ใช้socket://localhost:9/เป็นเครื่องพิมพ์ให้เลือกสิ่งที่มีลักษณะเด่นเช่น "HP 2500C Foomatic / pcl3" นั่นคือทั้งหมดที่มีให้มัน

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