この日記は不定期に更新されます。なんにせよ、大したことは書かれないはずですが。
取扱上の注意
間違って検索サイトから来られた方へ(よくある検索 pattern)
アンテナ管理者の方へ
・ かふんしょお。へーちょ。
・ 先日、ついに printer が壊れた。
・
ここしばらく(もうかれこれ 2 年以上前から)騙し騙し使っていたのではあった。Cleaning 機能は使えないし(cleaning 機構そのものが ink で溢れたっぽい)、しょっちゅう「ink cartridge 異常」を訴えたり。それでも、いざ動いてしまえば快調なので、捨てる気にはならなかったんだよね。だいたい、psc750 って発売されたのいつだ? 思えば 遠くへ来たもんだ ずいぶん長く使ってきたものだ。
・
で、こないだ電源を入れたところ、初期化時に毎回実施されるはずの scanner の calibration 動作が行なわれない。おや? と思っているうちに焦臭い匂いが漂ってきた。急いで 口で吸え 電源を引っこ抜く。うーん、駆動系がどっかで引っ掛かった挙げ句に motor が過負荷で焼けた風味。いい printer でした!
・ 近々確定申告もあることだし、printer がないと困る。幸いこの所暖かかったので、先週の水曜日につくばへ一走りして printer を取ってきた。いや、前々から置き換えようと思ってはいたわけですよ。で、買っておいたはいいものの、置場所がなくて箱に入ったままずーっと放置してあったわけで。
・ そんなこんなで、持って帰ってきたのは Brother の MFC-3820JN。そもそもこれだって相当前のブツだよなー、と思いつつ保証書の日付を見てみたら、買ってから 7 年くらい経っている。つまり今のマンションを買った頃ですよ! さすがにビビった。
・ 機械ものはなまじ動かさないでいるとかえって故障するもんだが、さすがに買ってから一度も通電していないどころか開封すらしていなかった(!)だけあって、すんなり動いてくれた。ただ、やっぱり head が微妙に目詰まりしていて、clearning をいきなり 10 回以上やる羽目に。むー。
・ ともあれ、無事に印刷環境が復活。Business 向けの機種なだけあって、印字は psc750 に比べるとかなり落ちるが、これはしょうがないね‥‥‥。どうせ名詞のネタも絶滅してきたし‥‥‥。
・ でまあ、Windoze から印刷できるのは当たり前。今まで使っていた psc750 は USB 接続なのであまり本格的に整備する気にならなかったのだが、せっかく printer 自体が LAN I/F を持っていることだし、FreeBSD でも印刷環境をちゃんと整えてみることにした。
・ Brother の inkhet printer の command sequence は公開されていないっぽい。ところが、Linux 用の driver set を Brother 自身が公開してくれている。まあ詰まるところ filter なんだけど、実は購入当時にこの filter が FreeBSD でも動作することは確認してあった(だからこの printer を購入したわけでもある)。で、公開されているのは lpd 用の filter/script の詰め合わせ。CUPS 環境用にはこの lpd 用のブツを CUPS から呼び出せるようにする wrapper(を生成するための script)が別途配布されている。うちの machine も気が付いたら CUPS の環境になっていたので(FreeBSD からはほとんど印刷してないからあまり気にしてなかった (__;)、MFC-3820JN を CUPS から使えるようにしてみるんだよしてみるんだよ。
・ 最初は lpd 用の環境構築から。Lpd を実際に動かすかはともかく、CUPS wrapper もこの環境(の files)を利用して動作するようになっているので、これをやらないことには始まらない。
・ Lpd 用の filter script である filterMFC3820JN は、「各種入力 file →(filter)→ PostScript →(psconvertij)→ PPM Raw →(rastertobrij)→ printer data」という流れで変換を行なう構造になっている。このうち、psconvertij は内部で Ghostscript を呼び出している。これらの filter は基本的に shell script や plain text file で構成されているが、rastertobrij だけは binary で配布されている。これは当然 Linux 用の binary なので、install する各種 files は native 環境と Linuxulator のどちらからも同じ path で参照できるようにしておくのが無難なので、今回はそうしておいた。
・ さて、まずは材料です。
・ 材料が揃ったら、早速調理を始めましょう。
rpm2cpio MFC3820JNlpr-1.0.4-1.i386.rpm | ( cd /usr/compat/linux; cpio -id --quiet )
ぶっちゃけ、3. 以降の内容はここで抽出した script の内容に沿ってるはずなのだが、update されてたりで変わってる可能性もあるので、一応確認しておくがいいよ。rpm -qp --scripts MFC3820JNlpr-1.0.4-1.i386.rpm > script.lpr
面倒くさいことしてる理由は上に書いた通り。ln -s /usr/compat/linux/usr/bin/brprintconfij /usr/local/bin ln -s /usr/compat/linux/usr/local/Brother /usr/local/share cd /usr/compat/linux/usr/local mkdir share cd share ln -s ../Brother . chmod 755 /usr/compat/linux/usr/local
setupPrintcapij の引数である「-i USB」は USB 接続であることを示しているのだが、network 接続の指定方法がないようなので、ここでは無視。/usr/compat/linux/usr/local/Brother/inf/setupPrintcapij MFC3820JN -i USB cd /usr/compat/linux/usr/lib rm -f libbrcompij.so.1.0 rm -f libbrcompij.so.1 rm -f libbrcompij.so ln -s libbrcompij.so.1.0.4 libbrcompij.so.1.0 ln -s libbrcompij.so.1.0.4 libbrcompij.so.1 ln -s libbrcompij.so.1.0.4 libbrcompij.so
----8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<---- --- /usr/compat/linux/usr/local/Brother/lpd/filterMFC3820JN-dist 2010-02-28 10:50:38.000000000 +0900 +++ /usr/compat/linux/usr/local/Brother/lpd/filterMFC3820JN 2010-02-28 11:07:45.000000000 +0900 @@ -21,7 +21,7 @@ PRINTER="MFC-3820JN" PRINTER_TMP=$(echo $PRINTER | sed -e 's/ //g' -e 's/-//g') -BR_PRT_PATH=/usr/local/Brother/ +BR_PRT_PATH=/usr/local/share/Brother/ RCFILE=`eval echo $BR_PRT_PATH/inf/brPRINTERrc | eval sed 's/PRINTER/"$PRINTER_TMP"/'` PAPER_INF=$BR_PRT_PATH/inf/paperinfij PSCONV=$BR_PRT_PATH/lpd/psconvertij ----8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<----
----8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<---- --- /usr/local/share/Brother/lpd/psconvertij-dist 2010-02-28 10:50:38.000000000 +0900 +++ /usr/local/share/Brother/lpd/psconvertij 2010-02-28 12:54:35.000000000 +0900 @@ -1,4 +1,4 @@ -#/bin/sh +#!/bin/sh # # psconertij [Paper_inf] [rc_file] # Copyright (C) 2003 Brother. Industries, Ltd. @@ -26,7 +26,7 @@ PAPER_TYPE=`echo $PAPER_TYPE | sed -e 's/ //g' -e 's/PaperType=//'` # get Resolution -RESOLUTION=`sed -n '/\<Resolution/p' $RC_FILE` +RESOLUTION=`gsed -n '/\<Resolution/p' $RC_FILE` RESOLUTION=`echo $RESOLUTION | sed -e 's/ //g' -e 's/Resolution=//'` # get paper size ----8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<----
----8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<---- MFC3820JN:\ :mx=0:\ :sd=/var/spool/lpd/MFC3820JN:\ :sh:\ :rm=MFC3820JN:rp=lp:\ :if=/usr/compat/linux/usr/local/Brother/lpd/filterMFC3820JN: ----8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<----
/etc/rc.d/lpd restart
・ CUPS 環境で使う場合は 7. と 8. はやんなくていいです。
・ LPD 用の環境構築が終わったら、いよいよ CUPS Wrapper の install に移るわけです。
rpm2cpio cupswrapperMFC3820JN-1.0.0-1.i386.rpm | ( cd /usr/compat/linux/ ; cpio -id --quiet )
rpm -qp --scripts cupswrapperMFC3820JN-1.0.0-1.i386.rpm > script.cups
と書き換える。/usr/share/cups → /usr/local/share/cups /usr/lib/cups → /usr/local/libexec/cups /usr/local/Brother/filter → /usr/local/share/Brother/filter /usr/bin → /usr/local/bin
----8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<---- --- /usr/compat/linux/usr/local/Brother/cupswrapper/cupswrapperMFC3820JN-1.0.0-dist 2010-02-28 11:24:27.000000000 +0900 +++ /usr/compat/linux/usr/local/Brother/cupswrapper/cupswrapperMFC3820JN-1.0.0 2010-02-28 12:23:52.000000000 +0900 @@ -20,8 +20,8 @@ if("$1" == '-e')then lpadmin -x MFC3820JN - rm -f /usr/share/cups/model/brmfc3820jn_cups.ppd - rm -f /usr/lib/cups/filter/brlpdwrapperMFC3820JN + rm -f /usr/local/share/cups/model/brmfc3820jn_cups.ppd + rm -f /usr/local/libexec/cups/filter/brlpdwrapperMFC3820JN /etc/init.d/cups restart exit(0) endif @@ -37,14 +37,14 @@ echo ' -r : remove printer' exit(0) endif -mkdir -p /usr/local/Brother/filter -mkdir -p /usr/lib/cups/filter +mkdir -p /usr/local/share/Brother/filter +mkdir -p /usr/local/libexec/cups/filter -if(!(-e "/usr/local/Brother/lpd/filterMFC3820JN"))then +if(!(-e "/usr/local/share/Brother/lpd/filterMFC3820JN"))then echo "ERROR : Brother LPD filter is not installed." endif -rm -f /usr/share/cups/model/brmfc3820jn_cups.ppd -set ppd_file_name=/usr/share/cups/model/brmfc3820jn_cups.ppd +rm -f /usr/local/share/cups/model/brmfc3820jn_cups.ppd +set ppd_file_name=/usr/local/share/cups/model/brmfc3820jn_cups.ppd echo '*PPD-Adobe: "4.3"' >>$ppd_file_name echo '*% ' >>$ppd_file_name @@ -607,9 +607,9 @@ echo '*Font US-Roman: Standard "(001.005)" Standard ROM' >>$ppd_file_name echo '' >>$ppd_file_name echo '' >>$ppd_file_name -set brotherlpdwrapper=/usr/lib/cups/filter/brlpdwrapperMFC3820JN +set brotherlpdwrapper=/usr/local/libexec/cups/filter/brlpdwrapperMFC3820JN rm -f $brotherlpdwrapper -echo 'rm -f /usr/lib/cups/filter/brlpdwrapperMFC3820JN' +echo 'rm -f /usr/local/libexec/cups/filter/brlpdwrapperMFC3820JN' echo '#! /bin/csh' >> $brotherlpdwrapper echo '#' >> $brotherlpdwrapper echo '# Brother Print filter ' >> $brotherlpdwrapper @@ -646,7 +646,7 @@ echo '' >> $brotherlpdwrapper echo '' >> $brotherlpdwrapper echo 'if ( `printenv | grep "PPD="` == "") then' >> $brotherlpdwrapper -echo ' set PPD = "/usr/share/cups/model/brmfc3820jn_cups.ppd"' >> $brotherlpdwrapper +echo ' set PPD = "/usr/local/share/cups/model/brmfc3820jn_cups.ppd"' >> $brotherlpdwrapper echo 'endif' >> $brotherlpdwrapper echo '' >> $brotherlpdwrapper echo '' >> $brotherlpdwrapper @@ -973,8 +973,8 @@ echo ' echo "PPD = $PPD" >>$LOGFILE' >> $brotherlpdwrapper echo 'endif' >> $brotherlpdwrapper echo '' >> $brotherlpdwrapper -echo 'if(!(-e /usr/local/Brother/lpd/filterMFC3820JN)) then' >> $brotherlpdwrapper -echo ' echo "ERROR: /usr/local/Brother/lpd/filterMFC3820JN does not exist" >>$LOGFILE' >> $brotherlpdwrapper +echo 'if(!(-e /usr/local/share/Brother/lpd/filterMFC3820JN)) then' >> $brotherlpdwrapper +echo ' echo "ERROR: /usr/local/share/Brother/lpd/filterMFC3820JN does not exist" >>$LOGFILE' >> $brotherlpdwrapper echo ' set errorcode=30' >> $brotherlpdwrapper echo ' exit $errorcode' >> $brotherlpdwrapper echo 'endif' >> $brotherlpdwrapper @@ -987,7 +987,7 @@ echo 'endif' >> $brotherlpdwrapper echo '' >> $brotherlpdwrapper echo '' >> $brotherlpdwrapper -echo 'if(-e "/usr/bin/$BRPRINTCONFIG") then' >> $brotherlpdwrapper +echo 'if(-e "/usr/local/bin/$BRPRINTCONFIG") then' >> $brotherlpdwrapper echo '' >> $brotherlpdwrapper echo ' echo "-------set printer defaults-------" >>&"$LOGFILE"' >> $brotherlpdwrapper echo ' set i = 1' >> $brotherlpdwrapper @@ -1107,7 +1107,7 @@ echo '' >> $brotherlpdwrapper echo '' >> $brotherlpdwrapper echo 'else' >> $brotherlpdwrapper -echo ' echo "WARNING: /usr/bin/$BRPRINTCONFIG does not exist" >>$LOGFILE' >> $brotherlpdwrapper +echo ' echo "WARNING: /usr/local/bin/$BRPRINTCONFIG does not exist" >>$LOGFILE' >> $brotherlpdwrapper echo ' set errorcode=31' >> $brotherlpdwrapper echo 'endif' >> $brotherlpdwrapper echo '' >> $brotherlpdwrapper @@ -1115,7 +1115,7 @@ echo '' >> $brotherlpdwrapper echo '' >> $brotherlpdwrapper echo 'if($DEBUG < 10) then' >> $brotherlpdwrapper -echo ' cat $INPUT_TEMP_PS | /usr/local/Brother/lpd/filterMFC3820JN' >> $brotherlpdwrapper +echo ' cat $INPUT_TEMP_PS | /usr/local/share/Brother/lpd/filterMFC3820JN' >> $brotherlpdwrapper echo '' >> $brotherlpdwrapper echo ' if($LOGLEVEL > 2) then' >> $brotherlpdwrapper echo ' if($LOGFILE != "/dev/null") then' >> $brotherlpdwrapper @@ -1133,8 +1133,8 @@ echo '' >> $brotherlpdwrapper echo '' >> $brotherlpdwrapper chmod a+x $brotherlpdwrapper -chmod a+w /usr/local/Brother/inf/brMFC3820JNrc -chmod a+w /usr/local/Brother/inf +chmod a+w /usr/local/share/Brother/inf/brMFC3820JNrc +chmod a+w /usr/local/share/Brother/inf if( -e /etc/init.d/lpd) then /etc/init.d/lpd stop endif ----8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<----
----8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<---- @@ -1143,5 +1143,5 @@ endif /etc/init.d/cups restart sleep 2s -lpadmin -p MFC3820JN -E -v usb:/dev/usb/lp0 -m brmfc3820jn_cups.ppd +lpadmin -p MFC3820JN -E -v lpd://MFC3820JN/lp -m brmfc3820jn_cups.ppd exit(0) ----8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<---- ^^^^^^^^^^^^^^^^^^
どうせ LPD と CUPS は排他利用なので、chmod するかわりに /usr/compat/linux/usr/local/Brother 以下を cups:cups に chown してもいいやね。chmod 755 /usr/compat/linux/usr/local/Brother chmod 777 /usr/compat/linux/usr/local/Brother/inf chmod 755 /usr/compat/linux/usr/local/Brother/lpd
「/etc/init.d/cups が見つかんねーよ!」とか言われるがキニシナイ。あと、なんか文字化けした prompt が出てくるのは password の要求。unsetenv LANG するか env LANG= しておくと幸せになれるかも。csh /usr/compat/linux/usr/local/Brother/cupswrapper/cupswrapperMFC3820JN-1.0.0 -i
lpinfo -m
lpinfo -v
lpoptions -d MFC3820JN lpoptions -d MFC3820JN -o ppi=1200 lpoptions -d MFC3820JN -o media=A4
・
なんか lpoptions で設定したつもりの解像度の default 値が反映されていないような気がする。謎。
メールはこちらへ...[五反田 秋彦 as (五) / a-gota @(at) agt .(dot) ne .(dot) jp]
この日記は、GNSを使用して作成されています。作製者の GORRY さんに感謝 m(__)m。