LWN:Fedora 關(guān)于無(wú)驅(qū)動(dòng)打印的討論!
關(guān)注了就能看到更多這么棒的文章哦~
Fedora contemplates the driverless printing future
By Jonathan Corbet
June 4, 2021
DeepL assisted translation
https://lwn.net/Articles/857502/
在很久很久以前(真不愿承認(rèn)已經(jīng)那么久遠(yuǎn)了),編者在管理一個(gè)系統(tǒng)管理(system-administration)團(tuán)隊(duì)。那時(shí),大多數(shù)日常痛點(diǎn)基本上必定來(lái)自兩類設(shè)備:調(diào)制解調(diào)器(Modem)和打印機(jī)?,F(xiàn)在,調(diào)制解調(diào)器比以前用得更加廣泛了,但實(shí)際上多數(shù)都隱藏在一些接口控制器(interface controller)中,而且(通常)能夠完美地工作了。不過(guò),打印機(jī)仍然在不斷制造問(wèn)題,迫使人們重新思考人生。不過(guò),在大家沒(méi)有留意的地方,其實(shí)情況已經(jīng)變得越來(lái)越好了。只不過(guò)正如最近在 Fedora project 的對(duì)話所說(shuō),要想利用這些改進(jìn),會(huì)需要一些改變,以及更多的信心。
一直以來(lái),要想讓打印機(jī)在 Linux 上正常工作,至少需要找到并安裝正確的打印機(jī)驅(qū)動(dòng)程序和 PostScript printer definition(PPD)文件,這樣系統(tǒng)才可以用各種方式來(lái)與打印機(jī)正常通信。這個(gè)過(guò)程通常還需要安裝一個(gè)單獨(dú)的軟件包,比如 hplip 這種,都是由打印機(jī)供應(yīng)商提供的。一些供應(yīng)商過(guò)去對(duì) Linux 的支持一直比其他家好,但幾乎所有廠商的產(chǎn)品都不能如人們所希望的那樣完美運(yùn)行。雖然這些年來(lái) Linux 上的打印機(jī)設(shè)置方面有了明顯的改善,但人們?nèi)匀煌ε掳惭b新的打印機(jī)。
The Internet Printing Protocol(互聯(lián)網(wǎng)打印協(xié)議)
值得提醒一下,在 Linux 上處理打印工作的 CUPS 系統(tǒng)的維護(hù)者們一直有一個(gè)未解決的 issue,就是要求移除 CPUS 對(duì)打印機(jī)驅(qū)動(dòng)程序(printer driver)的支持。Fedora 開(kāi)發(fā)郵件列表在 5 月下旬也討論了這個(gè)想法。打印機(jī)這個(gè)領(lǐng)域即將發(fā)生巨變,用戶們自然會(huì)好奇這些變化何時(shí)發(fā)生、以及對(duì)他們有什么影響。
那些沒(méi)有關(guān)注過(guò)打印技術(shù)發(fā)展的人可能會(huì)想,為什么會(huì)需要?jiǎng)h除打印機(jī)驅(qū)動(dòng)?驅(qū)動(dòng)是使打印機(jī)能實(shí)際工作的東西呀。答案就是互聯(lián)網(wǎng)打印協(xié)議(IPP),或者更具體地說(shuō),是它的一個(gè)衍生版本,名為 IPP Everywhere。思路很簡(jiǎn)單:如果所有的打印機(jī)都執(zhí)行相同的協(xié)議,這樣任何軟件都可以利用它們來(lái)打印,而不需要安裝特殊的驅(qū)動(dòng)程序了?;蛘哒f(shuō),根本不需要進(jìn)行任何配置(configuration)工作?類似很多其他技術(shù)演進(jìn),IPP Everywhere 的出發(fā)點(diǎn)似乎也是為了能與智能手機(jī)更好地配合,不過(guò)它在更廣泛場(chǎng)景中也是很有用處的。
在 IPP Everywhere 描繪的未來(lái)中,打印機(jī)直接就能工作。它們會(huì)通過(guò) multicast DNS 把自己公布出去,讓網(wǎng)絡(luò)上的其他機(jī)器可以發(fā)現(xiàn)自己。該協(xié)議允許打印機(jī)廣告它有哪些能力、接受控制,因此像雙面打印和紙盤選擇這樣的功能都可以正常工作。IPP Everywhere 預(yù)先定義了要打印的材料的若干組已知格式(format),因此不需要特殊的驅(qū)動(dòng)來(lái)進(jìn)行格式轉(zhuǎn)換。用戶只需要說(shuō)明他們想要打印了,然后在可用的打印機(jī)和打印選項(xiàng)中進(jìn)行選擇、安裝好打印機(jī)需要的新碳粉盒、然后打印出來(lái)的東西就可以用完扔到垃圾桶了。這個(gè)打印體驗(yàn)簡(jiǎn)直是美好得要上天了。
或者說(shuō),未來(lái)會(huì)成為一個(gè)打印天堂。鑒于 IPP Everywhere 自 2010 年以來(lái)就一直存在,人們可能覺(jué)得我們是不是應(yīng)該早就達(dá)到這個(gè)要求了,其實(shí)不然,這里還有一些遺留問(wèn)題。
Does it work?
CUPS 早就支持 IPP Everywhere 了,而且各大發(fā)行版普遍也啟用了這種功能。但似乎它仍然不是 Linux 上使用打印機(jī)的缺省方式。例如,在網(wǎng)上搜索如何在 Linux 上設(shè)置編者的 Brother 激光打印機(jī),搜索結(jié)果是 Brother 公司的驅(qū)動(dòng)網(wǎng)頁(yè)。按上面的步驟的話,雖然經(jīng)過(guò)一個(gè)有點(diǎn)麻煩的過(guò)程打印機(jī)是可以很好地工作,但這并不是一個(gè)透明(transparent)或無(wú)驅(qū)動(dòng)(driverless)的體驗(yàn)。
不過(guò),這臺(tái)打印機(jī)應(yīng)該是支持 IPP Everywhere 的,avahi-browse 的輸出中也可以發(fā)現(xiàn)這臺(tái)設(shè)備。安卓設(shè)備就可以成功地用它來(lái)打印。這意味著在現(xiàn)代版本的 Linux 中,當(dāng)我們?cè)噲D打印一個(gè)文件時(shí),打印機(jī)應(yīng)該自動(dòng)出現(xiàn),根本不需要設(shè)置打印隊(duì)列。雖然這個(gè)打印機(jī)確實(shí)出現(xiàn)了,但我們?nèi)绻噲D用它來(lái)打印的話,還沒(méi)來(lái)得及點(diǎn)擊 "打印" 按鈕,打印對(duì)話框就掛掉了。這種體驗(yàn)可能算是無(wú)驅(qū)動(dòng)的(driverless),而且還會(huì)減少紙張浪費(fèi),但肯定不是人們想要的結(jié)果。
如果我們明確添加一個(gè)打印隊(duì)列呢?在剛剛?cè)掳惭b的 Fedora 34 系統(tǒng)上啟動(dòng) "add a printer" 對(duì)話框會(huì)出現(xiàn)一個(gè)完全空白的對(duì)話框,這肯定也不是打印機(jī)用戶所期望看到的。輸入打印機(jī)的 IP 地址之后(大多數(shù)用戶輸入這些 IP 地址的時(shí)候都會(huì)非常麻利……),就會(huì)出現(xiàn)下面的顯示:其中有五個(gè)選項(xiàng),但普通人總是搞不懂應(yīng)該選擇哪個(gè)。事實(shí)上,只有列表中的最后一個(gè)選項(xiàng)是有效的,而且要花好幾分鐘才能打印出一頁(yè),對(duì)于那些沒(méi)有接觸過(guò) CUPS 的內(nèi)部邏輯的用戶來(lái)說(shuō),完全沒(méi)法搞清楚為什么。

