9.7 Алдааг олж засварлах

lptest(1) програмын тусламжтайгаар энгийн шалгах үйлдэл хийж дуусахад та зөв хэвлэгдсэн хүссэн үр дүнд биш харин дараах алдаануудтай тулгарч болзошгүй юм:

Хэвлэж болж байна, гэхдээ хэсэг хугацааны дараа юм уу эсвэл анхнаасаа хуудасны тал хэсгийг хэвлээд зогсох.

Хэвлэгч дээд хэсгийг нь хэвлээд хэсэг хугацааны дараа юу ч хийхгүй болох. Ийм үед та хэвлэгч дээрх PRINT REMAINING эсвэл FORM FEED товч дарж үлдсэн хэсгийг нь хэвлэх эсэхийг харах хэрэгтэй.

Хэрэв хэвлэгч өөр хэвлэх юм байгаа эсэхийг хүлээгээд байгаа тийм нөхцөлд орвол хэвлэгч рүү FORM FEED тэмдгийг илгээснээр (эсвэл ямар нэгэн юм) уг асуудал шийдэгдэж болох юм. Өөрийнхөө түр хадгалагч дээр орж ирсэн өгөгдлийг шууд хэвлэдэг хэвлэгчдэд иймэрхүү арга хэрэглэхэд хангалттай билээ. Хэрэв өмнөх хуудас нь хуудасны тал хүртэл байгаад дараагийн хуудас нь шинээр хуудаснаас эхлэх байсан болоод дууссан хуудасны тал хэсгээс хэвлэхгүй байгаад байх нөхцөл үүссэн байж болзошгүйг шалгахад мөн илүүдэхгүй.

/usr/local/libexec/if-simple бүрхүүлийн скриптэд оруулсан дараах оруулга нь хэвлэх үйлдлийн дараа хэвлэгч рүү хуудас дууссан тэмдэгт илгээнэ:

#!/bin/sh
#
# if-simple - Simple text input filter for lpd
# Installed in /usr/local/libexec/if-simple
#
# Simply copies stdin to stdout.  Ignores all filter arguments.
# Writes a form feed character (\f) after printing job.

/bin/cat && printf "\f" && exit 0
exit 2
Гэхдээ энэ нь “хачирхалтай нөлөө” үүсгэж болох юм.

Та дараах зүйлсийг хуудсан дээрээ харах болно:

!"#$%&'()*+,-./01234
                "#$%&'()*+,-./012345
                                 #$%&'()*+,-./0123456

Энэ нь таныг шинэ мөр илэрхийлдэг тэмдэгт хөрвүүлэгдээгүй улмаас өнөөх хачирхалтай нөлөөний хохирогч нь болсон байна гэдгийг илэрхийлж байна. UNIX® төрлийн үйлдлийн системүүд мөр дууссаныг илэрхийлэхийн тулд ASCII-н 10 гэсэн дугаарыг буюу line feed (LF) гэсэн нэг л тэмдэгт хэрэглэдэг. Харин MS-DOS®, OS/2®, болон бусад үйлдлийн системүүд ASCII-н 10 ба ASCII-н 13 (CR буюу шинэ мөр эхлэх) гэсэн хоёр тэмдгийг хамтад нь хэрэглэдэг. Ихэнх хэвлэгч нар шинэ мөрийг илэрхийлэхдээ MS-DOS-н шийдлийг хэрэглэдэг.

Хэрэв та FreeBSD-с хэвлэхээр бол таны текстүүд зөвхөн мөр дууссан тэмдэгт л агуулсан байгаа. Мөр дууссан тэмдэгтийг хэвлэгч хүлээж авангуутаа хуудсаа нэг мөрөөр дээшлүүлсэн мөртлөө яг тухайн байрлалдаа дараагийн тэмдэгт ирэхийг хүлээж зогсдог. Энэ үед л шинэ мөр гэсэн тэмдэгт ирж байж хэвлэгчийн толгой зүүн хэсэг рүүгээ гүйдэг билээ.

FreeBSD нь дараах маягаар хэвлэхийг хэвлэгчээс хүсдэг:

