โครงการ Linux Foundation

หน้านี้มีรายละเอียดโครงการงานเขียนเชิงเทคนิคที่ได้รับการยอมรับใน Google Season of เอกสาร

สรุปโปรเจ็กต์

องค์กรโอเพนซอร์ส
The Linux Foundation
นักเขียนเชิงเทคนิค:
PIYUSHgoyal16
ชื่อโปรเจ็กต์:
บทแนะนำและหลักเกณฑ์การออกแบบสำหรับไดรเวอร์เครื่องพิมพ์/เครื่องสแกนในแอปพลิเคชันเครื่องพิมพ์
ระยะเวลาของโปรเจ็กต์
ระยะเวลามาตรฐาน (3 เดือน)

คำอธิบายโปรเจ็กต์

ภาพรวม

ไดรเวอร์เครื่องพิมพ์แบบเดิมที่ประกอบด้วยตัวกรองเฉพาะเครื่องพิมพ์และ PPD (Postscript Printer Description จะอธิบายความสามารถของเครื่องพิมพ์และตัวกรองที่จะเรียกใช้) ไฟล์ที่ต้องใส่ลงในไดเรกทอรีบางไดเรกทอรีของระบบไฟล์จะถูกแทนที่ด้วยสิ่งที่เรียกกันว่า "แอปพลิเคชันเครื่องพิมพ์" ซึ่งเป็นการจำลองเครื่องพิมพ์เครือข่าย IPP

เครื่องพิมพ์อเนกประสงค์สมัยใหม่ส่วนใหญ่เป็นเครื่องพิมพ์ IPP ที่อนุญาตให้พิมพ์แบบไม่ต้องใช้ไดรเวอร์ โดยอุปกรณ์จะโฆษณาตัวเองผ่าน DNS-SD, ลูกค้าสามารถสอบถามข้อมูลความสามารถของอุปกรณ์ผ่านคำขอ IPP และอุปกรณ์จะใช้รูปแบบข้อมูลมาตรฐานสำหรับงานพิมพ์ เครื่องพิมพ์ที่ไม่มีฟังก์ชันการทำงานนี้ ซึ่งโดยปกติแล้วเครื่องพิมพ์รุ่นเก่าหรือเครื่องพิมพ์เฉพาะทางจะต้องมีไดรเวอร์เครื่องพิมพ์

แอปพลิเคชันเครื่องพิมพ์คือเดมอนที่ตรวจหาเครื่องพิมพ์ที่รองรับและแสดงโฆษณาเครื่องพิมพ์เหล่านั้นใน localhost ว่าเป็นเครื่องพิมพ์ IPP Everywhere แอปพลิเคชันเครื่องพิมพ์มีซอฟต์แวร์สำหรับพิมพ์งานที่เข้ามาในเครื่องพิมพ์ที่รองรับ แปลงข้อมูลเป็นภาษาของผู้ใช้เครื่องพิมพ์ และแสดงข้อมูลเกี่ยวกับความสามารถของเครื่องพิมพ์แก่ลูกค้าตามคำขอ แอปพลิเคชันเครื่องพิมพ์มีอินเทอร์เฟซสำหรับการดูแลเว็บเช่นเดียวกับเครื่องพิมพ์ในเครือข่ายจริง

เราทราบดีว่า Linux กำลังเปลี่ยนไปใช้แพ็กเกจที่มีแซนด์บ็อกซ์ (เช่น Snap) และการพิมพ์ก็กำลังพัฒนาไปในทิศทางนั้นด้วย ในแพ็กเกจที่ใช้แซนด์บ็อกซ์ เราจะแก้ไขเนื้อหาไดเรกทอรีไม่ได้เมื่อสร้างแล้ว ระบบของเราไม่ได้แยกส่วนใดๆ อีกต่อไป เราไม่สามารถเลือกแพ็กเกจไดรเวอร์เครื่องพิมพ์ที่จะติดตั้ง แอปพลิเคชันเครื่องพิมพ์จะจัดการปัญหาเกี่ยวกับการแยกประเภทและให้อิสระเช่นเดียวกับในกรณีของไดรเวอร์เครื่องพิมพ์