相反,如果一個(gè)人簡(jiǎn)單地告訴 CUPS 將打印機(jī)作為 IPP Everywhere 設(shè)備使用,其命令如下:
# lpadmin -p NewPrinter -E -v ipp://10.0.0.16/ipp -m everywhere
打印機(jī)立即就能正常工作了。當(dāng)然,它一開(kāi)始就先向 Fedora 系統(tǒng)抱怨說(shuō)它需要新碳粉盒了,F(xiàn)edora 系統(tǒng)也把這個(gè)請(qǐng)求準(zhǔn)確地傳遞給了用戶。因此,IPP Everywhere 確實(shí)完成了雙向交流的作用,但似乎還沒(méi)有完全到位。
大多數(shù)發(fā)行版提供商都努力在支持無(wú)驅(qū)動(dòng)打?。╠riverless printing)。感興趣的話,可以在網(wǎng)上找到 Arch Linux、Debian(和 Ubuntu)、Fedora、Gentoo、Red Hat 等的步驟說(shuō)明。SUSE 和 openSUSE 似乎是最主要的例外,如果不是編者我的搜索技能有問(wèn)題的話。
Old printers
理論上來(lái)說(shuō),幾乎過(guò)去十年制造的所有打印機(jī)都應(yīng)該是支持 IPP Everywhere 的。看起來(lái)大多數(shù)都支持,盡管認(rèn)證打印機(jī)(certified printer)名單里明顯缺少一些供應(yīng)商。但并不是每個(gè)人都有那么新的打印機(jī),因?yàn)榇蛴C(jī)可以工作很多年。從 CUPS(以及使用它的 Linux 發(fā)行版)中移除打印機(jī)驅(qū)動(dòng),就意味著移除了對(duì)這些設(shè)備的支持。對(duì)于擁有這些硬件的用戶來(lái)說(shuō),這樣做是不合適的。
原本用來(lái)解決這個(gè)問(wèn)題的方案就是 "打印機(jī)應(yīng)用程序(printer applications)":能夠與某一類打印機(jī)對(duì)話的程序,并且自己實(shí)現(xiàn)了 IPP Everywhere 協(xié)議,從而將這些打印機(jī)連接到 CUPS?,F(xiàn)在只有少數(shù)一些這樣的程序。其中包括 LPrint,可以驅(qū)動(dòng)一些標(biāo)簽打印機(jī)(label printers)。支持其他設(shè)備的工作還正在進(jìn)行中,包括在開(kāi)發(fā) "foo2zjs",可以顯示為 IPP Everywhere 打印機(jī),但底層仍然需要特殊的驅(qū)動(dòng)程序才能工作。在今年的 OpenPrinting Google Summer of Code 的規(guī)劃中,一個(gè)重頭戲就是要開(kāi)發(fā)出更多的打印機(jī)應(yīng)用程序。
這并不能滿足所有的用戶,許多人在折騰了很久之后才終于讓他們的打印機(jī)正常工作起來(lái),并且不愿意在新系統(tǒng)中再次經(jīng)歷一遍這個(gè)折騰過(guò)程。有些人也擔(dān)心會(huì)有一些 CUPS 能支持的打印機(jī)永遠(yuǎn)得不到打印機(jī)應(yīng)用程序的支持。這確實(shí)很有可能,但目前還不清楚有多少用戶會(huì)因?yàn)檫@些古老設(shè)備失去支持而受到影響。還有人抱怨說(shuō),這個(gè)過(guò)渡過(guò)程會(huì)導(dǎo)致很多問(wèn)題,而卻沒(méi)有什么實(shí)際好處。Solomon Peachy 這樣回答這個(gè)問(wèn)題:
現(xiàn)代的(>2010 年)網(wǎng)絡(luò)打印機(jī)能直接工作起來(lái),不需要本地驅(qū)動(dòng)(local drivers)。CUPS-shared 打印機(jī)也可以正常工作,并不需要本地驅(qū)動(dòng)。有智能手機(jī)的人可以用大多數(shù) CUPS-attached 打印機(jī)打印,同樣不需要驅(qū)動(dòng)程序。[…]
我們比以往任何時(shí)候都更接近擁有一個(gè)通用打印系統(tǒng)了,它不與任何特定的操作系統(tǒng)或客戶端綁定,而且無(wú)論打印機(jī)在哪里或是如何連接的,它的行為都是一致的。這一切的基礎(chǔ)是基于正式的標(biāo)準(zhǔn)化協(xié)議(同樣重要的是,也是基于明確定義好的行為)、自由軟件的參考實(shí)現(xiàn),以及一致性測(cè)試的。
對(duì)許多人來(lái)說(shuō),盡管通用的打印系統(tǒng)能像預(yù)期的那樣運(yùn)行良好,但是它也無(wú)法很快到來(lái)。如果出現(xiàn)這種情況的話,可能就不會(huì)有人為失去打印機(jī)驅(qū)動(dòng)程序而感到悲哀了。
Fake printers
不過(guò),在 Fedora 的討論中還出現(xiàn)了另一個(gè)問(wèn)題。在一個(gè)打印機(jī)只是網(wǎng)上的一個(gè)符號(hào)的世界里,有什么可以防止攻擊者架設(shè)假的打印機(jī)來(lái)捕捉到他們感興趣的文件?關(guān)于這一點(diǎn),似乎并沒(méi)有多少人在考慮。正如 Zdenek Dohnal 所說(shuō)。"CUPS discovery 設(shè)計(jì)時(shí)就是為了在安全的私人局域網(wǎng)上運(yùn)行的,所以它假設(shè)你會(huì)有保護(hù)措施來(lái)防止有人連接到你的 WIFI。" Peachy 補(bǔ)充說(shuō),如果一個(gè)攻擊者在本地網(wǎng)絡(luò)上有足夠能力來(lái)偽造一臺(tái)打印機(jī),那么他們可能就可以有權(quán)限做比這更糟糕的事情。
IPP 確實(shí)有認(rèn)證(authentication)等方面的規(guī)定,但采用這些策略的話,就會(huì)導(dǎo)致該協(xié)議首先要提供的方便性的損失。因此,對(duì)安全(security)的總體態(tài)度可能仍然是 Dohnal 所描述的那樣:本地網(wǎng)絡(luò)(local network)本身需要是安全的。
在一個(gè)相關(guān) issue 上,有一些參與了討論的人擔(dān)心一些 IPP Everywhere 設(shè)備的工作方式是把這些打印要求發(fā)送到基于云服務(wù)(cloud-based service)的位置來(lái)執(zhí)行的。事實(shí)上,在向上述 Brother 打印機(jī)打印時(shí),Android 打印對(duì)話框就警告說(shuō)文件可能會(huì)經(jīng)過(guò)第三方的服務(wù)器,當(dāng)然在這種情況下似乎并沒(méi)有真的發(fā)生這種情況。當(dāng)互聯(lián)網(wǎng)癱瘓時(shí)如果本地打印機(jī)就會(huì)失效,這肯定不是我們所期望的,但不知為什么,人們似乎正朝著這個(gè)方向前進(jìn)。
When?
CUPS 項(xiàng)目多年來(lái)一直致力于實(shí)現(xiàn)無(wú)驅(qū)動(dòng)(driverless)的世界。PPD 文件在 2009 年的 1.4 版本中首次被廢棄(deprecated),盡管當(dāng)時(shí)并沒(méi)有什么替代方案。該項(xiàng)目最終在 2019 年的 2.3 版本中廢棄了打印機(jī)驅(qū)動(dòng)程序(printer drivers)。不過(guò),"廢棄(deprecated)" 并不等于 "刪除(removed)",deprecated 是為了讓人們注意到即將到來(lái)的改變。從 PPD 文件(目前仍然支持)就可以看出,deprecated 到最終被刪除之間,可能會(huì)需要很長(zhǎng)一段時(shí)間。
據(jù)說(shuō)計(jì)劃在 CUPS 的下一個(gè)主版本中移除打印機(jī)驅(qū)動(dòng),目前看來(lái)還沒(méi)有明確的主版本發(fā)布日期。自 2020 年 4 月的 2.3.3 版本發(fā)布以來(lái),該項(xiàng)目就再也沒(méi)有發(fā)布過(guò)任何版本,所以目前進(jìn)展似乎并不快??赡苓€是有一些時(shí)間可以讓發(fā)行版提供商和用戶們?yōu)檫@個(gè)變動(dòng)做好準(zhǔn)備。
這是一件好事。哪怕大多數(shù)打印機(jī)都能得到 IPP Everywhere 的支持,也還會(huì)有很多用戶可以依賴打印機(jī)驅(qū)動(dòng)程序(printer driver),也還有很多使用舊打印機(jī)的用戶。要想讓首批提供 CUPS 2.4 版本的發(fā)行版不會(huì)導(dǎo)致大量打印機(jī)無(wú)法工作的話,就需要做大量的工作和測(cè)試。如果能做到這一點(diǎn),也許打印機(jī)就終于可以和調(diào)制解調(diào)器一樣,不再需要折騰半天才能工作起來(lái)了。
全文完
LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。
長(zhǎng)按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開(kāi)源社區(qū)的各種新近言論~
