www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]本文所述技巧介紹了如何組合現(xiàn)有工具制作一個(gè)打印 DVI 文件的 CUPS 打印過濾器。

您是否試過在 Linux® 上打印 DVI 或其他文件卻得到 “unsupported format”(不支持的格式)的消息?本文所述技巧介紹了如何組合現(xiàn)有工具制作一個(gè)打印 DVI 文件的 CUPS 打印過濾器。

公共 UNIX 打印系統(tǒng)(CUPS)是當(dāng)今許多 Linux 和 UNIX® 系統(tǒng)使用的打印假脫機(jī)程序??梢杂?CUPS 提供的過濾器在各種各樣的打印機(jī)上格式化和打印眾多類型的文件。但是如果 CUPS 不支持要打印的文件類型該怎么辦?可以先把文件轉(zhuǎn)換成 CUPS 能打印的類型,例如 PostScript 或 PDF。或者也可以創(chuàng)建一個(gè)過濾器,這樣 CUPS 打印系統(tǒng)就能夠正確識(shí)別并打印文件。本文摘自 LPI 102 考試準(zhǔn)備:打印 教程,它介紹了如何創(chuàng)建簡(jiǎn)單的過濾器。

MIME 類型和 CUPS

那么,CUPS 如何確定用于格式化特定文件類型的過濾器呢?在打印文件的時(shí)候,CUPS 使用 MIME(多用途 Internet 郵件擴(kuò)展)類型確定合適的轉(zhuǎn)換過濾器。請(qǐng)注意其他打印包可能使用 file 命令所使用的 magic number 那樣的機(jī)制。請(qǐng)參閱 file 或 magic 的手冊(cè)頁獲得更多信息。

MIME 類型用于把各種文件作為郵件附件傳輸。其中包含類型(例如文本或圖片)和子類型(例如 html、postscript gif 或 jpeg)。類型和子類型之間用分號(hào)(;)分隔??蛇x參數(shù)可能包含諸如字符集編碼或語言等信息。 CUPS 使用來自 /etc/cups/mime.types 的規(guī)則確定文件的類型,然后從 /etc/cups/conv.types 列出的過濾器中為給出的 MIME 類型選擇合適的過濾器。MIME 類型在 IANA(Internet Assigned Numbers AuthorityInternet)上注冊(cè)。如果所需的類型沒有注冊(cè),請(qǐng)?jiān)谧宇愋颓凹由?'x-' 前綴。清單 1 顯示了一些圖片類型的示例。


清單 1. /etc/cups/mime.types 的一些 MIME 類型項(xiàng)

image/gif gif string(0,GIF87a) string(0,GIF89a)
image/png png string(0,<89>PNG)
image/jpeg jpeg jpg jpe string(0,<FFD8FF>) &&
(char(3,0xe0) char(3,0xe1) char(3,0xe2) char(3,0xe3)
char(3,0xe4) char(3,0xe5) char(3,0xe6) char(3,0xe7)
char(3,0xe8) char(3,0xe9) char(3,0xea) char(3,0xeb)
char(3,0xec) char(3,0xed) char(3,0xee) char(3,0xef))
image/tiff tiff tif string(0,MM) string(0,II)
image/x-photocd pcd string(2048,PCD_IPI)
image/x-portable-anymap pnm




這些項(xiàng)的格式超出了本文的討論范圍。請(qǐng)參閱 /usr/share/mime/magic 文件或 /usr/share/file/magic 文件了解如何用 magic number 標(biāo)識(shí)文件。

確定了文件的 MIME 類型之后,就用 /etc/cups/mime.convs 文件查找正確的過濾器。這個(gè)文件的行有四項(xiàng):源 MIME 類型和目標(biāo) MIME 類型、代價(jià)、過濾器的名稱。這里使用了代價(jià)最小的過濾器。清單 2 顯示了一些示例。


清單 2. /etc/cups/mime.convs 的過濾器項(xiàng)

text/plain application/postscript 33 texttops
text/html application/postscript 33 texttops
image/gif application/vnd.cups-postscript 66 imagetops
image/png application/vnd.cups-postscript 66 imagetops
image/jpeg application/vnd.cups-postscript 66 imagetops
image/tiff application/vnd.cups-postscript 66 imagetops
image/x-bitmap application/vnd.cups-postscript 66 imagetops




如果找不到合適的過濾器,嘗試打印文件就會(huì)產(chǎn)生錯(cuò)誤消息。如果使用 CUPS 之外的打印機(jī)守護(hù)程序,那么可能得到意料之外的輸出。清單 3 顯示了使用 DVI 文件時(shí)的情況(來自 TeX 和 LaTex 的正常輸出)。