ไดรเวอร์เครื่องพิมพ์และสแกนใน Snaps ไม่เพียงแต่เป็นข้อกำหนดสำหรับ CUPS และแอปพลิเคชันที่ติดตั้งใน Snap เท่านั้น แต่ยังใช้งานได้กับระบบแบบคลาสสิกทั้งหมดด้วย แต่แตกต่างจากไดรเวอร์ที่แพ็กเกจแบบคลาสสิกตรงที่ไม่ขึ้นอยู่กับการแจกจ่ายระบบปฏิบัติการ คุณสร้าง Snap ของไดรเวอร์เครื่องพิมพ์และใช้งานได้กับทุกรุ่นของระบบปฏิบัติการที่ใช้ snapd โดยไม่จำเป็นต้องแพ็กเกจไดรเวอร์เครื่องพิมพ์สำหรับแต่ละรุ่น (และแต่ละเวอร์ชัน) แยกกัน และไม่ต้องเจอกับปัญหาเกี่ยวกับข้อกำหนด ข้อดีอีกข้อหนึ่งคือ แนวคิดโบราณของไฟล์ PPD ที่มาจากเครื่องพิมพ์ PostScript จะเลิกใช้แล้ว นอกจากนี้ การเชื่อมโยงระบบ CUPS กับไดรเวอร์เครื่องพิมพ์ด้วยการเชื่อมต่อ IP แทนการส่งไฟล์ลงในระบบ CUPS ทำให้ทั้งระบบ CUPS และแอปพลิเคชันเครื่องพิมพ์สามารถอยู่ในแพ็กเกจที่แซนด์บ็อกซ์แยกกัน

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

เวิร์กโฟลว์ของแอปพลิเคชันเครื่องพิมพ์จะสรุปได้ด้วยแผนภาพต่อไปนี้

พื้นฐานในการสร้างแอปพลิเคชันเครื่องพิมพ์/สแกนเนอร์ดังกล่าวคือ PAPPL ซึ่งเป็นไลบรารีที่ให้บริการฟังก์ชันการทำงานส่วนใหญ่สำหรับการดำเนินการนี้ รวมถึง Cups-Filters ที่มีโค้ดสำหรับใช้กับแอปพลิเคชันเครื่องพิมพ์ แนวคิดนี้ยังอยู่ระหว่างการพัฒนา โดยส่วนใหญ่อยู่ใน Google Summer of Code ปีนี้ แต่ในวันที่ 14 กันยายน ซึ่งเป็นช่วงที่เริ่มเขียนเอกสารประกอบ ช่วงการเขียนโค้ดของ GSoC สิ้นสุดลงแล้ว และนี่คือเวลาที่ OpenPrinting ต้องการบทแนะนำ

เทมเพลตสำหรับไดรเวอร์เครื่องพิมพ์ กำหนดโครงสร้างสำหรับข้อมูล JOB

ประกาศอาร์เรย์ค่าคงที่สำหรับขนาดสื่อ

ประกาศฟังก์ชัน 1) Callback หรือ init ฟังก์ชันบูลีนที่ยอมรับชื่อไดรเวอร์ ข้อมูลไดรเวอร์ ฯลฯ และกำหนดแอตทริบิวต์ไดรเวอร์ตามนั้น หากรายละเอียดที่ระบุเหมาะสม ระบบจะแสดงผลเป็น "จริง" และ "เท็จ" เมื่อดำเนินการไม่สำเร็จ

ii) print ฟังก์ชันบูลีนรับงาน ตัวเลือกสำหรับงาน และอุปกรณ์ โดยจะพิมพ์ไฟล์และแสดงผลเป็น "จริง" หากสําเร็จ และ "เท็จ" หากไม่สําเร็จ

3) rendjob การรับงานบูลีน ตัวเลือกสำหรับงาน และอุปกรณ์ ซึ่งจะสิ้นสุดงานและคืนค่าเป็นจริงเมื่อสําเร็จ และเป็นเท็จเมื่อล้มเหลว

iv) rendpage ฟังก์ชันบูลีนที่รับงาน ตัวเลือกสำหรับงาน อุปกรณ์ และหมายเลขหน้า โดยจะสิ้นสุดหน้าเว็บและแสดงผลเป็น "จริง" เมื่อสําเร็จ และ "เท็จ" เมื่อไม่สําเร็จ

v) rstartjob ฟังก์ชันบูลีนรับงาน ตัวเลือกสําหรับงาน และอุปกรณ์ โดยจะเริ่มต้นงานและแสดงผลเป็น "จริง" หากสําเร็จ และ "เท็จ" หากไม่สําเร็จ

vi) rstartpage ฟังก์ชันบูลีนที่รับงาน ตัวเลือกสําหรับงาน อุปกรณ์ และหมายเลขหน้า โดยจะเริ่มต้นหน้าเว็บและแสดงผลเป็น "จริง" หากสําเร็จ และ "เท็จ" หากไม่สําเร็จ

vii) rwrite ฟังก์ชันบูลีนที่รับงาน ตัวเลือกสำหรับงาน อุปกรณ์ หมายเลขบรรทัด และอาร์เรย์อักขระ โดยจะเขียนบรรทัดและแสดงผลเป็น "จริง" หากสำเร็จ และ "เท็จ" หากไม่สำเร็จ viii) ฟังก์ชันที่ไม่บังคับ เช่น ระบุ (ช่วยระบุเครื่องพิมพ์ตามการดำเนินการที่ระบุ), บีบอัด(บีบอัดบรรทัดของกราฟิก) ฯลฯ