โครงการ Linux Foundation

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

ข้อมูลสรุปของโปรเจ็กต์

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

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

ภาพรวม

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

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

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

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

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

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

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

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

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

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

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

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

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

4) หน้า Landing Page ฟังก์ชันบูลีนที่ยอมรับงาน ตัวเลือกสำหรับงาน อุปกรณ์ และหมายเลขหน้า ซึ่งจะจบหน้าและแสดงค่า true เมื่อสำเร็จ และ false เมื่อล้มเหลว

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

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

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