Хэвлэгч CR тэмдэг хүлээж авлаа Хэвлэгч CR гэж хэвлэв
Хэвлэгч LF тэмдэгт хүлээж авлаа Хэвлэгч CR + LF гэж хэвлэх

Үүнийг залруулах хэдэн арга бий:

  • Хэвлэгчийнхээ тохируулгын цонхыг ашиглан эдгээр тэмдэгтийг өөрөөр хөрвүүлж ойлгохоор тохируулах. Иймэрхүү тохиргоо байдаг эсэхийг хэвлэгчийнхээ гарын авлагад харах хэрэгтэй.

    Note: Хэрэв та системээ шинээр ачаалахдаа FreeBSD-ээс өөр давхар суусан үйлдлийн систем рүү орвол тухайн үйлдлийн системдээ тохируулж CR болон LF тэмдэгтийн хөрвүүлэх тохиргоог дахин хийх хэрэг гарч магадгүй юм.

  • FreeBSD-н цуваа холболтын таниулагч програм нь автоматаар LF тэмдэгтийг CR+LF тэмдэгт рүү хувиргадаг. Мэдээж энэ нь зөвхөн цуваа холболтоор холбогдсон хэвлэгч дээр ажиллана. Энэ шинж чанарыг идэвхжүүлэхийн тулд ms# хэрэгслийг ашиглан onlcr горимыг хэвлэгчийн /etc/printcap файл дотор оруулж өгөх хэрэгтэй.

  • Хэвлэгчийн алгасаж болдог escape code тэмдэгт илгээж хэвлэгчийг LF тэмдэгт илгээгдсэн гэж ойлгуулж болох юм. Хэвлэгчийн гарын авлагаас ийм тэмдэгт дэмждэг эсэхийг харах хэрэгтэй. Хэрэв та тохирох тийм тэмдэгт олсон бол текст шүүгч програмыг өөрчилж эхлээд тэр тэмдэгтийг илгээгээд дараа нь хэвлэх зүйлсийг илгээхээр засах хэрэгтэй.

    Энд Hewlett-Packard PCL хэвлэгчийн ойлгодог алгасаж болдог тэмдэгтийн текст шүүгч жишээг татаж үзүүлэв. Энэ шүүгч нь LF тэмдэгтийг LF ба CR гэж хөрвүүлээд хэвлэгч рүү хэвлэх ажлыг илгээж дараа нь мөр дууссан тэмдэгтийг илгээж хэвлэх ажил дууссаныг мэдэгддэг. Энэ нь бараг бүх Hewlett Packard хэвлэгчдэд тохирдог.

    #!/bin/sh
    #
    # hpif - Simple text input filter for lpd for HP-PCL based printers
    # Installed in /usr/local/libexec/hpif
    #
    # Simply copies stdin to stdout.  Ignores all filter arguments.
    # Tells printer to treat LF as CR+LF.  Ejects the page when done.
    
    printf "\033&k2G" && cat && printf "\033&l0H" && exit 0
    exit 2
    

    Энд orchid нэртэй компьютерийн /etc/printcap файлын жишээг харуулж байна. Энд teak нэртэй Hewlett Packard LaserJet 3Si хэвлэгчийг зэрэгцээ холболтоор холбосон байгаа. Энд өмнө үзүүлсэн скриптийг текст шүүгчээ болгож хэрэглэсэн байгаа:

    #
    #  /etc/printcap for host orchid
    #
    teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
            :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
            :if=/usr/local/libexec/hpif:
    
Энэ нь мөрүүдийг давхарлан хэвлэж байх.

Хэвлэгч мөрөө дээшлүүлсэнгүй. Бүх мөрүүд дээд мөрөнд давхарлагдаж хэвлэгдэв.

Энэ хүндрэл нь өнөөх хачирхалтай нөлөөний “эсрэг” нөлөөлөл бөгөөд арай бага тохиолддог. FreeBSD-н мөрийн төгсгөл илэрхийлсэн LF тэмдэгт нь CR тэмдэгтээр солигдоод мөрөө шинээр ахиулалгүй хуудасны эхэнд очиж дахин хэвлэчихсэн байна.