清單 3. 打印不支持的文件類型

[ian@attic4 ~]$ lpr samp1.dvi
lpr: Unsupported format 'application/octet-stream'!


用于 CUPS 打印的 DVI 過濾器

幸好,提供 TeX 和 LaTeX 的 tetex 包還提供了把 DVI 轉(zhuǎn)換成 PostScript 的轉(zhuǎn)換工具 dvips。不幸的是,它不能作為過濾器工作,因?yàn)樗恢廊绾翁幚?CUPS 過濾器必須處理的參數(shù):作業(yè) id、用戶、作業(yè)標(biāo)題、拷貝數(shù)量和作業(yè)選項(xiàng)。如果輸入來自文件,那么過濾器管道中的第一個(gè)過濾器還具有額外的參數(shù) —— 文件名。

解決方案是創(chuàng)建一個(gè)作為過濾器的包裝器腳本。dvips 命令不接受來自 stdin 的輸入,所以這個(gè)腳本可能需要?jiǎng)?chuàng)建臨時(shí)文件,在調(diào)用 dvips 之前把 stdin 拷貝到臨時(shí)文件。清單 4 顯示了可能的腳本。


清單 4. CUPS DVI 到 PostScript 的過濾器腳本

#!/bin/bash
# CUPS filter to process DVI files using dvips
# Create a sandbox for working if input on stdin
if [ $# -lt 6 ]; then
sandbox=${TMPDIR-/tmp}/cups-dvitops.$$
(umask 077 && mkdir $sandbox) || {
echo "Cannot create temporary directory! Exiting." 1>&2
exit 1
}
fn="$sandbox/cups-dvitops.$$"
cat > "$fn"
else
fn="$6"
fi
# Call dvips quietly, securely and with output to stdout
dvips -R -q -o - "$fn"
# Erase sandbox if we created one
if [ $# -lt 6 ]; then
rm -rf "$sandbox"
fi




回想一下 CUPS 使用 /etc/cups 中的兩個(gè)文件來確定 MIME 類型和要使用的過濾器。只要重新安裝或升級(jí) CUPS,這些文件都會(huì)被覆蓋。幸運(yùn)的是,CUPS 在啟動(dòng)或重新啟動(dòng)時(shí),都會(huì)讀取 所有 擴(kuò)展名為 .types 或 .convs 的文件。所以應(yīng)當(dāng)為新的過濾器創(chuàng)建一對(duì)文件,例如 /etc/cups/dvitops.types 和 /etc/cups/dvitops.convs。清單 5 顯示了 DVI 過濾器的兩個(gè)配置文件。


清單5. CUPS dvitops 的配置文件 filter

[ian@attic4 ~]$ cat /etc/cups/dvitops.types
# Local MIME definition for DVI files
application/x-dvi dvi string(0,<F702>)
[ian@attic4 ~]$ cat /etc/cups/dvitops.convs
# Local DVI to PostScript filter for CUPS
application/x-dvi application/postscript 50 dvitops




清單 5 說明前兩個(gè)位置是 16 進(jìn)制數(shù)字 F7 和 02 的文件被識(shí)別為 DVI 文件,而且這類文件應(yīng)當(dāng)用 dvitops 過濾器處理。

接下來,作為 root 用戶,把上面的腳本拷貝到 /usr/lib/cups/filter/dvitops,并確保它完全可讀并可執(zhí)行(-rwxr-xr-x)。腳本的名稱必須與上面的 /etc/cups/dvitops.convs 文件中的名稱匹配。如果在強(qiáng)制模式下運(yùn)行 SELinux,還應(yīng)當(dāng)運(yùn)行 /usr/lib/cups/filter 目錄中的 restorecon 來更新安全上下文。否則,lpr 看起來會(huì)工作,但是實(shí)際上并不能打印文件。

最后,請(qǐng)用重新啟動(dòng)選項(xiàng)以及 /etc/rc.d/init.d 或 /etc/init.d 中的 cups 腳本,重新啟動(dòng) CUPS 并使用新的過濾器。

如果使用的是比較老的打印假脫機(jī)程序,可能要使用 magicfilter 或 apsfilter 作為輸入過濾器,以便把各種輸入文件轉(zhuǎn)換成在 PostScript 打印機(jī)上打印的 PostScript 格式,或者使用 Ghostscript,在非 PostScript 打印機(jī)上面打印。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

CPU親和度通過限制進(jìn)程或線程可以運(yùn)行的CPU核心集合,使得它們只能在指定的CPU核心上執(zhí)行。這可以減少CPU緩存的失效次數(shù),提高緩存命中率,從而提升系統(tǒng)性能。

關(guān)鍵字: Linux 嵌入式

在Linux系統(tǒng)性能優(yōu)化中,內(nèi)存管理與網(wǎng)絡(luò)連接處理是兩大核心領(lǐng)域。vm.swappiness與net.core.somaxconn作為關(guān)鍵內(nèi)核參數(shù),直接影響系統(tǒng)在高負(fù)載場(chǎng)景下的穩(wěn)定性與響應(yīng)速度。本文通過實(shí)戰(zhàn)案例解析這兩個(gè)...

關(guān)鍵字: Linux 內(nèi)存管理

對(duì)于LLM,我使用b谷歌Gemini的免費(fèi)層,所以唯一的成本是n8n托管。在使用了n8n Cloud的免費(fèi)積分后,我決定將其托管在Railway上(5美元/月)。然而,由于n8n是開源的,您可以在自己的服務(wù)器上托管它,而...

關(guān)鍵字: 人工智能 n8n Linux

在Linux系統(tǒng)管理中,權(quán)限控制是安全運(yùn)維的核心。本文通過解析/etc/sudoers文件配置與組策略的深度應(yīng)用,結(jié)合某金融企業(yè)生產(chǎn)環(huán)境案例(成功攔截98.7%的非法提權(quán)嘗試),揭示精細(xì)化權(quán)限管理的關(guān)鍵技術(shù)點(diǎn),包括命令別...

關(guān)鍵字: Linux 用戶權(quán)限 sudoers文件

Linux內(nèi)核中的信號(hào)量(Semaphore)是一種用于資源管理的同步原語,它允許多個(gè)進(jìn)程或線程對(duì)共享資源進(jìn)行訪問控制。信號(hào)量的主要作用是限制對(duì)共享資源的并發(fā)訪問數(shù)量,從而防止系統(tǒng)過載和數(shù)據(jù)不一致的問題。

關(guān)鍵字: Linux 嵌入式

在云計(jì)算與容器化技術(shù)蓬勃發(fā)展的今天,Linux網(wǎng)絡(luò)命名空間(Network Namespace)已成為構(gòu)建輕量級(jí)虛擬網(wǎng)絡(luò)的核心組件。某頭部互聯(lián)網(wǎng)企業(yè)通過命名空間技術(shù)將測(cè)試環(huán)境資源消耗降低75%,故障隔離效率提升90%。本...

關(guān)鍵字: Linux 云計(jì)算

在Linux內(nèi)核4.18+和主流發(fā)行版(RHEL 8/Ubuntu 20.04+)全面轉(zhuǎn)向nftables的背景下,某電商平臺(tái)通過遷移將防火墻規(guī)則處理效率提升40%,延遲降低65%。本文基于真實(shí)生產(chǎn)環(huán)境案例,詳解從ipt...

關(guān)鍵字: nftables Linux

在Linux設(shè)備驅(qū)動(dòng)開發(fā)中,等待隊(duì)列(Wait Queue)是實(shí)現(xiàn)進(jìn)程睡眠與喚醒的核心機(jī)制,它允許進(jìn)程在資源不可用時(shí)主動(dòng)放棄CPU,進(jìn)入可中斷睡眠狀態(tài),待資源就緒后再被喚醒。本文通過C語言模型解析等待隊(duì)列的實(shí)現(xiàn)原理,結(jié)合...

關(guān)鍵字: 驅(qū)動(dòng)開發(fā) C語言 Linux

在Unix/Linux進(jìn)程間通信中,管道(pipe)因其簡(jiǎn)單高效被廣泛使用,但默認(rèn)的半雙工特性和無同步機(jī)制容易導(dǎo)致數(shù)據(jù)競(jìng)爭(zhēng)。本文通過父子進(jìn)程雙向通信案例,深入分析互斥鎖與狀態(tài)機(jī)在管道同步中的應(yīng)用,實(shí)現(xiàn)100%可靠的數(shù)據(jù)傳...

關(guān)鍵字: 管道通信 父子進(jìn)程 Linux

RTOS :RTOS的核心優(yōu)勢(shì)在于其實(shí)時(shí)性。它采用搶占式調(diào)度策略,確保高優(yōu)先級(jí)任務(wù)能夠立即獲得CPU資源,從而在最短時(shí)間內(nèi)完成處理。RTOS的實(shí)時(shí)性是通過嚴(yán)格的時(shí)間管理和任務(wù)調(diào)度算法實(shí)現(xiàn)的,能夠滿足對(duì)時(shí)間敏感性要求極高的...

關(guān)鍵字: Linux RTOS
關(guān)閉