Lpd

將 lpd lp 重定向到文件?

  • September 22, 2016

我們有一個古老的 Business Basic 應用程序,它將報告列印到一個簡單的行式列印機,我們希望將該輸出擷取到一個文件中(然後從中刮取數據)。這在 Red Hat 8(大約 2002 年)上執行。

基本程式碼 OPEN 然後列印到“LP”,它進入 lpd 列印機 lp。檢查幾個在 /var/spool/lpd/lp/ 中沒有被刪除的隨機假離線文件,這些文件看起來有合適的內容。

所以問題是,如何臨時更改某些內容,使 Basic 程序僅將其輸出發送到文件(並且該文件不會被列印)。

可以通過修改Basic程式碼來達到這個效果,但是系統範圍很廣,列印的地方很多,在這些地方沒有簡單的方法可以提供選項。

因此,尋求一種在 Basic 應用程序之外執行此操作的方法,該方法可以從腳本中設置和取消設置(使列印恢復正常)。

如果它是相關的,printcap 條目:

lp:\
:ml#0:\
:mx#0:\
:sd=/var/spool/lpd/lp:\
:af=/var/spool/lpd/lp/lp.acct:\
:sh:\
:rm=[ip address]:\
:rp=pr0:\
:lpd_bounce=true:\
:if=/usr/share/printconf/util/mf_wrapper:

謝謝!

如果您將printcap條目定義為:

lp:\
   :ml#0:\
   :mx#0:\
   :sd=/var/spool/lpd/lp:\
   :sh:\
   :lp=/dev/null:\
   :of=/var/output/capture:

在這種情況下,lp入口指向/dev/null,所以它永遠不會列印出任何東西。

魔法of過濾器中。這是一個非常簡單的腳本:

#!/bin/sh

DIR=/var/output/files
d=`/bin/date +%Y-%m-%d_%H:%M:%S`

output=$DIR/$d.$$

cat > $output
chmod 644 $output
exit 0

現在

mkdir /var/output/files
chown daemon /var/output/files

此時我們可以執行以下操作:

% echo this is a test | lpr

如果是魔法:

% ls /var/output/files
2016-08-20_09:44:19.26541

% cat /var/output/files/2016-08-20_09\:44\:19.26541 
this is a test

您可以根據您的確切需要修改腳本。

(我已經在 FreeBSD 上對此進行了測試,這是我唯一仍在使用的機器lpd!)

現在您if的原始文件中有一個過濾器;if是一個“輸入過濾器”,旨在將傳入文件修改為規範化格式。我不確定是什麼mf_wrapper(“m 格式”?),但如果您在輸出文件中看到一團糟,那麼您可能會更改printcap以包含原始if過濾器:

lp:\
   :ml#0:\
   :mx#0:\
   :sd=/var/spool/lpd/lp:\
   :sh:\
   :lp=/dev/null:\
   :of=/var/output/capture:\
   :if=/usr/share/printconf/util/mf_wrapper:

對於您滿意的文件,您可以手動將它們發送到另一個帶有lpr -Prealqueue或類似的列印隊列。

引用自:https://unix.stackexchange.com/questions/304559