Хэвлэгчийн тохируулгын цонх ашиглан LF болон CR тэмдэгтүүдийг дараах маягаар хөрвүүлэхээр тохируулах хэрэгтэй:

Хэвлэгчийн хүлээж авалт Хэвлэгчийн хэвлэлт
CR CR
LF CR + LF
Хэвлэгч тэмдэгт гээх үзэгдэл.

Хэвлэгч хэвлэх үедээ мөрөнд зарим тэмдэгтүүдийг хэвлэхгүй болдог. Энэ хүндрэл нь хэвлэгч ажиллахгүй болох эсвэл маш их тэмдэгт гээж эхлэх зэргээс илүү дор үзэгдэл юм.

Хүндрэлийн шалтгаан нь цуваа холболтоор компьютерийн илгээсэн хурдтай хэвлэгчийн хэвлэх хурд таарахгүй байгаагаас үүсдэг (ийм хүндрэл зэрэгцээ холбосон хэвлэгчдэд тулгардаггүй). Энэ хүндрэлийг давах хоёр арга бий:

  • Хэрэв хэвлэгч нь XON/XOFF гэсэн урсгал зохицуулагчийг дэмждэг бол ms# шинж чанарыг ашиглан ixon горимыг FreeBSD дээр хэрэглэхээр тааруулах хэрэгтэй.

  • Хэрэв хэвлэгч нь Request to Send (Илгээхийг Хүсэх) / Clear to Send (Илгээхдээ цэвэрлэх) hardware handshake буюу тоног төхөөрөмжийн тохиролцоог (ихэвчлэн RTS/CTS гэгддэг) дэмждэг бол ms# боломжид crtscts горимыг зааж өгөх хэрэгтэй. Тоног төхөөрөмжийн урсгал зохицуулагчид тааруулж цуваа холболтоо зөв холбосон эсэхээ магадлах хэрэгтэй.

Хог хэвлэх үзэгдэл.

Хэвлэгч хүссэн текстийг хэвлэхийн оронд хог хэвлээд эхлэв.

Энэ нь цуваа холболт буруу холбогдсоноос үүсдэг үзэгдэл. Дамжуулах хурдны давтамжийн br шинж чанарыг шалгаад ms# шинж чанараар өгөгдөл тэгшилж илгээнэ гэх зэрэг /etc/printcap файлд байгаа тохиргоотой тохирч буй эсэхийг шалгах хэрэгтэй.

Юу ч болохгүй байх.

Хэрэв юу ч болохгүй байвал хүндрэл нь хэвлэгчид биш FreeBSD-д байж болох юм. /etc/printcap файлд бүртгэл файл хэрэглэнэ гэсэн (lf) шинж чанарыг нэмэх хэрэгтэй. Жишээ нь энд rattan оруулганд lf шинж чанар нэмж байна:

rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:\
        :lf=/var/log/rattan.log

Тэгээд дахиад хэвлэх гээд оролдоод үз. Гарч болзошгүй алдааны мэдэгдэл байгаа эсэхийг бүртгэлийн файлаас (бидний жишээн дээр /var/log/rattan.log) шалгах хэрэгтэй. Мэдэгдлүүдээс хамаарч асуудлыг засахыг оролдох хэрэгтэй.

Хэрэв та lf шинж чанар зааж өгөөгүй бол, LPD нь /dev/console файлыг анхдагч гэж авч үзнэ.

Энэ болон бусад баримтуудыг ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ хаягаас татаж авч болно.

FreeBSD-ийн талаар <questions@FreeBSD.org> хаягтай холбоо барихаасаа өмнө баримтыг уншина уу.
Энэ бичиг баримттай холбоотой асуулт байвал <doc@FreeBSD.org> хаягаар цахим захидал явуулна уу.
Энэ бичиг баримтын орчуулгатай холбоотой асуулт байвал <admin@mnbsd.org> хаягаар цахим захидал явуулна уу.