---
title: Бүлэг 10. Хэвлэлт
part: хэсэг II. Нийтлэг асуудлууд
prev: books/handbook/kernelconfig
next: books/handbook/linuxemu
showBookMenu: true
weight: 13
params:
  path: "/books/handbook/printing/"
---

[[printing]]
= Хэвлэлт
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumoffset: 10
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/priting/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[printing-synopsis]]
== Ерөнхий агуулга

FreeBSD дээр хамгийн хуучин цохидог хэвлэгчдээс авахуулаад хамгийн сүүлийн хэвлэгчид хүртэл, мөн тэдгээрийн хооронд байгаа хэвлэгчид зэрэг төрөл бүрийн хэвлэгчдийг хэвлэхэд ашиглаж болдог бөгөөд энэ нь таны ажиллаж байгаа програмуудаас өндөр чанарын хэвлэсэн гаралтыг бүтээх боломж олгох юм.

FreeBSD-г бас сүлжээн дэх хэвлэх сервер болгон тохируулж бас болдог; энэ боломжид FreeBSD нь бусад FreeBSD компьютерууд, Windows(R) болон Mac OS(R) хостууд зэрэг төрөл бүрийн бусад компьютеруудаас хэвлэх ажлуудыг хүлээн авдаг. FreeBSD нь зөвхөн нэг ажлыг тухайн үед хэвлэхийг баталгаажуулж ихэнх хэвлэлтийг аль хэрэглэгчид болон машинууд хийж байгаа талаар статистикууд цуглуулж хэний хэвлэсэн зүйл хэнийх болохыг үзүүлэх "сурталчилгаа" хуудсуудыг бүтээх зэрэг олон үйлдлийг хийж чаддаг.

Энэ бүлгийг уншиж дууссаны дараа та дараах зүйлсийг мэдэх болно:

* FreeBSD-ийн хэвлэгчийн түр хадгалагчийг хэрхэн тохируулах талаар.
* Ирж байгаа баримтуудыг таны хэвлэгчид ойлгодог хэвлэх хэлбэршилтэд оруулж хөрвүүлэх зэрэг тусгай хэвлэх ажлуудыг өөрөөр зохицуулдаг хэвлэх шүүлтүүрүүдийг хэрхэн суулгах талаар.
* Толгой эсвэл сурталчилгаа хуудаснуудыг өөрийн хэвлэх зүйл дээрээ хэрхэн идэвхжүүлэх талаар.
* Бусад компьютерууд уруу холбогдсон хэвлэгчдээр хэрхэн хэвлэх талаар.
* Сүлжээнд шууд холбогдсон хэвлэгчдээр хэрхэн хэвлэх талаар.
* Хэвлэх ажлуудын хэмжээг хязгаарлах болон зарим хэрэглэгчдийг хэвлэхийг болиулах зэрэг хэвлэгчийн хязгаарлалтуудыг хэрхэн хянах талаар.
* Хэвлэгчийн статистикууд болон хэвлэгчийн хэрэглээнд зориулсан бүртгэлийг хэрхэн хадгалж байх талаар.
* Хэвлэх асуудлуудыг хэрхэн олж засварлах талаар.

Энэ бүлгийг уншихаасаа өмнө, та дараах зүйлсийг мэдэх шаардлагатай:

* Шинэ цөмийг хэрхэн тохируулж суулгах талаар мэдэх (crossref:kernelconfig[kernelconfig,FreeBSD цөмийг тохируулах нь]).

[[printing-intro-spooler]]
== Танилцуулга

FreeBSD дээр хэвлэгчдийг ашиглахын тулд та тэдгээрийг LPD түр хадгалах систем буюу ердөө л LPD гэж бас нэрлэгддэг Берклигийн шугаман хэвлэгчийн түр хадгалах системтэй ажиллахаар болгож тохируулж болох юм. Энэ нь FreeBSD дээрх стандарт хэвлэгч хянагч систем юм. Энэ бүлэг нь LPD-г танилцуулж түүний тохиргоог тайлбарлах болно.

Хэрэв та LPD юм уу эсвэл бусад хэвлэгчийн түр хадгалах системийг мэддэг бол <<printing-intro-setup,Үндсэн тохируулга>> хэсэг уруу шууд орохыг хүсэж болох юм.

LPD нь хостын хэвлэгчдийн талаар бүгдийг хянадаг. Энэ нь хэд хэдэн зүйлсийг хариуцдаг:

* Залгагдсан хэвлэгчид болон сүлжээн дэх өөр хостуудад залгагдсан хэвлэгчдэд хандах хандалтыг хянадаг.
* Файлууд хэвлэхээр өгөх боломжийг хэрэглэгчдэд зөвшөөрдөг; эдгээр өгөлтүүд нь _jobs_ буюу _ажлууд_ гэгддэг.
* Хэвлэгч болгоны хувьд _queue_ буюу дарааллыг зохицуулж олон хэрэглэгчид нэгэн зэрэг хэвлэгчид хандах хандалтаас сэргийлдэг.
* Хэрэглэгчид хэвлэсэн тоо томшгүй олон юмнаас өөрсдийн хэвлэсэн ажлуудыг хялбархан олдог байхын тулд энэ нь _толгой хуудаснуудыг_ (бас _сурталчилгаа_ эсвэл _тэсрэлт_ хуудсууд гэгддэг) хэвлэдэг.
* Цуваа портууд дээр холбогдсон хэвлэгчдийн холбооны параметрүүдэд анхаарлаа хандуулдаг.
* Өөр хост дээр байгаа LPD түр хадгалагч уруу сүлжээгээр ажлууд илгээж чаддаг.
* Төрөл бүрийн хэвлэгчийн хэлнүүд эсвэл хэвлэгчийн боломжуудад зориулж хэвлэх ажлуудыг хэлбэршүүлэх тусгай шүүлтүүрүүдийг ажиллуулж чаддаг.
* Хэвлэгчийн хэрэглээг бүртгэж чаддаг.

Тохиргооны файл ([.filename]#/etc/printcap#) болон тусгай шүүлтүүр програмууд ашиглан олон төрлийн хэвлэгч тоног төхөөрөмжүүдийн хувьд дээр дурдсануудын заримууд болон бүгдийг хийдэг байхаар LPD системийг та идэвхжүүлж чадна.

[[printing-intro-why]]
=== Яагаад заавал түр хадгалагчийг ашиглах ёстой гэж

Ганц хэрэглэгчийн систем дээр түр хадгалагч хэрэгтэй хэвээр байдаг бөгөөд түр хадгалагчийг ашиглах ёстой юм, учир нь:

* LPD нь ажлуудыг ард хэвлэдэг; та өгөгдлийг хэвлэгч уруу хуулагдахыг хүлээх хэрэггүй юм.
* LPD нь огноо/цаг бүхий толгой нэмэх эсвэл тусгай файлын хэлбэршилтээс (TeX DVI файл зэрэг) хэвлэгчийн ойлгох хэлбэршилт уруу хөрвүүлдэг шүүлтүүрүүдээр дамжуулан хэвлэгдэх ажлыг тохиромжтойгоор ажиллуулдаг. Та гараараа эдгээр алхмуудыг хийх шаардлагагүй юм.
* Хэвлэх боломж бүхий чөлөөтэй, арилжааны олон програмууд нь таны систем дээрх түр хадгалагчтай ярилцахыг ихэвчлэн хүлээж байдаг. Түр хадгалагч системийг тохируулснаар танд байгаа болон таны сүүлд суулгаж болох бусад програм хангамжуудыг илүү амархнаар та дэмжих болно.

[[printing-intro-setup]]
== Үндсэн тохируулга

LPD түр хадгалах системтэй хэвлэгчдийг ашиглахын тулд өөрийн хэвлэгчийн тоног төхөөрөмж болон LPD програм хангамжийг тохируулах хэрэгтэй болно. Энэ баримт нь тохиргооны хоёр түвшинг тайлбарладаг:

* Хэвлэгчийг хэрхэн холбохыг сурахын тулд <<printing-simple,Хэвлэгчийн хялбар тохиргоо>> хэсгийг үзэж LPD-д хэрхэн түүнтэй холбоо тогтоохыг хэлж хэвлэгч уруу цэвэр текст файлуудыг хэвлэх.
* Төрөл бүрийн тусгай файлын хэлбэршилтүүдийг хэрхэн хэвлэх, толгой хуудаснуудыг хэрхэн хэвлэх, сүлжээгээр хэрхэн хэвлэх, хэвлэгчдэд хандах хандалтыг хэрхэн хянах болон хэрхэн хэвлэгчийн бүртгэлийг хийхийг сурахын тулд <<printing-advanced,Хэвлэгчийн илүү нарийн тохиргоо>> хэсгийг үзэх.

[[printing-simple]]
=== Хэвлэгчийн хялбар тохиргоо

Энэ хэсэг нь хэвлэгчийг ашиглахын тулд хэвлэгчийн тоног төхөөрөмж болон LPD програм хангамжийг хэрхэн тохируулахыг хэлж өгнө. Энэ нь үндсэн ойлголтуудад сургана:

* <<printing-hardware,Тоног төхөөрөмжийн тохиргоо>> хэсэг нь хэвлэгчийг таны компьютер дээрх порт уруу холбох зарим заавруудыг өгдөг.
* <<printing-software,Програм хангамжийн тохиргоо>> хэсэг нь LPD түр хадгалагчийн тохиргооны файлыг ([.filename]#/etc/printcap#) хэрхэн тохируулахыг үзүүлдэг.

Хэвлэх өгөгдлийг хүлээн авахдаа компьютерийн локал интерфэйсүүдийг биш сүлжээний протоколыг ашигладаг хэвлэгчийг та тохируулж байгаа бол <<printing-advanced-network-net-if,Сүлжээнд холбогдсон өгөгдлийн урсгалын интерфэйсүүдтэй хэвлэгчид>> хэсгийг үзнэ үү.

Энэ хэсэг нь "Хэвлэгчийн хялбар тохиргоо" гэгддэг боловч яг үнэндээ нэлээн төвөгтэй юм. Хэвлэгчийг өөрийн компьютер болон LPD түр хадгалагчтай цуг ажиллуулна гэдэг хамгийн хэцүү хэсэг юм. Толгой хуудаснууд болон бүртгэл хийх зэрэг дэвшилтэт тохируулгууд нь хэвлэгчийг ажиллуулсны дараа нэлээн амархан байдаг.

[[printing-hardware]]
==== Тоног төхөөрөмжийн тохиргоо

Энэ хэсэг нь өөрийн PC-тэй хэвлэгч холбох төрөл бүрийн аргуудын талаар хэлдэг. Энэ нь портууд ба кабелиудын талаар болон FreeBSD-г хэвлэгчтэй харилцдаг болгохын тулд танд хэрэг болох цөмийн тохиргооны талаар бас өгүүлнэ.

Хэрэв та өөрийн хэвлэгчийг аль хэдийн холбосон бөгөөд өөр үйлдлийн систем дээр түүгээр амжилттай хэвлэсэн бол <<printing-software,Програм хангамжийн тохиргоо>> хэсэг уруу алгасаж болох юм.

[[printing-ports]]
===== Портууд ба кабелиуд

PC дээр ашиглагдах зориулалттай худалдаалж байгаа хэвлэгчид нь ерөнхийдөө доорх гурван интерфэйсийн аль нэг юм уу эсвэл олон интерфэйстэй ирдэг:

* _Цуваа_ интерфэйсүүд буюу бас RS-232 эсвэл COM портууд гэгддэг интерфэйсүүд нь өгөгдлийг хэвлэгч уруу илгээхдээ таны компьютер дээрх цуваа портыг ашигладаг. Цуваа интерфэйсүүд нь компьютерийн аж үйлдвэрлэлд түгээмэл байдаг бөгөөд кабелиуд нь бэлэн байж байдгаас гадна хийхэд хялбар байдаг. Цуваа интерфэйсүүд нь заримдаа тусгай кабелиудыг шаарддаг бөгөөд танаас төвөгтэй холбооны сонголтуудыг тохируулахыг шаардаж болох юм. Ихэнх PC-ний цуваа портууд нь хамгийн их дамжуулах хурдны хувьд 115200 bps хурдтай байдаг бөгөөд их том график хэвлэх ажлыг үүгээр хийх нь практикийн хувьд төвөгтэй болгодог.
* _Зэрэгцээ_ интерфэйсүүд нь өгөгдлийг хэвлэгч уруу илгээхдээ таны компьютерийн зэрэгцээ портыг ашигладаг. Зэрэгцээ интерфэйсүүд нь PC-ийн зах зээлд нийтлэг байдаг бөгөөд RS-232 цуваагаас илүү хурдан байдаг. Кабелиуд нь байдаг боловч гараар хийхэд илүү төвөгтэй байдаг. Зэрэгцээ интерфэйсүүдэд холбооны сонголтууд ихэвчлэн байдаггүй болохоор тэдгээрийн тохиргоог маш хялбар болгодог.
+ 
Зэрэгцээ интерфэйсүүд нь хэвлэгчийн холбогчийн төрлийн нэрээр нэрлэгдсэн "Centronics" интерфэйсүүд гэж заримдаа хэлэгддэг.
* Universal Serial Bus буюу Универсал Цуваа Шугам гэгддэг USB интерфэйсүүд нь зэрэгцээ болон RS-232 цуваа интерфэйсүүдээс бүр илүү хурдаар ажиллаж чаддаг. Кабелиуд нь хялбар бөгөөд хямд байдаг. USB нь RS-232 болон Зэрэгцээ интерфэйсүүдээс хэвлэхийн хувьд илүү хүчирхэг боловч UNIX(R) системүүд дээр тийм ч сайн дэмжигдсэн байдаггүй. Энэ асуудлыг тойрон гарахын тулд олон хэвлэгчид байдаг USB болон Зэрэгцээ интерфэйсүүдтэй тийм хэвлэгч худалдан авах явдал юм.

Ерөнхийдөө зэрэгцээ интерфэйсүүд нь зөвхөн нэг талын холбоог (компьютераас хэвлэгч уруу) санал болгодог бол цуваа болон USB нь хоёр талын холбоог өгдөг. Шинэ зэрэгцээ портууд (EPP болон ECP) болон хэвлэгчид нь IEEE-1284 нийцтэй кабель ашиглаж байгаа бол FreeBSD дээр хоёр тал уруу чиглэсэн холбоог хийж чаддаг.

Зэрэгцээ портоор хэвлэгч уруу чиглэсэн хоёр талын холбоог ерөнхийдөө хоёр аргын аль нэгээр хийдэг. Эхний арга нь хэвлэгчийн ашигладаг хувийн хэлээр ярьдаг FreeBSD-ийн өөрчлөн бүтээсэн хэвлэгчийн драйверийг хэрэглэдэг. Энэ нь бэхэн хэвлэгчдэд нийтлэг байдаг бөгөөд бэхний түвшин болон бусад төлвийн мэдээллийг үзүүлэхэд хэрэглэгддэг. Хоёр дахь аргыг хэвлэгч PostScript(R)-г дэмждэг үед ашигладаг.

PostScript(R) ажлууд нь жинхэнэдээ хэвлэгч уруу илгээсэн програмууд юм; тэдгээр нь цаас бүтээх ерөөсөө шаардлагагүй бөгөөд үр дүнгүүдийг компьютер уруу шууд буцааж болох юм. PostScript(R) нь PostScript(R) програм дахь алдаанууд, эсвэл цаас гацсан зэрэг асуудлуудыг компьютерт хэлэхийн тулд хоёр талын холбоог бас ашигладаг. Таны хэрэглэгчид тийм мэдээллийг аваад талархах байх. Бас PostScript(R) хэвлэгчийн хувьд үр ашигтай бүртгэл хийх хамгийн шилдэг арга нь хоёр талын холбоог шаарддаг: хэвлэгчээс хуудасны тоог (өөрийн амьдралын хугацаандаа нийт хичнээн хуудас хэвлэсэн талаар) та асууж дараа нь хэрэглэгчийн ажлыг илгээж тэгээд дахиад хуудасны тоог асуудаг. Хоёр утгын нэгээс нөгөөг хасаад хэрэглэгчээс хичнээн цаасны төлбөр авахыг та мэдэх болно.

[[printing-parallel]]
===== Зэрэгцээ портууд

Хэвлэгчийг зэрэгцээ интерфэйс ашиглаад залгахын тулд Centronics кабелийг хэвлэгч болон компьютерийн хооронд холбоно. Хэвлэгч, компьютер эсвэл хоёулантай нь цуг ирсэн зааврууд танд бүрэн гүйцэд заавар өгөх ёстой.

Компьютер дээрээ аль зэрэгцээ портыг ашигласнаа санах хэрэгтэй. Эхний зэрэгцээ порт нь FreeBSD-д [.filename]#ppc0# байх бөгөөд хоёр дахь [.filename]#ppc1# гэх мэтээр байна. Хэвлэгчийн төхөөрөмжийн нэр мөн адил схемийг ашигладаг: [.filename]#/dev/lpt0# нь эхний зэрэгцээ порт дээрх хэвлэгч гэх мэтээр байна.

[[printing-serial]]
===== Цуваа портууд

Цуваа интерфэйсүүдийг ашиглан хэвлэгчийг залгахдаа зөв цуваа кабелийг хэвлэгч болон компьютерийн хооронд холбоно. Хэвлэгч, компьютер эсвэл хоёулантай нь цуг ирсэн зааврууд танд бүрэн гүйцэд заавар өгөх ёстой.

Хэрэв та "зөв цуваа кабель" нь юу вэ гэдэгт эргэлзэж байвал та дараах боломжуудаас аль нэгийг туршиж үзэхийг хүсэж болох юм:

* _Модемийн_ кабель нь кабелийн нэг талд байгаа холбогчийн зүү бүрийг нөгөө талд байгаа холбогчийн харгалзах зүүнд шулуухан холбодог. Энэ төрлийн кабелийг "DTE-ээс DCE" кабель гэж бас нэрлэдэг.
* _null-модем_ кабель нь зарим зүүнүүдийг шууд шулуухнаар, заримуудыг нь хооронд нь солбидог (жишээ нь өгөгдлийг хүлээн авахын тулд өгөгдлийг илгээдэг) бөгөөд заримыг нь дотроо холбогч бүрийн таг дотор богино холбодог. Энэ төрлийн кабелийг "DTE-ээс DTE" кабель гэж бас нэрлэдэг.
* Зарим нэг ховор хэвлэгчдэд шаардагддаг _цуваа хэвлэгчийн_ кабель нь null-модем кабельтай адил боловч дотроо богино холбохын оронд зарим дохионуудыг өөрсдийн эсрэг талдаа илгээдэг.

Та хэвлэгчийн хувьд холбооны параметрүүдийг бас тохируулах хэрэгтэй бөгөөд эдгээрийг хэвлэгч дээрх нүүрэн талын хяналтууд юм уу эсвэл DIP шилжүүлэгчдээр хийдэг. Таны компьютер болон хэвлэгч дэмждэг хамгийн их `bps`-ийг (bits per second буюу секундэд дамжих битийн тоо, заримдаа _baud хурд_) сонгох хэрэгтэй. 7 юм уу эсвэл 8 өгөгдлийн бит; байхгүй (none), тэгш (even), эсвэл сондгой (odd) parity; болон 1 эсвэл 2 стоп битийг сонгох хэрэгтэй. Бас урсгал хянах протоколыг сонгох хэрэгтэй: байхгүй (none) юм уу аль эсвэл XON/XOFF (бас "in-band" эсвэл "software" гэгддэг) урсгал хяналтыг сонгох хэрэгтэй. Дараах програм хангамжийн тохиргоонд зориулж эдгээр тохируулгуудыг санах хэрэгтэй.

[[printing-software]]
==== Програм хангамжийн тохиргоо

Энэ хэсэг нь FreeBSD дээр LPD түр хадгалах системээр хэвлэхэд шаардлагатай програм хангамжийн тохируулгыг тайлбарладаг. 

Энд шаардлагатай алхмуудыг дурдав:

[.procedure]
====
. Хэвлэгчийн хувьд ашиглаж байгаа портод зориулж шаардлагатай бол өөрийн цөмийг тохируулна; Таны юу хийх ёстойг <<printing-kernel,Цөмийн тохиргоо>> хэсэг хэлж өгнө.
. Хэрэв та зэрэгцээ порт ашиглаж байгаа бол зэрэгцээ портынхоо хувьд холбооны горимыг тохируулах хэрэгтэй; <<printing-parallel-port-mode,Зэрэгцээ портын хувьд холбооны горимыг тохируулах нь>> хэсгээс дэлгэрэнгүйг үзээрэй.
. Үйлдлийн систем өгөгдлийг хэвлэгч уруу илгээж чадаж байгаа эсэхийг тест хийнэ. Үүнийг хэрхэн хийх тухай зарим нэгэн зөвлөгөөнүүдийг <<printing-testing,Хэвлэгчийн холбоонуудыг шалгах нь>> хэсэг өгдөг.
. [.filename]#/etc/printcap# файлыг засаж хэвлэгчдээ зориулж тохируулна. Үүнийг хэрхэн хийх талаар сүүлд нь энэ бүлгээс олох болно.
====

[[printing-kernel]]
===== Цөмийн тохиргоо

Үйлдлийн системийн цөм тусгайлсан хэдэн төхөөрөмжүүдтэй ажиллахаар эмхэтгэгдсэн байдаг. Таны хэвлэгчид зориулагдсан цуваа болон зэрэгцээ интерфэйс нь эдгээрийн нэг хэсэг юм. Тийм болохоор хэрэв таны цөм ингэж тохируулагдаагүй бол нэмэлт цуваа эсвэл зэрэгцээ портын дэмжлэгийг нэмэх хэрэгтэй байж болох юм.

Таны ашиглаж байгаа цөм цуваа интерфэйсийг дэмжиж байгаа эсэхийг мэдэхийн тулд доор дурдсаныг бичнэ:

[source,shell]
....
# grep sioN /var/run/dmesg.boot
....

Энд байгаа _N_ нь тэгээс эхлэх цуваа портын дугаар юм. Хэрэв та доор дурдсантай төстэй гаралтыг харвал:

[source,shell]
....
sio2 at port 0x3e8-0x3ef irq 5 on isa
sio2: type 16550A
....

цөм нь портыг дэмждэг гэсэн үг юм.

Цөм нь зэрэгцээ интерфэйсийг дэмждэг эсэхийг мэдэхийн тулд доор дурдсаныг бичнэ:

[source,shell]
....
# grep ppcN /var/run/dmesg.boot
....

Энд байгаа _N_ нь тэгээс эхлэх зэрэгцээ портын дугаар юм. Хэрэв та доор дурдсантай төстэй гаралтыг харвал:

[source,shell]
....
ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/8 bytes threshold
....

цөм нь портыг дэмждэг гэсэн үг юм.

Таны хэвлэгчдээ зориулан ашиглаж байгаа зэрэгцээ эсвэл цуваа портыг үйлдлийн систем таньж хэрэглэдэг байхын тулд та өөрийн цөмийг дахин тохируулах хэрэгтэй болж болох юм.

Цуваа портод зориулж дэмжлэг нэмэхийн тулд цөмийн тохиргооны тухай хэсгийг үзнэ үү. Зэрэгцээ портод зориулж дэмжлэг нэмэхийн тулд тэр хэсгийг _болон_ дараагийн хэсгийг үзнэ үү.

[[printing-parallel-port-mode]]
==== Зэрэгцээ портын хувьд холбооны горимыг тохируулах нь

Зэрэгцээ интерфэйсийг ашиглаж байхдаа FreeBSD нь хэвлэгчийн хувьд тасалдлаар зохицуулагдах юм уу эсвэл байнга шалгах холбооны алийг ашиглахыг та сонгож болно. FreeBSD дээрх ердийн хэвлэгчийн төхөөрөмжийн драйвер (man:lpt[4]) нь портын бичил схемийг man:ppc[4] драйвераар хянадаг man:ppbus[4] системийг ашигладаг.

* _interrupt-driven буюу тасалдлаар зохицуулагдах_ арга нь GENERIC цөмд анхдагч байдаг. Энэ арганд үйлдлийн систем нь хэвлэгч өгөгдөл хүлээн авахад хэзээ бэлэн байгааг тодорхойлохын тулд IRQ шугамыг ашигладаг.
* _polled_ буюу байнга шалгах арга нь үйлдлийн системд хэвлэгчээс өгөгдөл хүлээн авахад бэлэн байгаа эсэхийг нь давталттайгаар асуухыг зааж өгдөг. Бэлэн гэж хариулбал цөм илүү өгөгдөл илгээдэг.

Тасалдлаар зохицуулагдах арга нь ихэвчлэн хурдан байдаг боловч нандин IRQ шугамыг ихээр ашигладаг. Зарим шинэ HP хэвлэгчид нь зарим (яг тодорхой ойлгогдоогүй) хугацааны асуудлуудаас болоод тасалдлын горимд зөв ажилладаггүй гэгддэг. Эдгээр хэвлэгчдэд байнга шалгах горим хэрэгтэй. Аль ажиллаж байгааг нь л та ашиглах хэрэгтэй. Зарим хэвлэгчид нь аль алин дээр нь ажилладаг боловч тасалдлын горим асар удаан байдаг.

Та холбооны горимыг хоёр аргаар тохируулж болно: цөмийг тохируулах замаар эсвэл man:lptcontrol[8] програм ашиглан хийж болно.

_Цөмийг тохируулах замаар холбоог тохируулахдаа:_

[.procedure]
====

. Өөрийн цөмийн тохиргооны файлаа засварлана. `ppc0` оруулгыг хайна. Хэрэв та хоёр дахь зэрэгцээ портыг тохируулж байгаа бол `ppc1`-г ашиглаарай. Гурав дахь портын хувьд `ppc2` гэх мэтээр ашиглана.
+
** Хэрэв та тасалдлаар зохицуулагдах горимыг хүсэж байгаа бол дараах мөрийг:
+
[.programlisting]
....
hint.ppc.0.irq="N"
....
+ 
[.filename]#/boot/device.hints# файлд засварлаж _N_-ий оронд зөв IRQ дугаарыг солих хэрэгтэй. Цөмийн тохиргооны файл man:ppc[4] драйверийг бас агуулсан байх ёстой:
+
[source,shell]
....
device ppc
....
+
** Хэрэв та байнга шалгадаг горимыг хүсэж байвал өөрийн [.filename]#/boot/device.hints# файлаас дараах мөрийг арилгана:
+
[.programlisting]
....
hint.ppc.0.irq="N"
....
+ 
Зарим тохиолдолд энэ нь FreeBSD дээр портыг байнга шалгах горимд оруулахад хангалтгүй байдаг. Ихэнхдээ энэ нь man:acpi[4] драйвераас гардаг бөгөөд энэ нь төхөөрөмжүүдийг шалгаж болон залгаж чаддаг болохоор хэвлэгчийн порт уруу хандах горимыг хянаж чаддаг байна. Энэ асуудлыг засварлахын тулд та өөрийн man:acpi[4] тохиргоог шалгах хэрэгтэй.
+
. Файлыг хадгална. Дараа нь цөмд тохиргоо хийн бүтээж цөмийг суулгаад дахин ачаална. Илүү дэлгэрэнгүйг crossref:kernelconfig[kernelconfig,цөмийн тохиргоо] хэсгээс үзнэ үү.
====

_Холбооны горимыг_ man:lptcontrol[8]-р тохируулахын тулд:

[.procedure]
====
. Доор дурдсаныг бичиж:
+
[source,shell]
....
# lptcontrol -i -d /dev/lptN
....
+ 
`lptN`-д зориулж тасалдлаар зохицуулагдах горимыг тохируулна.
. Доор дурдсаныг бичиж:
+
[source,shell]
....
# lptcontrol -p -d /dev/lptN
....
+ 
`lptN`-д зориулж байнга шалгах горимыг тохируулна.
====

Эдгээр тушаалуудыг өөрийн [.filename]#/etc/rc.local# файлд нэмж таны системийг ачаалах болгонд горимыг тохируулдаг байхаар хийж болох юм. Илүү мэдээллийг man:lptcontrol[8]-с үзнэ үү.

[[printing-testing]]
==== Хэвлэгчийн холбоог шалгах нь

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

Хэвлэгчийг тест хийхийн тулд бид ямар нэг текст түүн үрүү илгээнэ. Илгээгдсэн тэмдэгтүүдийг тэр даруй нь хэвлэх хэвлэгчдийн хувьд man:lptest[1] програм төгс байдаг: энэ нь бүх 96 хэвлэх боломжтой ASCII тэмдэгтүүдийг 96 мөрөнд үүсгэдэг.

PostScript(R) (эсвэл бусад хэлэн дээр суурилсан) хэвлэгчийн хувьд бидэнд илүү төвөгтэй тест хэрэгтэй. Доор дурдсантай төстэй жижиг PostScript(R) програм хангалттай байх болно:

[.programlisting]
....
%!PS
100 100 moveto 300 300 lineto stroke
310 310 moveto /Helvetica findfont 12 scalefont setfont
(Is this thing working?) show
showpage
....

Дээрх PostScript(R) кодыг файлд хийгээд доорх хэсгүүдэд гарч байгаа жишээнүүдэд үзүүлсэн шигээр ашиглаж болно.

[NOTE]
====
Энэ баримт нь хэвлэгчийн хэл гэдгийг Hewlett Packard-ийн PCL биш харин PostScript(R)-тэй адил хэлийг хэлж байгаа юм. PCL нь мундаг ажиллагаатай боловч та цэвэр текстийг өөрийнх нь escape (зугтах) дарааллуудтай нь хольж болдог. PostScript(R) нь цэвэр текстийг шууд хэвлэж чаддаггүй бөгөөд энэ нь тусгай зохицуулалтууд хийж өгөх ёстой тийм хэвлэгчийн хэл юм.
====

[[printing-checking-parallel]]
===== Зэрэгцээ хэвлэгчийг шалгах нь

Энэ хэсэг нь зэрэгцээ порт уруу холбогдсон хэвлэгчтэй FreeBSD холбогдож чадах эсэхийг хэрхэн шалгахыг хэлж өгөх болно.

_Зэрэгцээ порт дээрх хэвлэгчийг тест хийхийн тулд:_

[.procedure]
====

. man:su[1] ашиглан `root` болно.
. Хэвлэгч уруу өгөгдөл илгээнэ.

** Хэрэв хэвлэгч цэвэр текст хэвлэж чаддаг бол man:lptest[1]-г ашиглана. Доор дурдсаныг бичнэ:
+
[source,shell]
....
# lptest > /dev/lptN
....
+ 
Энд байгаа _N_ нь тэгээс эхлэх зэрэгцээ портын дугаар юм.
** Хэрэв хэвлэгч PostScript(R) эсвэл бусад хэвлэгчийн хэлийг ойлгодог бол жижиг програм хэвлэгч уруу илгээх хэрэгтэй. Доор дурдсаныг бичнэ:
+
[source,shell]
....
# cat > /dev/lptN
....
+ 
Тэгээд мөр мөрөөр програмыг анхааралтай оруулах хэрэгтэй. Учир нь `RETURN` эсвэл `ENTER` дарсны дараа та засварлаж чадахгүй болох юм. Програмаа оруулж дуусаад `CONTROL+D` юм уу эсвэл файлын төгсгөл товчлуур ямар байна тэрийг дарах хэрэгтэй.
+ 
Мөн өөрөөр програмыг файлд хийж доор дурдсаныг бичин өгч болно:
+
[source,shell]
....
# cat file > /dev/lptN
....
+ 
Энд байгаа _file_ нь таны илгээхийг хүсэж байгаа програмыг агуулсан файлын нэр юм.
====

Та ямар нэгэн зүйл харах ёстой. Текст зөв харагдахгүй байвал санаа зовсны хэрэггүй; бид иймэрхүү зүйлсийг сүүлд нь засах болно.

[[printing-checking-serial]]
===== Цуваа хэвлэгчийг шалгах нь

Энэ хэсэг нь цуваа порт уруу холбогдсон хэвлэгчтэй FreeBSD холбогдож чадах эсэхийг хэрхэн шалгахыг хэлж өгөх болно.

_Цуваа порт дээрх хэвлэгчийг тест хийхдээ:_

[.procedure]
====

. man:su[1] ашиглан `root` болно.
. [.filename]#/etc/remote# файлыг засварлана. Дараах мөрийг нэмнэ:
+
[.programlisting]
....
printer:dv=/dev/port:br#bps-rate:pa=parity
....
+ 
Энд байгаа _port_ нь цуваа портод (`ttyu0`, `ttyu1`, гэх мэт) зориулсан төхөөрөмжийн оруулга, _bps-rate_ нь хэвлэгчийн холбогдох секундэд илгээх битийн хурд, болон _parity_ нь хэвлэгчийн шаарддаг parity юм (`even`, `odd`, `none`, эсвэл `zero`).
+ 
Цуваа шугамаар гурав дахь цуваа порт уруу 19200 bps хурдаар parity байхгүйгээр холбогдсон хэвлэгчид зориулсан жишээ оруулга энд байна:
+
[.programlisting]
....
printer:dv=/dev/ttyu2:br#19200:pa=none
....
+
. man:tip[1] ашиглан хэвлэгч уруу холбогдоно. Доор дурдсаныг бичнэ:
+
[source,shell]
....
# tip printer
....
+ 
Хэрэв энэ алхам нь ажиллахгүй бол [.filename]#/etc/remote# файлыг дахин засварлаж [.filename]#/dev/ttyuN#-ийн оронд [.filename]#/dev/cuaaN#-г ашиглаж үзээрэй.
. Өгөгдлийг хэвлэгч уруу илгээнэ.
+
** Хэрэв хэвлэгч цэвэр текст хэвлэж чаддаг бол man:lptest[1]-г ашиглана. Доор дурдсаныг бичнэ:
+
[source,shell]
....
% $lptest
....
+
** Хэрэв хэвлэгч PostScript(R) эсвэл бусад хэвлэгчийн хэлийг ойлгодог бол жижиг програм хэвлэгч уруу илгээх хэрэгтэй. Програмыг мөр мөрөөр _маш анхааралтайгаар_ бичиж оруулах хэрэгтэй. Учир нь арилгах болон бусад засварлах товчлуурууд хэвлэгчийн хувьд чухал байж болох юм. Та програмыг бүгдийг нь хүлээж авсан гэж хэвлэгчид таниулахын тулд тусгай файлын төгсгөл товчлуурыг хэвлэгчид зориулж оруулах хэрэгтэй. PostScript(R)-ийн хэвлэгчдийн хувьд `CONTROL+D` дарна.
+ 
Мөн өөрөөр та програмыг файлд хийж доор дурдсаныг бичин оруулж болно:
+
[source,shell]
....
% >file
....
+ 
Энд байгаа _file_ нь програмыг агуулж байгаа файлын нэр юм. man:tip[1] файлыг илгээсний дараа шаардлагатай файлын төгсгөл товчлуурыг дарах хэрэгтэй.
====

Та ямар нэгэн зүйл хэвлэгдэхийг харах ёстой. Текст зөв харагдахгүй байвал санаа зовсны хэрэггүй; бид иймэрхүү зүйлсийг сүүлд нь засах болно.

[[printing-printcap]]
==== Түр хадгалагчийг идэвхжүүлэх нь: [.filename]#/etc/printcap# файл

Энэ үед таны хэвлэгч залгагдаж таны цөм түүнтэй холбогдохоор тохируулагдсан (хэрэв шаардлагатай бол) бөгөөд та хэвлэгч уруугаа зарим энгийн өгөгдлийг илгээж чаддаг байна. Одоо бид таны хэвлэгч уруу хандах хандалтыг хянахын тулд LPD-г тохируулахад бэлэн боллоо.

Та [.filename]#/etc/printcap# файлыг засварлаж LPD-г тохируулна. LPD түр хадгалагч систем нь түр хадгалагч ашиглагдах болгонд энэ файлыг уншдаг учир энэ файл уруу хийгдсэн шинэчлэл шууд нөлөөлөх болно.

man:printcap[5] файлын хэлбэршилт хялбархан. [.filename]#/etc/printcap# файлд засвар хийхдээ өөрийн дуртай текст засварлагчийг ашиглах хэрэгтэй. Хэлбэршилт нь [.filename]#/usr/shared/misc/termcap# болон [.filename]#/etc/remote# зэрэг бусад боломжийн файлуудтай төстэй байдаг. Хэлбэршилтийн тухай бүрэн мэдээллийг man:cgetent[3]-с үзнэ үү.

Энгийн түр хадгалагчийн тохиргоо дараах алхмуудаас тогтоно:

[.procedure]
====

. Хэвлэгчид зориулж нэр (болон хэдэн тохиромжтой alias-уудыг) сонгож [.filename]#/etc/printcap# файлд хийж өгнө; Нэрлэх тухай дэлгэрэнгүй мэдээллийг <<printing-naming,Хэвлэгчийг нэрлэх нь>> хэсгээс үзнэ үү.
. `sh` боломжийг оруулан толгой хуудаснуудыг болиулах хэрэгтэй (анхдагчаар идэвхтэй байдаг); Дэлгэрэнгүй мэдээллийг <<printing-no-header-pages,Толгой хуудаснуудыг дарах нь>> хэсгээс үзнэ үү.
. Түр хадгалах санг үүсгэж түүний байрлалыг `sd` боломжоор зааж өгөх хэрэгтэй; Дэлгэрэнгүй мэдээллийг <<printing-spooldir,Түр хадгалах санг үүсгэх нь>> хэсгээс үзнэ үү.
. Хэвлэгчид зориулж ашиглахаар [.filename]#/dev# оруулгыг тохируулж `lp` боломжоор [.filename]#/etc/printcap# файлд түүнийг тэмдэглэх хэрэгтэй; Дэлгэрэнгүй мэдээллийг <<printing-device,Хэвлэгчийн төхөөрөмжийг таних нь>> хэсгээс үзнэ үү. Хэрэв хэвлэгч цуваа порт дээр байгаа бол холбооны параметрүүдийг <<printing-commparam,Түр хадгалагчийн холбооны параметрүүдийг тохируулах нь>> хэсэгт хэлэлцсэн `ms#` боломжоор тохируулах хэрэгтэй.
. Цэвэр текст оруулах шүүлтүүрийг суулгана; Дэлгэрэнгүйг <<printing-textfilter,Текст шүүгчийг суулгах нь>> хэсгээс үзнэ үү.
. man:lpr[1] тушаалаар ямар нэг юм хэвлэж тест хийнэ. Илүү дэлгэрэнгүйг <<printing-trying,Турших нь>> болон <<printing-troubleshooting,Алдааг олж засварлах>> хэсгүүдээс үзнэ үү.
====

[NOTE]
====
PostScript(R) хэвлэгчид зэрэг хэлэн дээр суурилсан хэвлэгчид цэвэр текстийг шууд хэвлэж чаддаггүй. Дээр болон дараагийн хэсгүүдэд тайлбарласан энгийн тохиргоо нь хэрэв та ийм хэвлэгч суулгаж байгаа бол таныг зөвхөн хэвлэгчийн ойлгодог файлыг хэвлэнэ гэж тооцдог.
====

Хэрэглэгчид нь цэвэр текстийг таны системд суулгагдсан дурын хэвлэгч уруу өгч хэвлэж болно гэж ихэвчлэн боддог. LPD уруу залгагдсан програмууд өөрсдийн хэвлэлтийг хийхдээ бас ингэж тооцдог. Хэрэв та тийм хэвлэгч суулгаж хэвлэгчийн хэл дээр ажлуудаа хэвлэх _болон_ цэвэр текст ажлуудыг хэвлэж чаддаг байхыг хүсэж байгаа бол дээр дурдсан энгийн тохиргоонд нэмэлт алхам нэмж өгөх зайлшгүй шаардлагатай: цэвэр текстээс PostScript(R) уруу автоматаар хөрвүүлэх програмыг суулгах хэрэгтэй. <<printing-advanced-if-conversion,Цэвэр текст ажлуудыг PostScript(R) хэвлэгчид дээр тааруулах нь>> гэж нэрлэгдсэн хэсэг үүнийг хэрхэн хийхийг хэлж өгнө.

[[printing-naming]]
===== Хэвлэгчийг нэрлэх нь

Эхний (хялбар) алхам бол өөрийн хэвлэгчид зориулж нэр сонгох явдал юм. Ажиллагаатай нь холбогдуулж юм уу эсвэл этгээд чамин нэр сонгох нь яг үнэндээ хамаагүй юм. Учир нь та хэвлэгчид зориулж бас хэд хэдэн alias буюу өөр нэрсийг өгч болох юм.

[.filename]#/etc/printcap#-д тодорхойлогдсон хэвлэгчдийн хамгийн багаар бодоход аль нэг `lp` гэсэн alias-тай байх ёстой. Энэ нь анхдагч хэвлэгчийн нэр юм. Хэрэв хэрэглэгчдэд `PRINTER` орчны хувьсагч байхгүй юм уу эсвэл LPD тушаалуудыг өгөх тушаалын мөрөнд хэвлэгчийн нэрийг зааж өгөөгүй бол `lp` нь тэдгээрийн ашиглаж сурсан анхдагч хэвлэгч болох юм.

Хэвлэгчийн хамгийн сүүлийн alias-д хэвлэгчийн бүрэн тайлбарыг үйлдвэрлэгч болон загварыг оруулан өгөх нь нийтлэг практик байдаг.

Нэр болон зарим нийтлэг alias-уудыг сонгосныхоо дараа тэдгээрийг [.filename]#/etc/printcap# файлд хийж өгөх хэрэгтэй. Хэвлэгчийн нэр хамгийн зүүн баганаас эхлэх ёстой. Alias болгоныг босоо шугамаар тусгаарлаж хамгийн сүүлийн alias-ийн ард тодорхойлох цэг тавьна.

Дараах жишээн дээр хоёр хэвлэгчийг (Diablo 630 шугамын хэвлэгч болон Panasonic KX-P4455 PostScript(R) лазерийн хэвлэгч) тодорхойлох [.filename]#/etc/printcap# файлаас бид эхлэх болно:

[.programlisting]
....
#
#  /etc/printcap for host rose
#
rattan|line|diablo|lp|Diablo 630 Line Printer:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:
....

Энэ жишээн дээр эхний хэвлэгч нь `rattan` гэж нэрлэгдсэн бөгөөд `line`, `diablo`, `lp`, болон `Diablo 630 Line Printer` гэсэн alias-уудтай байна. Энэ нь `lp` alias-тай болохоор энэ нь бас анхдагч хэвлэгч юм. Хоёр дахь нь `bamboo` гэж нэрлэгдсэн бөгөөд `ps`, `PS`, `S`, `panasonic`, болон `Panasonic KX-P4455 PostScript v51.4` гэсэн alias-уудтай байна.

[[printing-no-header-pages]]
===== Толгой хуудаснуудыг дарах нь

LPD түр хадгалах систем нь ажил бүрийн хувьд анхдагчаар _толгой хуудас_ хэвлэдэг. Толгой хуудас нь том сайхан үсгээр бичигдсэн ажлыг хүссэн хэрэглэгчийн нэр, ажил ирсэн хост болон ажлын нэрийг агуулдаг. Харамсалтай нь энэ бүх нэмэлт текст нь энгийн хэвлэгчийн тохиргоог дибаг хийх замд саад болдог учир бид толгой хуудаснуудыг дарж хаах болно.

Толгой хуудаснуудыг дарахын тулд [.filename]#/etc/printcap# файл дахь хэвлэгчийн оруулгад `sh` боломжийг нэмэх хэрэгтэй. Энд `sh` нэмсэн [.filename]#/etc/printcap# файлын жишээ байна:

[.programlisting]
....
#
#  /etc/printcap for host rose - no header pages anywhere
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:
....

Бидний зөв хэлбэршилт хэрхэн хэрэглэснийг хараарай: эхний мөр нь хамгийн зүүн талын баганаас эхэлж дараа дараачийн мөрүүд нь хойш зай авагдсан байна. Оруулга дахь сүүлийн мөрөөс бусад мөр бүр урагш налуу тэмдэгтээр төгссөн байна.

[[printing-spooldir]]
===== Түр хадгалах санг үүсгэх нь

Түр хадгалагчийн энгийн тохиргоон дахь дараагийн алхам нь хэвлэгдэх ажлууд хэвлэгдэх хүртлээ байдаг, түр хадгалагчийн бусад дэмжлэгийн файлууд бас байдаг __түр хадгалах сан__г үүсгэх явдал юм.

Түр хадгалах сангийн хувьсамтгайгаас болоод эдгээр сангуудыг [.filename]#/var/spool#-д хийх нь зуршил болсон зүйл юм. Түр хадгалах сангуудын агуулгыг заавал нөөцлөх ч бас шаардлагагүй юм. Тэдгээрийг үүсгэх нь man:mkdir[1] тушаалыг ажиллуулахтай адил хялбар юм.

Доор үзүүлсэн шиг хэвлэгчийн нэртэй адил нэрээр санг үүсгэх нь бас зуршил болсон байдаг:

[source,shell]
....
# mkdir /var/spool/printer-name
....

Гэхдээ та сүлжээндээ их олон хэвлэгчидтэй бол түр хадгалах сангуудаа зөвхөн LPD-ээр хэвлэхийн тулд нөөцөлсөн нэг сангийн доор хийхийг хүсэж болох юм. Бид `rattan` болон `bamboo` гэсэн хоёр жишээ хэвлэгчдээ зориулж үүнийг хийх болно:

[source,shell]
....
# mkdir /var/spool/lpd
# mkdir /var/spool/lpd/rattan
# mkdir /var/spool/lpd/bamboo
....

[NOTE]
====
Хэрэглэгчдийн хэвлэх ажлын нууцлалын талаар та бодож байгаа бол түр хадгалах санд олон нийт хандах боломжгүй болгож түүнийг хамгаалахыг хүсэж болох юм. Түр хадгалах сангуудыг `daemon` хэрэглэгч болон `daemon` бүлэг эзэмшиж, өөр хэнээр ч биш зөвхөн эдгээрээр уншигдах, бичигдэх, болон хайлт хийгдэх боломжтой байх ёстой. Бид үүнийг өөрсдийн жишээ хэвлэгчдэд зориулж хийх болно:

[source,shell]
....
# chown daemon:daemon /var/spool/lpd/rattan
# chown daemon:daemon /var/spool/lpd/bamboo
# chmod 770 /var/spool/lpd/rattan
# chmod 770 /var/spool/lpd/bamboo
....

====

Төгсгөлд нь та эдгээр сангуудын талаар LPD програмд [.filename]#/etc/printcap# файл ашиглан хэлж өгөх хэрэгтэй. Түр хадгалах сангийн замыг `sd` боломжтой цуг зааж өгнө:

[.programlisting]
....
#
#  /etc/printcap for host rose - added spooling directories
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:sd=/var/spool/lpd/rattan:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:
....

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

Хэрэв та түр хадгалах санг `sd`-ээр зааж өгөхгүй бол түр хадгалах систем нь анхдагчаар [.filename]#/var/spool/lpd#-г ашиглах болно.

[[printing-device]]
===== Хэвлэгч төхөөрөмжийг таних нь

<<printing-hardware,Тоног төхөөрөмжийн тохиргоо>> хэсэгт бид порт болон тохирох [.filename]#/dev# санг FreeBSD нь хэвлэгчтэй холбогдохдоо ашиглахыг мэдлээ. Одоо бид LPD-д тэр мэдээллийг хэлнэ. Түр хадгалах систем нь хэвлэх ажилтай байгаа үедээ шүүгч програмын өмнөөс заасан төхөөрөмжийг онгойлгох болно (шүүгч програм нь өгөгдлийг хэвлэгч уруу дамжуулахыг хариуцдаг).

`lp` боломж ашиглан [.filename]#/etc/printcap# файлд [.filename]#/dev# оруулгын замыг жагсааж өгнө.

Бидний ажиллах жишээн дээр `rattan` нь эхний зэрэгцээ порт дээр, `bamboo` нь зургаа дахь цуваа порт дээр байгаа гэж үзье; энд [.filename]#/etc/printcap# файлд хийгдэх нэмэлтүүд байна:

[.programlisting]
....
#
#  /etc/printcap for host rose - identified what devices to use
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyu5:
....

Хэрэв та өөрийн [.filename]#/etc/printcap# файл дээрээ хэвлэгчдээ зориулж `lp` боломжийг зааж өгөхгүй бол LPD нь анхдагчаар [.filename]#/dev/lp#-г ашиглах болно. [.filename]#/dev/lp# нь одоогоор FreeBSD дээр байхгүй байгаа.

Хэрэв таны суулгаж байгаа хэвлэгч зэрэгцээ порт уруу холбогдсон бол <<printing-textfilter,Текст шүүгчийг суулгах нь>> хэсэг уруу алгасаарай. Үгүй бол дараагийн хэсэг дэх заавруудыг дагахаа битгий мартаарай.

[[printing-commparam]]
===== Түр хадгалагчийн холбооны параметрүүдийг тохируулах нь

Зэрэгцээ портууд дээрх хэвлэгчдийн хувьд LPD нь bps хурд, parity, болон бусад цуваа холбооны параметрүүдийг хэвлэгч уруу өгөгдөл илгээдэг шүүгч програмын өмнөөс тохируулж чаддаг. Энэ нь давуу талуудтай, учир нь:

* Энэ нь [.filename]#/etc/printcap# файлыг засварлан өөр холбооны параметрүүдийг турших боломжийг танд олгодог; та шүүгч програмыг дахин эмхэтгэх шаардлагагүй.
* Энэ нь өөр өөр цуваа холбооны тохируулгуудтай байж болох олон хэвлэгчдэд зориулж нэг шүүгч програмыг ашиглахаар болгож түр хадгалах системийг идэвхжүүлдэг.

Дараах [.filename]#/etc/printcap# боломжууд нь `lp` боломжид жагсаагдсан төхөөрөмжийн цуваа холбооны параметрүүдийг хянадаг:

`br#bps-rate`::
Төхөөрөмжийн холбооны хурдыг _bps-rate_ болгож тохируулах бөгөөд _bps-rate_ нь секундэд 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, эсвэл 115200 бит байж болно.

`ms#stty-mode`::
Төхөөрөмжийг онгойлгосны дараа терминал төхөөрөмжид зориулж сонголтуудыг тохируулна. man:stty[1] нь байж болох сонголтуудыг тайлбарладаг.

`lp` боломжоор заагдсан төхөөрөмжийг LPD онгойлгох үед энэ нь төхөөрөмжийн үзүүлэлтүүдийг `ms#` боломжоор заагдсанаар тохируулдаг. Тухайлбал, man:stty[1] гарын авлагын хуудсанд тайлбарлагдсан байгаа `parenb`, `parodd`, `cs5`, `cs6`, `cs7`, `cs8`, `cstopb`, `crtscts`, болон `ixon` горимууд юм.

Зургаа дахь цуваа порт дээр өөрсдийн жишээ хэвлэгчээ нэмье. Бид bps хурдыг 38400 гэж тохируулна. Горимын хувьд бид `-parenb` тохируулгаар parity байхгүй, `cs8` тохируулгаар 8 бит тэмдэгтүүд, `clocal` тохируулгаар модемийн хяналт байхгүй, `crtscts` тохируулгаар тоног төхөөрөмжийн урсгалын хяналт байхгүй гэж тохируулах болно:

[.programlisting]
....
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:
....

[[printing-textfilter]]
===== Текст шүүгчийг суулгах нь

Одоо бид хэвлэгч уруу ажлууд илгээхийн тулд ямар текстийн шүүгчийг ашиглахыг LPD-д хэлэхэд бэлэн боллоо. _Оролтын шүүгч_ гэж бас нэрлэгддэг _Текст шүүгч_ нь хэвлэх ажил байхад LPD-ийн ажиллуулдаг програм юм. LPD нь хэвлэгчид зориулж текст шүүгчийг ажиллуулахдаа шүүгчийн стандарт оролтыг хэвлэх ажил уруу тохируулж өгдөг бөгөөд стандарт гаралтыг `lp` боломжоор заагдсан хэвлэгчийн төхөөрөмж уруу тохируулдаг. Шүүгч нь стандарт оролтоос ажлыг уншиж хэвлэгчид зориулж шаардлагатай орчуулгыг хийж үр дүнг стандарт гаралт уруу бичихээр хийгдсэн байдаг. Ингэснээр хэвлэгдэх болно. Текст шүүгчийн тухай дэлгэрэнгүй мэдээллийг <<printing-advanced-filters,Шүүгчид>> хэсгээс үзнэ үү.

Бидний энгийн хэвлэгчийн тохиргооны хувьд текст шүүгч нь хэвлэгч уруу ажлыг илгээхийн тулд `/bin/cat` тушаалыг ажиллуулах жижиг бүрхүүлийн скрипт байж болох юм. FreeBSD нь устгах болон доогуур зурах зэрэг тэмдэгтийн урсгалуудтай сайн ажиллаж чаддаггүй хэвлэгчдэд зориулсан тэдгээр тэмдэгтүүдийг зохицуулдаг [.filename]#lpf# гэсэн өөр шүүгчтэй ирдэг. Тэгээд мэдээж та хүссэн өөр бусад шүүгч програмыг ашиглаж болно. `lpf` шүүгч нь <<printing-advanced-lpf,lpf: текстийн шүүгч >> хэсэгт дэлгэрэнгүй тайлбарлагдсан байгаа.

Эхлээд [.filename]#/usr/local/libexec/if-simple# гэсэн бүрхүүлийн скриптийг энгийн текст шүүгч болгоё. Энэ файлдаа өөрийн дуртай засварлагчаа ашиглан дараах текстийг оруулъя:

[.programlisting]
....
#!/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.

/bin/cat && exit 0
exit 2
....

Файлыг ажиллах боломжтой болгоно:

[source,shell]
....
# chmod 555 /usr/local/libexec/if-simple
....

[.filename]#/etc/printcap# файлд `if` боломжоор үүнийг зааж LPD-д ашиглах ёстойг нь хэлж өгнө. Бид үүнийг [.filename]#/etc/printcap# жишээ файл дахь одоогоор бидэнд байгаа өөрсдийн хоёр хэвлэгчдээ нэмэх болно:

[.programlisting]
....
#
#  /etc/printcap for host rose - added text filter
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:\
        :if=/usr/local/libexec/if-simple:
....

[NOTE]
====
[.filename]#if-simple# скриптийн хуулбарыг [.filename]#/usr/shared/examples/printing# сангаас олж болно.
====

===== LPD-г идэвхжүүлэх

man:lpd[8] нь `lpd_enable` хувьсагчаар хянагддаг [.filename]#/etc/rc#-с ажилладаг. Энэ хувьсагчийн анхдагч утга нь `NO` байдаг. Тэгж хийгээгүй байгаа бол та:

[.programlisting]
....
lpd_enable="YES"
....

мөрийг [.filename]#/etc/rc.conf# файлд нэмж өөрийн машиныг дахин ачаалах юм уу эсвэл ердөө л man:lpd[8]-г ажиллуулах хэрэгтэй.

[source,shell]
....
# lpd
....

[[printing-trying]]
===== Турших нь

Та энгийн LPD тохиргооны төгсгөлд хүрлээ. Харамсалтай нь баяр хүргэх арай л болоогүй байна. Учир нь бид тохиргоог тест хийж асуудал байвал засварлах хэрэгтэй хэвээр байгаа билээ. Тохиргоог тест хийхийн тулд ямар нэгэн юм хэвлэхийг оролдож үзээрэй. LPD системээр хэвлэхийн тулд ажлыг хэвлэхээр илгээдэг man:lpr[1] тушаалыг ашиглана.

Та man:lpr[1]-г <<printing-testing,Хэвлэгчийн холбоог шалгах нь>> хэсэгт танилцуулсан man:lptest[1] програмтай цуг хамтатган ямар нэг тест текст үүсгэхийн тулд ашиглаж болно.

_Энгийн LPD тохиргоог тест хийхийн тулд:_

Доор дурдсаныг бичнэ:

[source,shell]
....
# lptest 20 5 | lpr -Pprinter-name
....

Энд байгаа _printer-name_ нь [.filename]#/etc/printcap# файлд заагдсан хэвлэгчийн нэр (эсвэл alias) юм. Анхдагч хэвлэгчийг тест хийхийн тулд man:lpr[1]-г ямар нэгэн `-P` нэмэлт өгөгдөлгүйгээр бичих хэрэгтэй. Дахин хэлэхэд PostScript(R)-г хүлээж байдаг хэвлэгчийг тест хийж байгаа бол man:lptest[1]-г ашиглахын оронд PostScript(R) програмыг тэр хэл дээр нь илгээх хэрэгтэй. Ингэхийн тулд та програмыг файлд хийж `lpr file` гэж бичиж болно.

PostScript(R) хэвлэгчийн хувьд та програмын үр дүнг авах ёстой. Хэрэв та man:lptest[1]-г ашиглаж байгаа бол таны авсан үр дүн иймэрхүү харагдах ёстой:

[source,shell]
....
!"#$%&'()*+,-./01234
"#$%&'()*+,-./012345
#$%&'()*+,-./0123456
$%&'()*+,-./01234567
%&'()*+,-./012345678
....

Хэвлэгчийг цааш тест хийхийн тулд илүү том програмуудыг (хэлэн дээр суурилсан хэвлэгчдийн хувьд) татаж авах юм уу эсвэл man:lptest[1]-г өөр нэмэлт өгөгдлүүдтэй ажиллуулж үзээрэй. Жишээ нь `lptest 80 60` тушаал нь мөр бүртээ 80 тэмдэгттэй 60 мөрийг үүсгэх болно.

Хэрэв хэвлэгч ажиллаагүй бол <<printing-troubleshooting,Алдааг олж засварлах>> хэсгийг үзнэ үү.

[[printing-advanced]]
== Хэвлэгчийн илүү нарийн тохиргоо

Энэ хэсэгт онцгой загварчлагдсан файлыг шүүгчид, хуудасны толгой хэсэг, сүлжээгээр хэвлэх мөн хэвлэгчийг хэрэглэх эрх болон хязгаарлалт гэсэн зүйлүүдийн тухай зааварлах болно.

[[printing-advanced-filter-intro]]
=== Шүүлтүүрүүд

Хэдийгээр LPD нь сүлжээний протокол, дараалал, хандалтын хяналт гэх мэтчилэн хэвлэлтийн асуудлуудыг хариуцдаг ч _жинхэнэ_ ажлыг нь _шүүлтүүрүүд_ хийдэг. Шүүлтүүрүүд нь тусгай програмууд бөгөөд хэвлэгчийн төхөөрөмжүүд болон онцгой шаардлагуудыг нь хариуцаж байдаг. Бид хамгийн энгийн суулгац хийх үед их амархан бөгөөд бараг бүх хэвлэгчид тохирдог текст шүүлтүүр суулгасан билээ. (<<printing-textfilter,Текст шүүлтүүр суулгах нь>> хэсэгт).

Хэвлэх төрлийн хувиргалт, хэвлэгчийн онцгой шинж чанар зэрэг давуу чанаруудыг нь хэрэглэхийн тулд танд шүүлтүүрийг зөв ойлгох шаардлага гарна. Ийм ажлуудыг зөвхөн шүүлтүүр хийдэг. Тэгээд муу мэдээ нь юу вэ гэхээр тэдгээр бүгдийг _та_ тодорхойлж өгөх ёстой. Сайн мэдээ нь юу вэ гэхээр тэдгээрийн ихэнх нь боломжтой бэлэн байдаг бөгөөд хэрэв бичихээр бол тун амархан бичигддэг юм.

Мөн түүнчлэн FreeBSD [.filename]#/usr/libexec/lpr/lpf# гэдэг нэртэй, бараг бүх хэвлэгчид ердийн текст хэвлэж чаддаг шүүлтүүртэй ирдэг. (энэ нь файл дотор байгаа зай болон том зай авалтуудыг таньдаг бөгөөд мөн эрх үүсгэх гээд түүний чаддаг бүх зүйл нь үүгээр дуусдаг) FreeBSD-н портын цуглуулга дотор хэд хэдэн шүүлтүүр болон шүүлтүүрийн бүрдэл хэсгүүд байдаг.

Энэ хэсэгт танд танилцуулах зүйлсүүдийг харуулъя:

* <<printing-advanced-filters,Шүүлтүүр хэрхэн ажилладаг вэ>> хэсэгт хэвлэх явцад шүүлтүүр ямар үүрэг гүйцэтгэдэг талаар тайлбарлахыг оролдох болно. LPD хэвлэх үедээ шүүлтүүрийг "хөшигний цаана" хэрхэн ашигладаг талаар та энд ойлгох болно. Үүнийг мэдсэнээр хэрэв өөр үед та олон шүүлтүүр суулгах үед хүндрэл гарвал даван туулахад тань хэрэг болно. 
* LPD нь хэвлэгч бүрийг анхны тохируулгаараа ердийн текстийг хэвлэж чадна гэж авч үздэг. Энэ нь ердийн текстийг шууд хэвлэж чаддаггүй PostScript(R) хэвлэгчид (эсвэл бусад програмын хэл дээр үндэслэсэн хэвлэгчид ) дээр хүндрэл гаргадаг. <<printing-advanced-if-conversion, PostScript(R) хэвлэгчид дээр ердийн текст хэвлэдэг болох >> хэсэгт иймэрхүү хүндрэлийг даван туулах талаар хэлэх болно. Хэрэв танд PostScript(R) хэвлэгч байдаг бол энэ хэсгийг уншаарай.
* PostScript(R) нь маш олон програмын гаралт болж байдаг. Тэр бүү хэл зарим хүмүүс шууд PostScript(R) бичиж чаддаг. Харамсалтай нь PostScript(R) хэвлэгч нар үнэтэй. <<printing-advanced-ps, PostScript(R) биш төрлийн хэвлэгчийг PostScript(R) мэт хэрэглэх>> хэсэгт танд PostScript(R) өгөгдлийг _PostScript(R) биш төрлийн_ хэвлэгч дээр хэвлэж болдог талаар зааварлах болно. Хэрэв танд PostScript(R) хэвлэгч байхгүй бол энэ хэсгийг та уншаарай.
* <<printing-advanced-convfilters,Хувиргагч шүүлтүүрүүд>> хэсэг танд онцгой төрлийн файлууд болох график эсвэл өөр төрлийн бичиглэлтэй файлуудыг хэрхэн таны хэвлэгчийн ойлгодог төрөл рүү хувиргаж хэвлэх талаар өгүүлэх болно. Энэ хэсгийг уншсаны дараа, та жишээ нь хэрэглэгчид `lpr -t` тушаал өгөн troff өгөгдөл хэвлэх эсвэл `lpr -d` тушаал өгөн TeX DVI өгөгдөл хэвлэх эсвэл `lpr -v` тушаал өгөн зураг төрлийн файл хэвлэх зэрэг зүйлүүдийг мэдэх болно. Энэ хэсгийг заавал унших хэрэгтэй гэж танд зөвлөж байна. 
* <<printing-advanced-of,Гаралтын шүүлтүүр >> хэсэг нь LPD-н нэг их хэрэглэгддэг шинж чанарууд болох гаралтын шүүлтүүрүүдийн тухай өгүүлэх болно: Та хуудасны толгой хэсгийг хэвлэж болж л байвал (<<printing-advanced-header-pages,Хуудасны толгой хэсэг>> хэсэгт харна уу) энэ хэсгийг та алгасаж болно.
* <<printing-advanced-lpf,lpf: текст шүүлтүүр >> хэсэгт FreeBSD-тэй хамт нэлээн төгс ажиллагаатай мөрөөр нь хэвлэдэг (лазер хэвлэгч нар мөр мөрөөр нь хэвлэдэг туузан хэвлэгч шиг ажилладаг) `lpf` текст шүүлтүүрийн тухай өгүүлэх болно. Хэрэв та хэвлэгчийнхээ эрхийг түргэн бэлэн болгох эсвэл таны хэвлэгч хоосон зайг утаа байна гэж хүлээж аваад байвал та яах аргагүй `lpf`-тэй ажиллах хэрэг гарна.

[NOTE]
====
Доорх хэсэгт харуулах янз бүрийн скриптийн хуулбарыг [.filename]#/usr/shared/examples/printing# сангаас олж болно.
====

[[printing-advanced-filters]]
==== Шүүлтүүр хэрхэн ажилладаг вэ

Өмнө дурдсанаар шүүлтүүр нь хэвлэгчтэй холбогдох төхөөрөмжөөс чөлөөтэй хэсгийг зохицуулах LPD-ээр эхлүүлэгдэн ажилладаг програм юм.

Ажил дахь файлыг LPD хэвлэхийг хүсэхдээ шүүлтүүр програмыг эхлүүлдэг. Энэ нь шүүлтүүрийн стандарт оролтыг хэвлэх файл уруу, өөрийн стандарт гаралтыг хэвлэгч уруу, өөрийн стандарт алдааг алдаа бүртгэх файл ([.filename]#/etc/printcap# файл дахь `lf` боломжид эсвэл анхдагчаар [.filename]#/dev/console#) уруу тохируулдаг.

LPD аль шүүлтүүрийг эхлүүлэх болон [.filename]#/etc/printcap# файлд юу байгаа болон man:lpr[1] тушаалын мөр дэх ажилд зориулж хэрэглэгч ямар нэмэлт өгөгдлүүд зааснаас шүүлтүүрийн нэмэлт өгөгдлүүд хамаардаг. Жишээ нь хэрэв хэрэглэгч `lpr -t` тушаал бичсэн бол LPD нь хүрэх хэвлэгчийн `tf` боломжид жагсаагдсан troff шүүлтүүрийг эхлүүлэх болно. Хэрэв хэрэглэгч цэвэр текстийг хэвлэхийг хүссэн бол энэ нь `if` шүүлтүүрийг эхлүүлэх байсан (энэ нь бараг л үнэн юм: дэлгэрэнгүйг <<printing-advanced-of,Гаралтын шүүлтүүрүүд>> хэсгээс үзнэ үү).

[.filename]#/etc/printcap# файлд зааж өгч болох гурван төрлийн шүүлтүүр байдаг:

* _текст шүүлтүүр_ буюу _оролтын шүүлтүүр_ гэж LPD баримтад толгой эргүүлмээр нэрлэгдсэн шүүлтүүр нь ердийн текст хэвлэлтийг зохицуулдаг. Үүнийг анхдагч шүүлтүүр гэж бодох хэрэгтэй. LPD нь хэвлэгч бүрийг цэвэр текстийг анхдагчаар хэвлэж чаддаг гэж тооцдог бөгөөд устгах тэмдэгтүүд, tab-ууд эсвэл бусад тусгай тэмдэгтүүд хэвлэгчийг будлиулахгүй байлгахад санаа тавих нь текст шүүлтүүрийн ажил юм. Хэрэв та хэвлэгчийн хэрэглээний хувьд бүртгэлтэй тийм орчинд байгаа бол текст шүүлтүүр нь хэвлэгдсэн мөрүүдийн тоог тоолж тэр тоогоо хэвлэгчийн дэмждэг нэг хуудсан дахь мөрийн тоотой жишиж хэвлэсэн хуудаснуудыг бас бүртгэх ёстой. Текст шүүлтүүрийг дараах нэмэлт өгөгдлийн жагсаалттай эхлүүлдэг:
+
`filter-name` [ -c ] -w _width_ -l _length_ -i _indent_ -n _login_ -h _host_ _acct-file_
+ 
энд байгаа
+
`-c`:::
нь ажил `lpr -l` тушаалаар илгээгдсэн бол гарч ирнэ

_width_:::
нь [.filename]#/etc/printcap# файлд заагдсан `pw` (хуудасны өргөн) боломжийн утга юм. Анхдагчаар 132 байна

_length_:::
нь `pl` (хуудасны урт) боломжийн утга бөгөөд анхдагчаар 66 байна

_indent_:::
нь `lpr -i` тушаалаас өгөгдөх догол мөрний хэмжээ юм. Анхдагчаар 0 байна

_login_:::
нь файлыг хэвлэж байгаа хэрэглэгчийн бүртгэл юм

_host_:::
нь ажлыг илгээсэн хостын нэр юм

_acct-file_:::
нь `af` боломжийн бүртгэлийн файлын нэр юм.

* _Хувиргах шүүлтүүр_ нь тусгай файлын хэлбэршилтийг хэвлэгчийн цаасан дээр амилуулж чадах хэлбэршилт уруу хувиргадаг. Жишээ нь ditroff маяг хийгдсэн өгөгдлийг шууд хэвлэж болдоггүй боловч ditroff өгөгдлийг хэвлэгчийн ойлгож хэвлэх хэлбэр уруу хувиргах ditroff файлуудад зориулсан хувиргах шүүлтүүрийг та суулгаж болох юм. Тэдгээрийн талаар бүгдийг <<printing-advanced-convfilters,Хувиргах шүүлтүүрүүд>> хэсэг хэлж өгдөг. Хэрэв танд хэвлэгчийн бүртгэл хийлт хэрэгтэй бол хувиргах шүүлтүүрүүд бас бүртгэл хийх хэрэгтэй болно. Хувиргах шүүлтүүрүүдийг дараах нэмэлт өгөгдлүүдтэй эхлүүлдэг:
+
`filter-name` -x _pixel-width_ -y _pixel-height_ -n _login_ -h _host_ _acct-file_
+ 
энд байгаа _pixel-width_ нь `px` боломжийн утга (анхдагчаар 0) бөгөөд _pixel-height_ нь `py` боломжийн утга юм (анхдагчаар 0).
* _Гаралтын шүүлтүүр_ нь шүүх текст байхгүй байх юм уу эсвэл толгой хуудаснууд идэвхтэй байх тохиолдолд зөвхөн ашиглагддаг. Бидний туршлага дээрээс харахад гаралтын шүүлтүүрүүд ховор ашиглагддаг. <<printing-advanced-of,Гаралтын шүүлтүүрүүд>> хэсэг тэдгээрийг тайлбарладаг. Гаралтын шүүлтүүрт зөвхөн хоёр нэмэлт өгөгдөл байдаг:
+
`filter-name` -w _width_ -l _length_
+ 
эдгээр нь текст шүүлтүүрийн `-w` болон `-l` нэмэлт өгөгдлүүдтэй адил юм.

Шүүлтүүрүүд нь бас дараах гарах төлөвтэйгөөр _гарах_ ёстой:

exit 0::
Шүүлтүүр файлыг амжилттай хэвлэсэн тохиолдолд.

exit 1::
Шүүлтүүр файлыг хэвлэж чадаагүй боловч LPD-гээр файлыг дахин хэвлүүлэхээр оролдохыг хүссэн. LPD нь шүүлтүүр энэ төлөвтэй гарсан бол түүнийг дахин эхлүүлэх болно.

exit 2::
Шүүлтүүр файлыг хэвлэж чадаагүй бөгөөд LPD-гээр файлыг дахин хэвлүүлэхийг хүсээгүй. LPD-нь файлыг гаргаж хаях болно.

FreeBSD хувилбартай цуг ирдэг текст шүүлтүүр [.filename]#/usr/libexec/lpr/lpf# нь хуудасны өргөн болон уртын нэмэлт өгөгдлүүдийг ашиглан хэзээ form feed илгээх болон хэвлэгчийн хэрэглээг хэрхэн бүртгэхийг тодорхойлдог. Энэ нь бүртгэлийн оруулгуудыг бичихийн тулд нэвтрэлт, хост болон файлын нэмэлт өгөгдлүүдийн бүртгэл хийлтийг ашигладаг.

Хэрэв та шүүлтүүр худалдаж авахыг хүсэж байгаа бол тэдгээр нь LPD-тэй нийцтэй эсэхийг нь үзээрэй. Хэрэв тийм бол тэдгээр нь дээр тайлбарласан нэмэлт өгөгдлийн жагсаалтуудыг дэмжих ёстой. Та ердийн хэрэглээнд зориулж шүүлтүүрүүд бичих төлөвлөгөөтэй байгаа бол дээрх нэмэлт өгөгдлийн жагсаалт болон гарах кодуудыг дэмждэгээр тэдгээрийг хийгээрэй.

[[printing-advanced-if-conversion]]
==== PostScript(R) хэвлэгчид дээр цэвэр текст ажлуудыг тааруулах нь

Та өөрийн компьютер болон PostScript(R) (эсвэл бусад хэлэн дээр суурилсан) хэвлэгчийнхээ зөвхөн цорын ганц хэрэглэгч бөгөөд өөрийн хэвлэгч уруугаа цэвэр текстийг хэзээ ч илгээхгүй, таны хэвлэгч уруу цэвэр текстийг илгээхийг хүсдэг төрөл бүрийн програмуудын боломжуудыг хэзээ ч ашиглахгүй гэж амлах юм бол та энэ хэсгийн талаар санаа ерөөсөө зовох хэрэггүй юм.

Гэхдээ та PostScript(R) болон цэвэр текст ажлуудыг хэвлэгч уруу илгээхийг хүсэж байгаа бол өөрийн хэвлэгчийн тохиргоог нэн даруй нэмэх хэрэгтэй юм. Ингэхийн тулд ирж байгаа ажил цэвэр текст үү эсвэл PostScript(R) үү гэдгийг илрүүлэх текст шүүлтүүртэй байна. Бүх PostScript(R) ажлууд `%!`-аар (бусад хэвлэгчийн хэлнүүдийн хувьд өөрийн хэвлэгчийн баримтыг үзнэ үү) эхлэх ёстой. Хэрэв тэдгээр нь ажил дахь эхний хоёр тэмдэгт байгаа бол бид PostScript(R)-ийг ашиглаж ажлын үлдсэн хэсгийг шууд дамжуулж болно. Хэрэв тэдгээр нь файл дахь эхний хоёр тэмдэгт биш бол шүүлтүүр текстийг PostScript(R) уруу хувиргаж үр дүнг хэвлэх болно.

Үүнийг бид хэрхэн хийх вэ?

Хэрэв танд цуваа хэвлэгч байгаа бол үүнийг хийх агуу арга нь `lprps`-г суулгах явдал юм. `lprps` нь хэвлэгчтэй хоёр талын холбоог хийдэг PostScript(R) хэвлэгчийн шүүлтүүр юм. Энэ нь хэвлэгчийн төлвийн файлыг хэвлэгчийн дэлгэрэнгүй мэдээллээр шинэчилдэг. Ингэснээр хэрэглэгчид болон администраторууд хэвлэгчийн төлөвийг яг ямар байгааг (`toner low` эсвэл `paper jam` гэх зэрэг) харах боломжтой болох юм. Гэхдээ илүү чухал зүйл бол энэ нь ирж байгаа ажлыг цэвэр текст эсэхийг илрүүлж PostScript(R) уруу хөрвүүлэх `textps` (`lprps`-тэй цуг ирдэг өөр програм) тушаалыг дууддаг `psif` гэгддэг програмыг агуулдаг явдал юм. Дараа нь хэвлэгч уруу ажлыг илгээхийн тулд `lprps` тушаалыг энэ нь ашигладаг.

`lprps` нь FreeBSD-ийн портын цуглуулгад байдаг (crossref:ports[ports,Портын цуглуулга] бүлгийг үзнэ үү). Ашиглах цаасны хэмжээний дагуу package:print/lprps-a4[] болон package:print/lprps-letter[] портын аль нэгийг суулгаж та болно. `lprps`-г суулгасны дараа `lprps`-ийн хэсэг болох `psif` програмд замыг зааж өгөх хэрэгтэй. Хэрэв та `lprps`-г портын цуглуулгаас суулгасан бол доор дурдсаныг [.filename]#/etc/printcap# файл дахь цуваа PostScript(R) хэвлэгчийн оруулгад ашиглах хэрэгтэй:

[.programlisting]
....
:if=/usr/local/libexec/psif:
....

LPD-д хэвлэгчийг унших-бичих горимоор онгойлгох боломж олгохын тулд `rw` боломж нь бас орсон байх шаардлагатай.

Хэрэв танд зэрэгцээ PostScript(R) хэвлэгч байгаа (бөгөөд тиймээс `lprps`-д хэрэгтэй хоёр талын холбоог хэвлэгчтэй цуг ашиглаж чадахгүй байгаа) бол та дараах бүрхүүлийн скриптийг текст шүүлтүүр маягаар ашиглаж болно:

[.programlisting]
....
#!/bin/sh
#
#  psif - Print PostScript or plain text on a PostScript printer
#  Script version; NOT the version that comes with lprps
#  Installed in /usr/local/libexec/psif
#

IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

if [ "$first_two_chars" = "%!" ]; then
    #
    #  PostScript job, print it.
    #
    echo "$first_line" && cat && printf "\004" && exit 0
    exit 2
else
    #
    #  Plain text, convert it, then print it.
    #
    ( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit 0
    exit 2
fi
....

Дээрх скрипт дээр байгаа `textps` нь цэвэр текстийг PostScript(R) уруу хувиргахаар бидний тусдаа суулгасан програм юм. Та дурын текстээс-PostScript(R) уруу хувиргадаг хүссэн програмаа ашиглаж болно. FreeBSD-ийн портын цуглуулга (crossref:ports[ports,Портын цуглуулга] бүлгийг үзнэ үү) нь өргөн боломжтой текстээс-PostScript(R) уруу хувиргадаг `a2ps` гэгддэг програмыг агуулдаг бөгөөд та магадгүй үүнийг судлахыг хүсэж болох юм.

[[printing-advanced-ps]]
==== PostScript(R) биш хэвлэгчид дээр PostScript(R) дүр үзүүлэх

PostScript(R) нь өндөр чанарын маяг тохируулалт болон хэвлэлтэд зориулагдсан _албан ёсны_ стандарт юм. PostScript(R) нь гэхдээ _үнэтэй_ стандарт юм. Aladdin Enterprises-ийн ачаар харин чөлөөтэй PostScript(R)-тэй төстэй, FreeBSD дээр ажилладаг Ghostscript гэгддэг програм байдаг. Ghostscript нь ихэнх PostScript(R) файлуудыг уншиж чаддаг бөгөөд тэдгээрийн хуудаснуудыг PostScript(R) биш хэвлэгчдийн олон загваруудыг оролцуулаад төрөл бүрийн төхөөрөмжүүд рүү амилуулж чаддаг. Ghostscript-г суулгаж өөрийн хэвлэгчийн хувьд тусгай текстийн шүүлтүүрийг ашиглан та өөрийн PostScript(R) биш хэвлэгчийг жинхэнэ PostScript(R) хэвлэгч шигээр ажиллуулах боломжтой байдаг.

Ghostscript нь FreeBSD-ийн портын цуглуулгад байдаг. Олон хувилбар байдаг бөгөөд хамгийн ихээр ашиглагддаг хувилбар нь package:print/ghostscript-gpl[] юм.

PostScript(R) шиг дүр үзүүлэхийн тулд PostScript(R) файл хэвлэж байна уу гэдгийг илрүүлэх текст шүүлтүүр бидэнд байна. Хэрэв энэ нь тийм биш бол шүүлтүүр нь файлыг хэвлэгч уруу шууд дамжуулна; үгүй бол энэ нь файлыг хэвлэгчийн ойлгодог хэлбэр уруу эхлээд хувиргах Ghostscript-г ашиглах болно.

Энд жишээ байна: дараах скрипт нь Hewlett Packard DeskJet 500 хэвлэгчдэд зориулсан текст шүүлтүүр юм. Бусад хэвлэгчдийн хувьд `-sDEVICE` нэмэлт өгөгдлийг сольж `gs` (Ghostscript) тушаал уруу өгөх хэрэгтэй. (Ghostscript-ийн тухайн үеийн суулгацын дэмждэг төхөөрөмжүүдийн жагсаалтыг авахын тулд `gs -h` гэж бичих хэрэгтэй.)

[.programlisting]
....
#!/bin/sh
#
#  ifhp - Print Ghostscript-simulated PostScript on a DeskJet 500
#  Installed in /usr/local/libexec/ifhp

#
#  Treat LF as CR+LF (to avoid the "staircase effect" on HP/PCL
#  printers):
#
printf "\033&k2G" || exit 2

#
#  Read first two characters of the file
#
IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

if [ "$first_two_chars" = "%!" ]; then
    #
    #  It is PostScript; use Ghostscript to scan-convert and print it.
    #
    /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \
      -sOutputFile=- - && exit 0
else
    #
    #  Plain text or HP/PCL, so just print it directly; print a form feed
    #  at the end to eject the last page.
    #
    echo "$first_line" && cat && printf "\033&l0H" &&
exit 0
fi

exit 2
....

Төгсгөлд нь та шүүлтүүрийн LPD-д `if` боломжийн тусламжтай мэдэгдэх хэрэгтэй:

[.programlisting]
....
:if=/usr/local/libexec/ifhp:
....

Ингээд л боллоо. Та `lpr plain.text` болон `lpr whatever.ps` гэж бичиж болох бөгөөд хоюулаа амжилттайгаар хэвлэгдэх болно.

[[printing-advanced-convfilters]]
==== Хувиргах шүүлтүүрүүд

<<printing-simple,Хэвлэгчийн энгийн тохиргоо>> хэсэгт тайлбарласан энгийн тохиргоог дуусгасны дараа магадгүй таны хамгийн эхэнд хийхийг хүссэн зүйл чинь өөрийн дуртай файлын хэлбэршилтүүдэд (цэвэр ASCII текстээс гадна) зориулж хувиргах шүүлтүүрүүдийг суулгах явдал байж болох юм.

===== Хувиргах шүүлтүүрүүдийг яагаад суулгах ёстой вэ?

Хувиргах шүүлтүүрүүд нь төрөл бүрийн файлуудыг хэвлэхэд амар болгодог. Жишээ нь бид TeX хэв маяг тохируулах системтэй их ажилладаг бөгөөд бидэнд PostScript(R) хэвлэгч байна гэж бодъё. TeX-ээс DVI файлыг үүсгэх болгонд бид DVI файлыг PostScript(R) уруу хувиргалгүйгээр шууд хэвлэж чадахгүй. Тушаалын дараалал иймэрхүү хийгдэнэ:

[source,shell]
....
% dvips seaweed-analysis.dvi
% lpr seaweed-analysis.ps
....

DVI файлуудад зориулсан хувиргах шүүлтүүрийг суулгаж LPD-ээр өөрсөддөө зориулан хийлгэж бид гараар хувиргах алхмыг алгасаж болно. Одоо, DVI файлыг авах болгонд бидэнд хэвлэхэд нэг алхам дутуу байх болно:

[source,shell]
....
% lpr -d seaweed-analysis.dvi
....

Бидэнд зориулж DVI файлын хувиргалтыг хийх LPD програмд `-d` тохируулгыг зааж өгнө. <<printing-lpr-options-format,Хэлбэршүүлэх болон хувиргах тохируулгууд>> хэсэг хувиргах тохируулгуудыг жагсаасан байгаа.

Таны хүсэх хэвлэгчийн дэмжих хувиргах тохируулга бүрт зориулж _хувиргах шүүлтүүр_ суулгаж түүний замыг [.filename]#/etc/printcap# файлд зааж өгнө. Хувиргах шүүлтүүр нь энгийн хэвлэгчийн тохиргоон дахь (<<printing-textfilter,Текст шүүлтүүрийг суулгах нь>> хэсгийг үзнэ үү) текст шүүлтүүртэй төстэй. Ялгаа нь цэвэр текст хэвлэхийн оронд энэ шүүлтүүр нь файлыг хэвлэгчийн ойлгодог хэлбэршилт уруу хувиргадаг.

===== Аль хувиргах шүүлтүүрүүдийг би суулгах ёстой вэ?

Та ашиглах хувиргах шүүлтүүрүүдээ суулгах ёстой. Хэрэв та маш их DVI өгөгдлийг хэвлэх бол DVI хувиргах шүүлтүүр хэрэглэгдэнэ. Хэрэв танд маш их troff хэвлэх хэрэгтэй бол та troff шүүлтүүрийг суулгахыг хүсэх байх.

Дараах хүснэгтэд LPD-ийн ажилладаг шүүлтүүрүүд, тэдгээрийн [.filename]#/etc/printcap# файл дахь боломжийн оруулгууд болон тэдгээрийг `lpr` тушаалаар хэрхэн дуудах талаар дурдсан болой:

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Файлын төрөл
| /etc/printcap боломж
| lpr тохируулга

|cifplot
|`cf`
|`-c`

|DVI
|`df`
|`-d`

|plot
|`gf`
|`-g`

|ditroff
|`nf`
|`-n`

|FORTRAN текст
|`rf`
|`-f`

|troff
|`tf`
|`-f`

|raster
|`vf`
|`-v`

|цэвэр текст
|`if`
|none, `-p`, or `-l`
|===

Бидний жишээн дээрх `lpr -d` тушаалыг ашиглах нь хэвлэгчийн хувьд [.filename]#/etc/printcap# файл дахь түүний оруулгад `df` боломж хэрэгтэй гэсэн үг юм.

Бусад хүмүүс магадгүй маргаж болох юм. Гэхдээ FORTRAN текст болон plot зэрэг хэлбэршилтүүд нь магадгүй хуучирсан хэлбэршилтүүд юм. Та өөрийн талдаа эдгээр шинэ ойлголтууд юм уу эсвэл ердөө л өөрчлөн тохируулсан шүүлтүүрүүдийг суулгаж аль нэг хэлбэршилтийн сонголтуудыг өгч болох юм. Жишээ нь та Printerleaf файлуудыг (Interleaf ширээний хэвлэх програмаас гарах файлууд) шууд хэвлэхийг хүсчээ. Гэхдээ plot файлуудыг хэзээ ч хэвлэхгүй гэж бодъё. Тэгвэл та `gf` боломжийн доор Printerleaf хувиргах шүүлтүүрийг суулгаж `lpr -g` тушаал нь "Printerleaf файлуудыг хэвлэх" гэсэн үг болохыг өөрийн хэрэглэгчиддээ сургах хэрэгтэй болох юм.

===== Хувиргах шүүлтүүрүүдийг суулгах нь

Хувиргах шүүлтүүрүүд нь үндсэн FreeBSD суулгацаас гадна суулгах програмууд бөгөөд [.filename]#/usr/local# сан дотор байрлана. [.filename]#/usr/local/libexec# сан нь түгээмэл хэрэглэгддэг байрлал юм. Учир нь тэдгээр нь LPD-ийн зөвхөн ажиллуулах тусгай програмууд юм; ердийн хэрэглэгчид нь тэдгээрийг хэзээ ч ажиллуулах хэрэггүй юм.

Хувиргах шүүлтүүрийг идэвхжүүлэхийн тулд [.filename]#/etc/printcap# файлд хүрэх хэвлэгчийн хувьд тохирох боломжийн доор түүний замыг зааж өгөх явдал юм.

Бидний жишээн дээр `bamboo` гэж нэрлэгдсэн хэвлэгчийн оруулгад DVI хувиргах шүүлтүүрийг бид нэмэх болно. `bamboo` хэвлэгчийн хувьд шинэ `df` боломжийг оруулсан [.filename]#/etc/printcap# файлын жишээг энд дахин үзүүлэв:

[.programlisting]
....
#
#  /etc/printcap for host rose - added df filter for bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:
....

DVI шүүлтүүр нь [.filename]#/usr/local/libexec/psdf# гэж нэрлэгдсэн бүрхүүлийн скрипт юм. Энд тэр скриптийг үзүүлэв:

[.programlisting]
....
#!/bin/sh
#
#  psdf - DVI to PostScript printer filter
#  Installed in /usr/local/libexec/psdf
#
# Invoked by lpd when user runs lpr -d
#
exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@"
....

Энэ скрипт нь `dvips`-г шүүлтүүрийн горимд (`-f` нэмэлт өгөгдөл) хэвлэх ажил болох стандарт оролт дээр ажиллуулдаг. Дараа нь PostScript(R) хэвлэгчийн шүүлтүүр `lprps`-г (<<printing-advanced-if-conversion,PostScript(R) хэвлэгчид дээр текст ажлуудыг тааруулах нь>> хэсгийг үзнэ үү) LPD-ийн энэ скрипт уруу дамжуулсан нэмэлт өгөгдлүүдтэй цуг эхлүүлнэ. `lprps` тушаал нь хэвлэсэн хуудаснуудыг бүртгэхийн тулд тэдгээр нэмэлт өгөгдлүүдийг ашиглах болно.

===== Хувиргах шүүлтүүрийн зарим жишээнүүд

Хувиргах шүүлтүүрүүдийг суулгах тогтмол алхмууд байдаггүй болохоор энэ хэсэгт зарим нэг ажилладаг жишээнүүдийг энд дурдъя. Эдгээрийг өөрийн шүүлтүүрийг хийхдээ заавар болгон ашиглаарай. Тохирохоор бол шууд ашиглах хэрэгтэй.

Энэ жишээ скрипт нь Hewlett Packard LaserJet III-Si хэвлэгчид зориулсан raster (яг үнэндээ GIF файл) хувиргах шүүлтүүр юм:

[.programlisting]
....
#!/bin/sh
#
#  hpvf - Convert GIF files into HP/PCL, then print
#  Installed in /usr/local/libexec/hpvf

PATH=/usr/X11R6/bin:$PATH; export PATH
giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \
    && exit 0 \
    || exit 2
....

Энэ нь GIF файлыг зөөгдөх anymap уруу, гарсныг нь зөөгдөх graymap уруу, гарсныг нь зөөгдөх bitmap уруу, тэр гарсныг нь LaserJet/PCL-тэй нийцтэй өгөгдөлд хувиргаж ажилладаг.

Дээрх шүүлтүүрийг ашиглаж байгаа хэвлэгчид зориулсан оруулгатай [.filename]#/etc/printcap# файлыг энд үзүүлэв:

[.programlisting]
....
#
#  /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:\
        :vf=/usr/local/libexec/hpvf:
....

Дараах скрипт нь `bamboo` гэж нэрлэгдсэн PostScript(R) хувилагчийн groff маяг тохируулах системээс troff өгөгдөлд зориулсан хувиргах шүүлтүүр юм:

[.programlisting]
....
#!/bin/sh
#
#  pstf - Convert groff's troff data into PS, then print.
#  Installed in /usr/local/libexec/pstf
#
exec grops | /usr/local/libexec/lprps "$@"
....

Дээрх скрипт нь хэвлэгчтэй хийх холбоог зохицуулахын тулд `lprps`-г дахин ашигладаг. Хэрэв хэвлэгч зэрэгцээ порт дээр байгаа бол бид энэ скриптийг харин ашиглах болно:

[.programlisting]
....
#!/bin/sh
#
#  pstf - Convert groff's troff data into PS, then print.
#  Installed in /usr/local/libexec/pstf
#
exec grops
....

Ингээд л боллоо. Шүүлтүүрийг идэвхжүүлэхийн тулд бид дараах оруулгыг [.filename]#/etc/printcap# файлд нэмэх хэрэгтэй:

[.programlisting]
....
:tf=/usr/local/libexec/pstf:
....

Хуучин гаруудыг FORTRAN-с ичихэд хүргэх жишээг энд үзүүлэв. Энэ нь цэвэр текстийг шууд хэвлэж чадах дурын хэвлэгчид зориулсан FORTRAN-текст шүүлтүүр юм. Бид үүнийг `teak` хэвлэгчид зориулж суулгах болно:

[.programlisting]
....
#!/bin/sh
#
# hprf - FORTRAN text filter for LaserJet 3si:
# Installed in /usr/local/libexec/hprf
#

printf "\033&k2G" && fpr && printf "\033&l0H" &&
 exit 0
exit 2
....

Тэгээд бид энэ шүүлтүүрийг идэвхжүүлэхийн тулд `teak` хэвлэгчид зориулж [.filename]#/etc/printcap# файлд энэ мөрийг нэмэх болно:

[.programlisting]
....
:rf=/usr/local/libexec/hprf:
....

Энд сүүлийн бөгөөд зарим талаараа төвөгтэй жишээ байна. Бид DVI шүүлтүүрийг өмнө танилцуулсан LaserJet хэвлэгч `teak`-д нэмэх болно. Эхлээд амархан хэсэг нь: [.filename]#/etc/printcap# файлыг DVI шүүлтүүрийн байрлалаар шинэчлэх явдал юм:

[.programlisting]
....
:df=/usr/local/libexec/hpdf:
....

Одоо хэцүү хэсэг нь: шүүлтүүр хийх явдал юм. Үүний тулд бидэнд DVI-ээс-LaserJet/PCL уруу хувиргах програм хэрэгтэй. FreeBSD-ийн портын цуглуулгад (see crossref:ports[ports,Портын цуглуулга]) нэг байдаг: package:print/dvi2xx[]. Энэ портыг суулгах нь бидэнд хэрэгтэй програм `dvilj2p`-г өгдөг. Энэ нь DVI-г LaserJet IIp, LaserJet III, болон LaserJet 2000-тай нийцтэй кодууд уруу хувиргадаг.

`dvilj2p` нь шүүлтүүр `hpdf`-г нэлээн төвөгтэй болгодог. Учир нь `dvilj2p` нь стандарт оролтоос уншиж чаддаггүй. Энэ нь файлын нэртэй ажиллахыг хүсдэг. Юу нь бүр муу вэ гэхээр файлын нэр нь [.filename]#.dvi# гэж төгсөх ёстой. Тэгэхээр [.filename]#/dev/fd/0#-г стандарт оролтод зориулж ашиглах нь асуудалтай болно. Бид түр зуурын файлын нэрийг ([.filename]#.dvi#-аар төгссөн) [.filename]#/dev/fd/0# уруу болгож холбоос үүсгэн энэ асуудлыг тойрон гарч болох юм. Ингэснээр `dvilj2p` тушаалыг стандарт оролтоос уншуулах юм.

Асуудалтай нэг зүйл нь бид [.filename]#/tmp#-г түр зуурын холбоост ашиглаж болохгүй явдал юм. Симболын холбоосуудыг `bin` хэрэглэгч болон бүлэг эзэмшдэг. Тэгээд [.filename]#/tmp# санд наалттай (sticky) бит тохируулагдсан байдаг. Шүүлтүүр нь холбоос үүсгэж чадах боловч холбоос нь өөр хэрэглэгчид харьяалагдах болохоор дууссаныхаа дараа цэвэрлэж устгаж чаддаггүй юм.

Харин шүүлтүүр нь түр хадгалах сан ([.filename]#/etc/printcap# файлд `sd` боломжоор заагдсан) болох одоо ажиллаж байгаа санд симболын холбоос үүсгэх болно . Энэ нь шүүлтүүрийн ажлаа хийх төгс газар юм. Ялангуяа илүү их чөлөөтэй дискний зай [.filename]#/tmp# сан доторхоос илүү түр хадгалах санд (заримдаа) байдаг.

Ингээд эцэст нь шүүлтүүр энэ байна:

[.programlisting]
....
#!/bin/sh
#
#  hpdf - Print DVI data on HP/PCL printer
#  Installed in /usr/local/libexec/hpdf

PATH=/usr/local/bin:$PATH; export PATH

#
#  Define a function to clean up our temporary files.  These exist
#  in the current directory, which will be the spooling directory
#  for the printer.
#
cleanup() {
   rm -f hpdf$$.dvi
}

#
#  Define a function to handle fatal errors: print the given message
#  and exit 2.  Exiting with 2 tells LPD to do not try to reprint the
#  job.
#
fatal() {
    echo "$@" 1>&2
    cleanup
    exit 2
}

#
#  If user removes the job, LPD will send SIGINT, so trap SIGINT
#  (and a few other signals) to clean up after ourselves.
#
trap cleanup 1 2 15

#
#  Make sure we are not colliding with any existing files.
#
cleanup

#
#  Link the DVI input file to standard input (the file to print).
#
ln -s /dev/fd/0 hpdf$$.dvi || fatal "Cannot symlink /dev/fd/0"

#
#  Make LF = CR+LF
#
printf "\033&k2G" || fatal "Cannot initialize printer"

#
#  Convert and print.  Return value from dvilj2p does not seem to be
#  reliable, so we ignore it.
#
dvilj2p -M1 -q -e- dfhp$$.dvi

#
#  Clean up and exit
#
cleanup
exit 0
....

[[printing-advanced-autoconv]]
===== Автомат хувиргалт: Хувиргагч шүүлтүүртэй ижилхэн шүүлтүүрүүд

Эдгээр бүх хувиргагч шүүлтүүрүүд нь таны хэвлэх орчинд тань маш олон ажлыг гүйцэтгэж өгдөг ч хэрэглэгчдийг тэднээс аль нэгийг нь хэрэглэхийг шаарддаг (man:lpr[1]-н тушаалын мөрөн дээр). Хэрэв таны хэрэглэгчид компьютер дээр сайн гаршаагүй хүмүүс бол иймэрхүү шүүлтүүрийн сонголтууд тэд нарыг залхаах болно. Бүр муудаж болох нөхцөл юу гэвэл буруу сонгосон шүүлтүүрийг буруу файлд хэрэглэснээр хэвлэгчээр олон зуун хуудас үр дүнгүй хэвлэгдэх явдал юм. 

Анхнаасаа хувиргагч шүүлтүүрүүдийг суулгахаасаа өмнө эхлээд та энгийн текст шүүлтүүрийг суулгаад (анхдагч шүүлтүүр ) хэвлэгдэх файлын төрлийг нь таниад хэрэгтэй шүүлтүүрийг хэрэглэх нь зүйтэй. `file` гэх мэтийн хэрэгслүүд иймэрхүү зүйлд ашиглагдаж болох юм. Мэдээж _зарим_ файлын төрлийг хооронд нь ялгахад бэрх боловч мэдээж тэдэнд зориулж та шүүлтүүр үүсгэж болно. 

FreeBSD-н портын цуглуулга дотор `apsfilter` (package:print/apsfilter[]) нэртэй автомат хувиргалт хийдэг текст шүүлтүүр бий. Энэ шүүлтүүр нь энгийн текст, PostScript(R), DVI болон бараг бүх л төрлийн файлуудыг таньж тэдэнд тохирсон шүүлтүүрийг нь автоматаар ажиллуулдаг. 

[[printing-advanced-of]]
==== Гаралтын шүүлтүүрүүд

LPD түр хадгалагч системд бид нарын нээгээгүй бас нэг шүүлтүүрийн төрөл бий. Гаралтын шүүлтүүр гэгч нь текст шүүлтүүр шиг зөвхөн энгийн текст хэвлэх зориулалттай бөгөөд маш олон зүйлийг хялбаршуулсан байдаг. Хэрэв та текст шүүлтүүр хэрэглээгүй мөртлөө гаралтын шүүлтүүр хэрэглэж байгаа бол:

* LPD нь хэвлэгдэх файл болгонд шүүлтүүр ажиллуулалгүйгээр гаралтын шүүлтүүрийг нэг удаа л эхлүүлдэг. 
* LPD нь гаралтын шүүлтүүрт зориулж файлын эхлэл болон төгсгөлийг мэдээлэх алба байхгүй. 
* LPD нь хэрэглэгчийн болон компьютерийн нэвтрэх эрхийг дамжуулдаггүй болохоор бүртгэл хийх зориулалт байдаггүй. Үнэн хэрэгтээ бол энэ нь ердөө хоёр утга авдаг:
+
`шүүлтүүрийн-нэр` -w__өргөн__ -l__урт__
+ 
Энд _өргөн_ нь `pw`-н шинж чанар бөгөөд _урт_ нь `pl`-н шинж чанар юм. 

Гаралтын шүүлтүүрийн амарчлалд бас найдах хэрэггүй. Хэрэв хэвлэгдэх файлуудыг тусдаа хуудаснаас эхлүүлэхийг та хүсэж байгаа бол гаралтын шүүлтүүр _ажиллахгүй_. Үүнд текст шүүлтүүр (бас оролтын шүүлтүүр гэж нэрлэдэг) хэрэглэх хэрэгтэй ба <<printing-textfilter,Текст шүүлтүүрийг суулгах нь >> хэсгээс харна уу. Мөн цаашлаад үнэн чанартаа бол гаралтын шүүлтүүрүүд нь байт хэлбэрээр урсаж байгаа хэвлэгдэх зүйлсээс онцгой тэмдэгтүүдийг ялгаж LPD-н нэрийн өмнөөс дохио илгээх маягаар ажилладаг _нэлээн төвөгтэй_ систем юм.

Хэрэв та толгой хуудаснуудыг хэвлэхийг хүсэж escape дарааллууд юм уу эсвэл эхлүүлэх мөрүүдийг илгээх хэрэгтэй бол гарах шүүлтүүр нь _шаардлагатай_ юм. (Гэхдээ хэрэв та толгой хуудаснуудыг хүсэж байгаа хэрэглэгчийн бүртгэлээс төлбөр авах хүсэлтэй байгаа бол энэ нь _дэмий_ зүйл юм. Учир нь LPD нь гаралтын шүүлтүүрт ямар ч хэрэглэгч юм уу эсвэл хостын мэдээллийг өгдөггүй юм.)

Нэг хэвлэгч дээр LPD нь гаралтын шүүлтүүр болон текст эсвэл бусад шүүлтүүрүүдийг зөвшөөрдөг. Ийм тохиолдолд LPD нь зөвхөн толгой хуудсыг хэвлэхийн тулд гаралтын шүүлтүүрийг эхлүүлэх болно (<<printing-advanced-header-pages,Толгой хуудаснууд>> хэсгийг үзнэ үү). Тэгээд LPD нь хоёр байтыг шүүлтүүр рүү илгээж гаралтын шүүлтүүр нь _өөрийгөө зогсооно_ гэж тооцдог: эдгээр хоёр байт нь ASCII 031 дараа нь ASCII 001 юм. Гаралтын шүүлтүүр нь эдгээр хоёр байтыг (031, 001) хараад өөртөө `SIGSTOP` илгээж зогсох ёстой. LPD бусад шүүлтүүрийг ажиллуулж дууссаны дараа гаралтын шүүлтүүрт `SIGCONT` илгээж түүнийг дахин эхлүүлэх болно.

Хэрэв гаралтын шүүлтүүр байгаа боловч текст шүүлтүүр _байхгүй_ бөгөөд LPD цэвэр текст ажил дээр ажиллаж байгаа бол LPD нь ажлыг хийхийн тулд гаралтын шүүлтүүрийг ашигладаг. Өмнө хэлсэнчлэн гаралтын шүүлтүүр нь ажлын файл бүрийг дарааллаар form feed-үүд эсвэл бусад цаасны дэвшилт зэрэг хөндлөнгийн оролцоогүйгээр хэвлэх бөгөөд энэ нь таны хүсэж байгаа зүйл _биш_ байж болох юм. Бараг бүх тохиолдолд танд текст шүүлтүүр хэрэгтэй.

`lpf` гэж танд урьд нь текст шүүлтүүр хэмээн танилцуулсан шүүлтүүр бас гаралтын шүүлтүүр болон ажилладаг. Хэрэв танд ямар нэгэн урсгалаас байт таньж код илгээх гаралтын шүүлтүүр бичилгүйгээр түргэн-боловч-бултар шүүлтүүр хэрэгтэй бол `lpf`-г хэрэглээрэй. Та мөн бүрхүүл дээр скрипт бичиж хэвлэгчид шаардлагатай анхдагч утгуудыг нь `lpf`-аар тохируулж бас болно. 

[[printing-advanced-lpf]]
==== `lpf`: Текст шүүлтүүр

FreeBSD хоёртын түгээлттэй цуг ирдэг [.filename]#/usr/libexec/lpr/lpf# програм нь гаралтад (`lpr -i` тушаалаар илгээгдсэн ажил) догол гаргах, үсгэн тэмдэгтүүдийг дамжуулахыг зөвшөөрөх (`lpr -l` тушаалаар илгээгдсэн ажил), ажил дахь устгах тэмдэгтүүд болон tab-уудад зориулж хэвлэх байрлалыг тааруулах болон хэвлэсэн хуудаснуудыг бүртгэж чаддаг текст шүүлтүүр (оролтын шүүлтүүр) юм. Энэ нь бас гаралтын шүүлтүүр шиг ажиллаж чаддаг.

`lpf` нь олон хэвлэх орчнуудад тохирдог. Хэдийгээр энэ нь хэвлэгч уруу эхлүүлэх дарааллуудыг илгээх боломжгүй боловч хэрэгтэй эхлүүлэлтийг хийж `lpf`-г ажиллуулах бүрхүүлийн скрипт бичихийг хялбар болгодог.

Хуудсын бүртгэлийг `lpf`-ээр зөв хийлгэхийн тулд [.filename]#/etc/printcap# файл дахь `pw` болон `pl` боломжуудад зөв утгуудыг оруулах хэрэгтэй. Хуудсанд хичнээн текст багтах болон хэрэглэгчийн ажилд хичнээн хуудас байгааг тодорхойлохын тулд энэ нь эдгээр утгуудыг ашигладаг. Хэвлэгчийн бүртгэлийн тухай дэлгэрэнгүй мэдээллийг <<printing-advanced-acct,Хэвлэгчийн хэрэглээг бүртгэх нь>> хэсгээс үзнэ үү.

[[printing-advanced-header-pages]]
=== Толгой хуудаснууд

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

Толгой хуудаснууд, бас _сурталчилгаа_ эсвэл _тэсрэх хуудаснууд_ гэгддэг хуудаснууд нь хуудсууд хэвлэгдсэний дараа ажлууд нь хэнд хамаарахыг тодорхойлдог. Тэдгээр нь ихэвчлэн том, тод үсгээр, магадгүй чимсэн хүрээнүүдтэйгээр хэвлэгддэг. Ингэснээр хэвлэсэн олон хуудаснууд дотроос хэрэглэгчдийн ажлуудыг багтаасан жинхэнэ баримт болон ялгардаг. Энэ нь хэрэглэгчдэд өөрсдийн ажлуудыг хурдан олох боломжийг олгодог. Толгой хуудасны илэрхий сул тал нь ажил болгоны хувьд илүү хуудас хэвлэгддэг явдал бөгөөд тэдний түр зуурын ашиг хэдхэн минут үргэлжилж тун удалгүй тэдгээрийг хогийн сав эсвэл хогийн овоон дотор орохыг харж болох юм. (Толгой хуудаснууд нь файл болгонтой биш, ажил болгонтой цуг явдгийг санаарай. Тэгэхээр цаас дэмий үрэх нь тийм ч их муу биш байж болох юм.)

Хэрэв таны хэвлэгч цэвэр текстийг шууд хэвлэж чаддаг бол LPD систем нь таны хэвлэсэн зүйлүүдэд толгой хуудаснуудыг автоматаар өгч чаддаг. Хэрэв танд PostScript(R) хэвлэгч байгаа бол толгой хуудсыг үүсгэхийн тулд танд гадаад програм хэрэгтэй болох юм; <<printing-advanced-header-pages-ps,PostScript(R) хэвлэгчид дээрх толгой хуудаснууд>> хэсгийг үзнэ үү.

[[printing-advanced-header-pages-enabling]]
==== Толгой хуудаснуудыг идэвхжүүлэх нь

<<printing-simple,Хэвлэгчийн энгийн тохиргоо>> хэсэгт бид [.filename]#/etc/printcap# файлд `sh`-ийг ("suppress header" буюу толгойг дарах гэсэн утгатай) зааж өгөн толгой хуудаснуудыг болиулсан. Хэвлэгчийн хувьд толгой хуудаснуудыг идэвхжүүлэхийн тулд ердөө л `sh` боломжийг устгах хэрэгтэй.

Хэтэрхий амархан санагдаж байна, тийм үү?

Таны зөв. Та хэвлэгч уруу эхлүүлэх мөрүүдийг илгээхийн тулд гаралтын шүүлтүүрийг өгөх хэрэгтэй болж _болох_ юм. Энд Hewlett Packard PCL-тэй нийцтэй хэвлэгчдэд зориулсан жишээ гаралтын шүүлтүүр байна:

[.programlisting]
....
#!/bin/sh
#
#  hpof - Output filter for Hewlett Packard PCL-compatible printers
#  Installed in /usr/local/libexec/hpof

printf "\033&k2G" || exit 2
exec /usr/libexec/lpr/lpf
....

Гаралтын шүүлтүүрийн замыг `of` боломжид зааж өгөх хэрэгтэй. Дэлгэрэнгүй мэдээллийг <<printing-advanced-of,Гаралтын шүүлтүүрүүд>> хэсгээс үзнэ үү.

Бидний урьд нь танилцуулсан `teak` хэвлэгчид зориулсан жишээ [.filename]#/etc/printcap# файл энд байна; бид толгой хуудаснуудыг идэвхжүүлж дээрх гаралтын шүүлтүүрийг нэмсэн:

[.programlisting]
....
#
#  /etc/printcap for host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
        :if=/usr/local/libexec/hpif:\
        :vf=/usr/local/libexec/hpvf:\
        :of=/usr/local/libexec/hpof:
....

Одоо хэрэглэгч `teak` уруу ажлуудаа хэвлэхэд ажил болгонтой толгой хуудас хүлээн авах болно. Хэрэв хэрэглэгчид өөрсдийн хэвлэсэн зүйлсээ хайхад цаг зарцуулахыг хүсэж байгаа бол толгой хуудаснуудыг дарж ажлаа `lpr -h` тушаалаар илгээж болно; man:lpr[1]-ийн тохируулгуудын талаар дэлгэрэнгүйг <<printing-lpr-options-misc,Толгой хуудасны тохируулгууд>> хэсгээс үзнэ үү.

[NOTE]
====
LPD нь толгой хуудасны дараа form feed тэмдэгт хэвлэдэг. Хэрэв таны хэвлэгч хуудсаа гаргахын тулд өөр тэмдэгт юм уу эсвэл өөр тэмдэгтүүдийн дараалал ашигладаг бол тэдгээрийг [.filename]#/etc/printcap# файлд `ff` боломжоор зааж өгөх хэрэгтэй.
====

[[printing-advanced-header-pages-controlling]]
==== Толгой хуудаснуудыг хянах нь

Толгой хуудаснуудыг идэвхжүүлснээр LPD нь хэрэглэгч, хост, болон ажлыг таниулах том үсгүүдтэй _урт толгой_ бүхий хуудсыг үүсгэх болно. Энд жишээ байна (`kelly` нь "outline" гэсэн нэртэй ажлыг `rose`-с хэвлэжээ):

[source,shell]
....
      k                   ll       ll
      k                    l        l
      k                    l        l
      k   k     eeee       l        l     y    y
      k  k     e    e      l        l     y    y
      k k      eeeeee      l        l     y    y
      kk k     e           l        l     y    y
      k   k    e    e      l        l     y   yy
      k    k    eeee      lll      lll     yyy y
                                               y
                                          y    y
                                           yyyy

                                   ll
                          t         l        i
                          t         l
       oooo    u    u   ttttt       l       ii     n nnn     eeee
      o    o   u    u     t         l        i     nn   n   e    e
      o    o   u    u     t         l        i     n    n   eeeeee
      o    o   u    u     t         l        i     n    n   e
      o    o   u   uu     t  t      l        i     n    n   e    e
       oooo     uuu u      tt      lll      iii    n    n    eeee

      r rrr     oooo     ssss     eeee
      rr   r   o    o   s    s   e    e
      r        o    o    ss      eeeeee
      r        o    o      ss    e
      r        o    o   s    s   e    e
      r         oooo     ssss     eeee

                                              Job:  outline
                                              Date: Sun Sep 17 11:04:58 1995
....

LPD нь ажлыг шинэ хуудсан дээр эхлүүлэхийн тулд энэ текстийн дараа form feed-г нэмдэг ([.filename]#/etc/printcap# дахь хүрэх хэвлэгчийн оруулгад `sf` (form feed-г дарах) байхгүй бол).

Хэрэв та хүсэж байгаа бол LPD нь _богино толгой_ хийж чаддаг; [.filename]#/etc/printcap# файлд `sb`-г (short banner буюу богино сурталчилгаа) зааж өгөх хэрэгтэй. Толгой хуудас иймэрхүү харагдах болно:

[source,shell]
....
rose:kelly  Job: outline  Date: Sun Sep 17 11:07:51 1995
....

Бас анхдагчаар LPD нь эхлээд толгой хуудсыг дараа нь ажлыг хэвлэдэг. Эсрэгээр болгохын тулд [.filename]#/etc/printcap# файлд `hl`-г (header last буюу толгой сүүлд) зааж өгөх хэрэгтэй.

[[printing-advanced-header-pages-accounting]]
==== Толгой хуудаснуудыг бүртгэх нь

LPD-н өөрт нь суугдсан толгой хуудаснууд нь хэвлэлтэд бүртгэл тооцоо хийх шаардлагатай үед _үнэгүй_ байх зарчмыг шаарддаг.

Яагаад?

Учир нь гаралтын шүүлтүүр бол толгой хуудас хэвлэгдэх үед ажилладаг тусдаа биеэ даасан гадаад програм бөгөөд бүртгэл хийж болох юм шиг боловч _хэрэглэгч юм уу компьютерийн_ тухай ямар ч бүртгэлийн мэдээллээр хангагддаггүй учир хэн дээр ямар тооцоо бүртгэл хийхээ мэдэж чаддаггүй. Зөвхөн текст шүүлтүүрийг өөрчилж "хуудасны тоог нэгээр нэмэх" юм уу эсвэл хувиргах ямар нэгэн шүүлтүүрийг (хэрэглэгч юм уу компьютерийн мэдээлэлтэй) хэрэглэгч `lpr -h` гэсэн тушаалаар дарж болдог. Дарагдсан ч гэсэн тэдгээр толгой хуудаснууд бүртгэл тооцоо хийж байдаг. Үндсэндээ орчны хувьсагчдад дассан хэрэглэгчдэд `lpr -h` тушаал илүү аятайхан байж болох боловч шаардлагатай гэсэн үг биш билээ. 

Шүүлтүүр бүр өөрсдийн гэсэн толгой хуудас үүсгэх нь _тийм хангалттай шийдэл бас биш_ (хэдийгээр тус бүрдээ төлбөр тооцоо хийж чадах байсан ч ). Хэрэв хэрэглэгч `lpr -h` тушаалаар толгой хуудсыг дарсан ч LPD нь шүүлтүүрүүд рүү `-h` гэсэн сонголтын талаар ямар ч мэдээлэл явуулдаггүй болохоор төлбөр тооцоо хийгдсээр байх болно. 

Тэгэхээр танд ямар сонголтууд байна вэ?

Та дараах зүйлсийг хийх боломжтой:

* LPD-н зарчмыг хүлээн зөвшөөрч толгой хуудсанд төлбөр тооцохгүй болох.
* LPRng гэх мэтийн LPD-н ижил төрлийн түр хадгалагчдыг хэрэглэх. <<printing-lpd-alternatives,Түр хадгалагчидтай ижил төрлийн хадгалагчид >> хэсэгт LPD-г орлуулж болох түр хадгалагчдын талаар өгүүлсэн буй. 
* _Гайгүй сэргэлэн_ гаралтын шүүлтүүр бичих. Гаралтын шүүлтүүр гэдэг нь ердийн үед бол хэвлэгчийг тохируулах юм уу эсвэл энгийн тэмдэгт хувиргуур хийдэг програм юм. Ийм шүүлтүүр нь толгой хуудас болон энгийн текст зэрэгт тун таардаг ( хэрэв тэнд ямар ч текст (оролтын) шүүлтүүр байхгүй бол). Гэхдээ хэрэв тэнд энгийн текст хэвлэх текст шүүлтүүр байгаа бол LPD нь гаралтын шүүлтүүрийг зөвхөн толгой хуудсанд ажиллуулдаг. Тэгээд гаралтын шүүлтүүр нь толгой хуудаснаас LPD-н үүсгэсэн хэрэглэгч болон компьютерт тооцсон тооцоог салгаж авч чаддаг. Энэ арганд буй нэг хүндрэл бол гаралтын шүүлтүүр нь ямар бүртгэлийн файл хэрэглэхээ мэдэхгүйд байгаа юм (энэ файл нь `af` тохиргоогоор дамжигддаггүй). Гэвч хэрэв танд бэлэн бүртгэл файл байгаа бол тэдгээрийг гаралтын шүүлтүүр дотор бичиж өгч болно. Тооцоог салгаж авах хэсэгт нэмэр болгохын тулд `sh` (short header буюу богино толгой) тохиргоог [.filename]#/etc/printcap# файл дотор оруулах нь зүйтэй. Тэгээд ч энэ бүхэн танд төвөгтэй санагдаж магадгүй бөгөөд хэрэглэгчид толгой хуудсанд төлбөр тооцдоггүй өгөөмөр сүлжээ зохицуулагчийг илүүд үзэж бас болох юм.

[[printing-advanced-header-pages-ps]]
==== PostScript(R) хэвлэгч дээрх толгой хуудаснууд

Өмнө өгүүлснээр LPD нь маш олон хэвлэгчдэд зориулж энгийн текст толгой хуудас үүсгэж чаддаг. Мэдээж PostScript(R) нь энгийн текстийг шууд хэвлэж чаддаггүй болохоор LPD-н энэ шинж чанар бараг хэрэггүй билээ.

Толгой хуудас байлгах нэг арга бол хувиргах шүүлтүүр болгон толгой хуудас үүсгэх юм. Ингэхийн тулд шүүлтүүрүүд нь хэрэглэгч болон компьютерийн мэдээллийг хүлээж аваад толгой хуудас үүсгэдэг байхаар зохицуулах хэрэгтэй. Энэ аргын нэг муу тал нь хэрэглэгчид `lpr -h` тушаал ашигласан ч толгой хуудастай хуудас хэвлээд байх болно.

Энэ аргыг жаахан судалж үзэцгээе. Дараах скрипт гурван утга хүлээж аваад(хэрэглэгчийн нэвтрэх нэр, компьютерийн нэр, хэвлэгдэх ажлын нэр) PostScript(R) толгой хуудас үүсгэж байна:

[.programlisting]
....
#!/bin/sh
#
#  make-ps-header - make a PostScript header page on stdout
#  Installed in /usr/local/libexec/make-ps-header
#

#
#  These are PostScript units (72 to the inch).  Modify for A4 or
#  whatever size paper you are using:
#
page_width=612
page_height=792
border=72

#
#  Check arguments
#
if [ $# -ne 3 ]; then
    echo "Usage: `basename $0` <user> <host> <job>" 1>&2
    exit 1
fi

#
#  Save these, mostly for readability in the PostScript, below.
#
user=$1
host=$2
job=$3
date=`date`

#
#  Send the PostScript code to stdout.
#
exec cat <<EOF
%!PS

%
%  Make sure we do not interfere with user's job that will follow
%
save

%
%  Make a thick, unpleasant border around the edge of the paper.
%
$border $border moveto
$page_width $border 2 mul sub 0 rlineto
0 $page_height $border 2 mul sub rlineto
currentscreen 3 -1 roll pop 100 3 1 roll setscreen
$border 2 mul $page_width sub 0 rlineto closepath
0.8 setgray 10 setlinewidth stroke 0 setgray

%
%  Display user's login name, nice and large and prominent
%
/Helvetica-Bold findfont 64 scalefont setfont
$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto
($user) show

%
%  Now show the boring particulars
%
/Helvetica findfont 14 scalefont setfont
/y 200 def
[ (Job:) (Host:) (Date:) ] {
200 y moveto show /y y 18 sub def }
forall

/Helvetica-Bold findfont 14 scalefont setfont
/y 200 def
[ ($job) ($host) ($date) ] {
        270 y moveto show /y y 18 sub def
} forall

%
% That is it
%
restore
showpage
EOF
....

Одоо ямар ч хувиргах шүүлтүүр болон текст шүүлтүүрүүд нь энэ скриптийг дуудаж толгой хуудас үүсгэж хэвлэж болно. Энд одоо өмнө үзүүлж байсан DVI хувиргах шүүлтүүрийг жаахан өөрчилж толгой хуудас үүсгэхийг харуулав:

[.programlisting]
....
#!/bin/sh
#
#  psdf - DVI to PostScript printer filter
#  Installed in /usr/local/libexec/psdf
#
#  Invoked by lpd when user runs lpr -d
#

orig_args="$@"

fail() {
    echo "$@" 1>&2
    exit 2
}

while getopts "x:y:n:h:" option; do
    case $option in
        x|y)  ;; # Ignore
        n)    login=$OPTARG ;;
        h)    host=$OPTARG ;;
        *)    echo "LPD started `basename $0` wrong." 1>&2
              exit 2
              ;;
    esac
done

[ "$login" ] || fail "No login name"
[ "$host" ] || fail "No host name"

( /usr/local/libexec/make-ps-header $login $host "DVI File"
  /usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args
....

Хэрэглэгчийн нэр болон компьютерийн нэрийг хэрхэн салгаж авч байгааг анхаарах хэрэгтэй. Бусад шүүлтүүр дээр ийм салгалт хийх нь ижилхэн. Текст шүүлтүүр нь хэрэглэгчийн нэр болон компьютерийн нэрийг арай өөр аргаар салгаж авдаг. (<<printing-advanced-filters,Шүүлтүүр хэрхэн ажилладаг вэ>> хэсгээс харна уу).

Өмнө өгүүлсний дагуу дээр үзүүлсэн энэ загвар нь хэдийгээр тун энгийн бүтээгдсэн ч гэсэн "suppress header page" сонголтыг ( `-h` сонголт) `lpr` дээр хорьдог. Хэрэв хэрэглэгчид жаахан хэмнэхийг хүссэн ч (эсвэл толгой хуудасны төлбөрт өгөх хэдэн төгрөгөө) шүүлтүүр болгон толгой хуудас хэвлэдэг болохоор дээрх аргыг хэрэглээд үр дүн өгөхгүй.

Хэвлэгдэх бүр толгой хуудсыг хорихын тулд <<printing-advanced-header-pages-accounting,Толгой хуудасны тооцоо бүртгэл>> хэсэгт үзүүлсэн дараах бяцхан аргыг хэрэглэнэ: гаралтын шүүлтүүр бичээд түүгээрээ LPD-н үүсгэсэн толгой хэсгийг салгаж аван PostScript(R) хувилбарыг нь үүсгэх. Хэрэв хэрэглэгч `lpr -h` тушаал хэрэглэвэл LPD толгой хэсэг үүсгэхгүй бөгөөд бас таны гаралтын шүүлтүүрийг ажиллуулахгүй. Бусад үед гаралтын шүүлтүүр нь LPD-с текстийг уншаад түүнд тохирсон PostScript(R) толгой хуудсыг хэвлэгчид өгдөг.

Хэрэв танд цуваа холболттой PostScript(R) хэвлэгч байгаа бол `lprps`-г та хэрэглэж болох бөгөөд энэ нь дээр ярьсан зүйлийг гүйцэтгэж чаддаг `psof` нэртэй гаралтын шүүлтүүртэй хамт ирдэг. Тэмдэглэж хэлэхэд, `psof` нь толгой хуудсанд тооцоо боддоггүй. 

[[printing-advanced-network-printers]]
=== Сүлжээгээр хэвлэх

FreeBSD нь хэвлэх ажлыг алсад буй компьютер руу илгээж сүлжээгээр хэвлэхийг бас дэмждэг. Сүлжээгээр хэвлэх нь хоёр зүйлийг хамарч байдаг.

* Алсад буй компьютерт залгагдсан хэвлэгч рүү хандах. Та нэг хэвлэгчийг нэг компьютер дээр тохирох цуваа юм уу зэрэгцээ холболтоор хэвлэгчийг залгана. Дараа нь та LPD-г суулгаж алсад буй компьютер уг хэвлэгч залгагдсан компьютер руу хандаж болохыг тохируулна. <<printing-advanced-network-rm,Алсад буй компьютерт залгагдсан хэвлэгч>> хэсэгт үүнийг хэрхэн хийх талаар зааварласан бий.
* Шууд сүлжээнд залгагдсан хэвлэгч рүү хандах. Ийм хэвлэгч нь ердийн цуваа юм уу эсвэл зэрэгцээ холболтын интерфэйсээс гадна (эсвэл оронд нь) сүлжээний залгууртай байдаг. Ийм хэвлэгч дараах маягаар ажилладаг:

** Хэвлэгч LPD-н дамжуулах протоколыг таньж ойлгох ба алсаас ирүүлсэн ажлуудад дараалал үүсгэж чаддаг. Ийм тохиолдолд уг хэвлэгч нь өөр дээрээ LPD суулгасан ердийн компьютер шиг ажиллах болно. <<printing-advanced-network-rm,Алсад буй компьютерт залгагдсан хэвлэгчид>> хэсэгт иймэрхүү хэвлэгчийг хэрхэн тохируулах талаар харна уу.
** Хэвлэгч нь сүлжээгээр өгөгдлийг урсгал мэт хүлээж авдаг тийм төрлийн холболт дэмждэг байж болох юм. Энэ тохиолдолд та нэг компьютерт уг хэвлэгчийг "залгаад" суулгасан компьютер нь ирж буй ажлуудыг түр хадгалах хариуцлагыг нь дааж хэвлэгч рүүгээ өгөгдлийг урсгаж байхаар тохируулах хэрэгтэй. <<printing-advanced-network-net-if, Сүлжээний өгөгдлийн урсгал холболтын төхөөрөмжтэй хэвлэгчид>> хэсэгт ийм төрлийн хэвлэгчийг хэрхэн суулгах талаар зааварласан байгаа. 

[[printing-advanced-network-rm]]
==== Алсад буй компьютерт залгагдсан хэвлэгчид

LPD-д өөрт нь өөр газар LPD (эсвэл LPD-тэй зохимжтой) ажиллаж байгаа машин руу хэвлэх ажлыг илгээж чаддаг ажиллагаа байдаг. Энэ шинж чанарыг ашиглаж та өөр компьютерт хэвлэгчээ залгаад түүнд өөр газраас хандаж болох боломж нээж өгч байна. Энэ арга нь мөн LPD дамжуулах протоколыг ойлгодог хэвлэгчид дээр бас ажиллана .

Иймэрхүү алсаас хэвлэх ажиллагааг гүйцэтгэхийн тулд эхлээд хэвлэгчээ _хэвлэгчийн эзэн_ болгож нэг машинд <<printing-simple,Хэвлэгч суулгах энгийн явц>> хэсэгт заасны дагуу залгах хэрэгтэй. Шаардлагатай бол <<printing-advanced,Хэвлэгчийн нэмэлт тохиргоо>> хэсэгт заасан тохиргоог хийж болно. Хэвлэгчээ хэвлэж байгааг нь магадлаад LPD тохиргоог зөвшөөрсөн эсэхийг шалгах хэрэгтэй. Мөн _remote host_ дотор _local host_ нь LPD үйлчилгээг хэрэглэх эрхтэй эсэхийг шалгаарай (<<printing-advanced-restricting-remote,Алсад буй хостод хэвлэх хязгаарлалт хийх>> хэсэгт харна уу).

Хэрэв та сүлжээний карттай бөгөөд LPD протокол дэмждэг хэвлэгч хэрэглэж байгаа бол дээр өгүүлснээр _хэвлэгчийн эзэн_ болон _хэвлэгчийн нэр_ нь уг тохируулж буй хэвлэгчийн нэр байх ёстой. Хэвлэгчтэй хамт ирсэн үйлдвэрлэгчийнх нь гарын авлагаас хэвлэгчийнх нь тухай эсвэл сүлжээний төхөөрөмжийнх нь тухай мэдээллийг хараарай. 

[TIP]
====

Хэрэв та Hewlett Packard Laserjet хэвлэгч хэрэглэж байгаа бол `text` нэртэй хэвлэгч нь автоматаар LF-г CRLF руу хувиргадаг болохоор [.filename]#hpif# скрипт хэрэглэх шаардлагагүй.
====

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

. Хүссэн нэрээ оруулна. Алсад буй компьютерийн нэрэнд давхар нэр өгч оруулан амарчилж болох юм. 
. `lp` тохиргоог хоосон орхино. (`:lp=:`).
. Түр хадгалах сан үүсгэж түүний байршлыг `sd` хэсэгт зааж өгдөг. LPD нь алсад буй хэвлэгч рүү ажлуудыг илгээхээсээ өмнө энэ санд хадгалдаг.
. Хэвлэгчийн эзний нэрийг `rm` хэсэгт бичиж өгнө.
. _Хэвлэгчийн эзэнд_ холбогдсон хэвлэгчийн нэрийг `rp` хэсэгт оруулна. 

Ингээд болох нь тэр. Та хувиргах шүүлтүүр, цаасны хэмжээ гэх мэтийг [.filename]#/etc/printcap# файл дотор оруулах шаардлагагүй.

Энд нэг жишээ татъя. `rose` нэртэй машин `bamboo` болон `rattan` гэсэн хоёр хэвлэгчтэй. Бид одоо `orchid` машиныг уг хэвлэгчид рүү хандаж болдог болгож тохируулцгаая. Энд ( <<printing-advanced-header-pages-enabling,Толгой хуудсыг зөвшөөрөх>> хэсгээс дахин авав) `orchid` машины [.filename]#/etc/printcap# файл хэрхэн харагдаж байгааг харуулав. Уг машинд өмнө нь `teak` нэртэй машин тохируулагдсан байгаа бөгөөд бид `rose` машины хоёр хэвлэгчийг нэмэх болно:

[.programlisting]
....
#
#  /etc/printcap for host orchid - added (remote) printers on rose
#

#
#  teak is local; it is connected directly to orchid:
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
        :if=/usr/local/libexec/ifhp:\
        :vf=/usr/local/libexec/vfhp:\
        :of=/usr/local/libexec/ofhp:

#
#  rattan is connected to rose; send jobs for rattan to rose:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:

#
#  bamboo is connected to rose as well:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:
....

Дараа нь бид `orchid` дээр түр хадгалах сан нэмэх хэрэгтэй:

[source,shell]
....
# mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo
# chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo
# chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo
....

Одоо `orchid` дээрх хэрэглэгчид `rattan` болон `bamboo` хэвлэгчдийг хэрэглэж чадна. Жишээ нь `orchid` дээрх хэрэглэгч дараах тушаал өгвөл:

[source,shell]
....
% lpr -P bamboo -d sushi-review.dvi
....

`orchid` дээрх LPD систем хэвлэх ажлуудыг [.filename]#/var/spool/lpd/bamboo# гэсэн түр хадгалагч руу хуулна. Энэ хэвлэгдэх ажил нь DVI файл байсныг та анзаарна уу. `rose` машинд `bamboo` түр хадгалах сан үүсэнгүүт хоёр машины LPD-ууд хоорондоо уг файлыг `rose` машин уруу дамжуулдаг. Дараа нь уг файл `rose`-н дараалалд очиж зогсоод хэвлэгдэх хүртлээ хүлээгдэнэ. Энэ файл DVI-с PostScript(R) уруу (`bamboo` нь PostScript(R) хэвлэгч учир) `rose` дээр хувиргагдана.

[[printing-advanced-network-net-if]]
==== Сүлжээгээр өгөгдлийг урсгал хэлбэрээр дамжуулдаг холболттой хэвлэгчид

Ихэнх тохиолдолд, хэвлэгчдэд зориулж сүлжээний төхөөрөмж авах үед танд хоёр сонголт бий: түр хадгалагчтай (илүү үнэтэй), эсвэл цуваа юм уу зэрэгцээ холболтоор холбогдсон мэт өгөгдлийг хэвлэгч рүү шууд илгээдэг (хямд үнэтэй). Энэ хэсэгт хямд үнэтэйг нь авч хэлэлцэнэ. Үнэтэйг нь <<printing-advanced-network-rm,Алсад буй компьютерт холбогдсон хэвлэгчид>> хэсгээс хараарай.

[.filename]#/etc/printcap# файлд ямар цуваа юм уу эсвэл ямар зэрэгцээ холболт хэрэглэхийг зааж өгдөг бөгөөд (хэрэв та цуваа холболтоор холбосон бол ) ямар давтамжаар илгээх, ямар урсгал хянагч ашиглах, илгээх завсарлагаа, шинэ мөр тэмдгийг хэрхэн хувиргах гэх мэтчилэн маш олон зүйлийг тохируулж болно. Хэрэв хэвлэгч TCP/IP порт юм уу эсвэл өөр сүлжээний порт чагнаж байгаа хэвлэгчийг энд зааж өгөх боломжгүй. 

Сүлжээнд холбогдсон хэвлэгч рүү илгээхийн тулд текст болон хувиргах шүүлтүүрээр дуудагдаж болдог холболтын програм та бичих хэрэгтэй. Энд нэг жишээ үзүүлье. `netprint` нэртэй скрипт нь бүх өгөгдлийг ердийн оролтоос аваад сүлжээнд холбогдсон хэвлэгч рүү илгээх болно. Хэвлэгч холбогдсон компьютерийн нэрийг нь эхний утгаар авах бөгөөд хоёр дахь утгаараа чагнаж буй портын дугаарыг `netprint`-д өгнө. Тэмдэглэж хэлэхэд, энэ нь зөвхөн нэг чиглэлтэй холболт (FreeBSD-с хэвлэгч рүү) бөгөөд ихэнх сүлжээний хэвлэгчид хоёр тийш чиглэсэн холболтыг дэмждэг болохоор тэр чанарыг нь та мөн ашиглаж болох юм (хэвлэгчийн төлөв байдлыг мэдэх, бүртгэл хийх гэх мэт).

[.programlisting]
....
#!/usr/bin/perl
#
#  netprint - Text filter for printer attached to network
#  Installed in /usr/local/libexec/netprint
#
$#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>";

$printer_host = $ARGV[0];
$printer_port = $ARGV[1];

require 'sys/socket.ph';

($ignore, $ignore, $protocol) = getprotobyname('tcp');
($ignore, $ignore, $ignore, $ignore, $address)
    = gethostbyname($printer_host);

$sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address);

socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol)
    || die "Can't create TCP/IP stream socket: $!";
connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!";
while (<STDIN>) { print PRINTER; }
exit 0;
....

Дараа нь бид энэ скриптийг янз бүрийн шүүлтүүртэй хамт хэрэглэж болно. Сүлжээнд Diablo 750-N туузан хэвлэгч холбогдсон байна гэж авч үзье. Хэвлэгч хэвлэгдэх өгөгдлийг 5100 гэсэн портын дугаар дээр хүлээж авна. Хэвлэгчийн холбогдсон компьютерийн нэр нь `scrivener`. Одоо энэ хэвлэгчид дараах текст шүүлтүүр хэрэглэе:

[.programlisting]
....
#!/bin/sh
#
#  diablo-if-net - Text filter for Diablo printer `scrivener' listening
#  on port 5100.   Installed in /usr/local/libexec/diablo-if-net
#
exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100
....

[[printing-advanced-restricting]]
=== Хэвлэгч хэрэглэх хязгаарлалт

Энэ хэсэгт хэвлэгч хэрэглэлтийг хязгаарлах талаар өгүүлэх болно. LPD систем хэвлэгчийг гадаад сүлжээ юм уу дотоодоос хэн олон хувилах, хэр зэрэг том хэмжээний ажил хэвлэж болох, хэвлэгчийн дараалал хэр урт байх ёстой зэргийг зааж өгч болно. 

[[printing-advanced-restricting-copies]]
==== Олон хэвлэлтийг хязгаарлах

LPD нь хэрэглэгчдэд нэг файлыг олон хэвлэхийг амарчилж өгдөг. Хэрэглэгч нар `lpr -#5` (жишээ болгож) тушаалаар файлыг таван удаа хувилж чадна. Үүний сайн эсэх нь танаас хамаарна.

Хэрэв ингэж олон хувилах нь цаг болон цаасны дайсан юм байна гэж үзэж байгаа бол `-#` сонголтыг man:lpr[1] дээр хорьж болох бөгөөд ингэхийн тулд `sc` сонголтыг [.filename]##/etc/printcap## файл дотор оруулж өгнө. Хэрэв хэрэглэгч `-#` сонголттой хэвлэх тушаал илгээвэл дараах мэдэгдлийг харах болно:

[source,shell]
....
lpr: multiple copies are not allowed
....

Хэрэв та алсын хэвлэгч тохируулсан байвал (<<printing-advanced-network-rm,Алсын компьютерт холбогдсон хэвлэгчид>> хэсгээс харна уу) `sc` сонголтыг алсад буй компьютерийн [.filename]#/etc/printcap# файл дотор хийж өгөхгүй бол хэрэглэгчид хүссэн тоогоороо хувилж чадсаар байх болно. 

Энд нэг жишээ авцгаая. Дараах файл бол алсад буй `rose` компьютерийн [.filename]#/etc/printcap# файл. Хэвлэгч `rattan` нь нэлээн өгөөмөр бөгөөд хэн хүссэнд нь хувилж өгдөг байхад лазер хэвлэгч `bamboo` нь нэлээн харамч болохоор өөртөө `sc` тохиргоог агуулж байна:

[.programlisting]
....
#
#  /etc/printcap for host rose - restrict multiple copies on bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:
....

Одоо `sc` тохиргоог мөн `orchid` компьютерийн [.filename]#/etc/printcap# файл дотор оруулж өгөх хэрэгтэй (бид өөрсдөө энэ компьютер дээр байгаа болохоор `teak` хэвлэгч дээр олон хуулбар хийхийг хорих болно):

[.programlisting]
....
#
#  /etc/printcap for host orchid - no multiple copies for local
#  printer teak or remote printer bamboo
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\
        :if=/usr/local/libexec/ifhp:\
        :vf=/usr/local/libexec/vfhp:\
        :of=/usr/local/libexec/ofhp:

rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc:
....

`sc` тохиргоог хэрэглэснээр `lpr -#` тушаалын хэрэглээг хорих боловч man:lpr[1] тушаалын олон удаагийн хэрэглээ юм уу эсвэл нэг удаагийн хэвлэгдэх ажилд нэг файлыг дараах маягаар олон илгээхийг хорих боломжгүй:

[source,shell]
....
% lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign
....

Үүнийг хорих олон арга бий бөгөөд та чөлөөтэй оролдон үзэх хэрэгтэй (үл тоомсорлох аргыг оруулаад).

[[printing-advanced-restricting-access]]
==== Хэвлэгч рүү хандах хандалтыг хязгаарлах

UNIX(R)-н бүлэглэл болон [.filename]#/etc/printcap# файлын `rg` тохиргоог ашигласнаар ямар хэвлэгч рүү хэн хандаж юм хэвлэж болохыг та тохируулж болдог. Нэг тодорхой бүлэгт хэрэглэгчдээ хамруулж оруулаад тэр бүлгийнхээ нэрийг `rg` тохиргоонд бичиж өгөөд л болох нь тэр.

Хэрэв уг бүлэгт хамаараагүй хэрэглэгч (`root`-г оруулаад) тухайн хяналттай хэвлэгч рүү юм хэвлэхийг оролдох үед доорх мэдэгдлийг харуулах болно: 

[source,shell]
....
lpr: Not a member of the restricted group
....

`sc` (suppress multiple copies буюу олон хуулбарыг хорих) тохиргооны адилаар алсын компьютерууд таны хэвлэгч рүү хандахаар хэрэв та зөвшөөрсөн бол `rg`-г тохируулах хэрэгтэй болно. (<<printing-advanced-network-rm,Алсын компьютерт суугдсан хэвлэгчид>> хэсгээс харна уу)

Жишээ нь, ямар ч хэрэглэгч `rattan` хэвлэгч рүү хандаж чадахаар, харин `artists` бүлгийн хэрэглэгчид зөвхөн `bamboo` хэвлэгчийг хэрэглэж болно гэж үзье. Энд бидний танил `rose` компьютерийн [.filename]#/etc/printcap# файлыг харуулж байна:

[.programlisting]
....
#
#  /etc/printcap for host rose - restricted group for bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:
....

[.filename]#/etc/printcap# файлын ( `orchid` машины) тохиргоог орхие. Мэдээж `orchid` дээрх хэн гуай ч `bamboo`-г хэрэглэж чадахгүй. Магадгүй `orchid` дээрх онцгой хэрэглэгчдийг хэвлэгч рүү хандах эрх олгож болох юм. Үгүй ч байсан болох юм :)

[NOTE]
====
Хэвлэгч бүрд зөвхөн нэг л хязгаарлах бүлэг байж болно.
====

[[printing-advanced-restricting-sizes]]
==== Хэвлэгдэхээр илгээгдэх файлын хэмжээг хязгаарлах

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

LPD нь `mx` тохиргоонд зааж өгсөн байтын хэмжээгээр хэвлэгдэх ажлын хэмжээг хязгаарлах боломж өгдөг. Хэмжих нэгж нь `BUFSIZ`-д зааж өгсөн багцын хэмжээ байдаг ба нэг багц нь 1024 байт байдаг билээ. Хэрэв та энэ тохиргоонд тэгийн тоо бичих юм бол файлын хэмжээнд хязгаар тавихгүй болно. Гэхдээ та ямар ч `mx` тохиргоо зааж өгөөгүй бол анхдагч хязгаарлалт нь 1000 багц байдаг.

[NOTE]
====
Энэ хязгаарлалт нь хэвлэгдэх гэж буй _файлд_ хамаатай болохоос хэвлэгдэх бүх ажлуудыг _хязгаарлана гэсэн үг биш_.
====

LPD нь хэвлэгдэх файл нь хязгаарласан хэмжээнээс их файл ирвэл татгалздаггүй харин хязгаар хүртэлх хэмжээг нь хэвлэх дараалалд оруулж өгдөг бөгөөд тэр хэсэг нь хэвлэгддэг. Үлдсэн хэсэг нь цуцлагдах болно. Иймэрхүү хязгаарлалт нь зөв буруу эсэх нь таны шийдэл билээ. 

Бидний жишээ болсон `rattan` болон `bamboo` нар дээрээ хязгаарлалт хийж үзэцгээе. `artists`-н PostScript(R) файлууд их хэмжээтэй байх хандлагатай байдаг болохоор тэдгээрийг таван мегабайтаас хэтрэхгүй гэж хязгаарлая. Энгийн текст файлд харин ямар ч хязгаарлалт өгөхгүй байя:

[.programlisting]
....
#
#  /etc/printcap for host rose
#

#
#  No limit on job size:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:mx#0:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

#
#  Limit of five megabytes:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:
....

Зөвхөн дотоод хэрэглэгчдэд ийм хязгаарлалт хэрэгжих болно гэдгийг дахин сануулъя. Хэрэв та алсад буй хэвлэгчид ийм хязгаарлалт хийвэл алсаас хандагдаж буй хэрэглэгчдэд энэ хязгаарлалт хүчингүй. Үүнийг биелүүлэхийн тулд алсад буй машины [.filename]#/etc/printcap# файл дотор `mx` тохиргоог зааж өгөх ёстой. <<printing-advanced-network-rm,Алсад буй компьютер дээр холбогдсон хэвлэгчид >> хэсгээс алсын хэвлэлт хийх талаар уншаарай. 

Алсад буй хэвлэгчид хязгаарлалт тавих өөр нэг онцгой арга байдаг. <<printing-advanced-restricting-remote,Алсын хост дээр хэвлэх үйлдлийг хязгаарлах >> хэсгээс дэлгэрэнгүй уншина уу.

[[printing-advanced-restricting-remote]]
==== Алсаас хост дээр хэвлэх үйлдлийг хязгаарлах

LPD нь алсын компьютераас илгээгдсэн хэвлэх ажлыг бас хянаж болдог боломж олгодог:

Компьютерээр нь хязгаарлах::
Дотоод LPD руу ямар компьютер хандаж болохыг [.filename]#/etc/hosts.equiv# болон [.filename]#/etc/hosts.lpd# файлд зааж өгснөөр хянаж болдог. LPD нь саяны хоёр файлын аль нэгэнд нь хэвлэлт хүссэн компьютерийн нэр байгаа эсэхийг шалгадаг. Хэрэв нэр нь байхгүй бол LPD уг хүсэлтээс татгалздаг. 
+
Уг файлын загвар бол тун энгийн. [.filename]#/etc/hosts.equiv# файл нь мөн man:ruserok[3] протоколд хэрэглэгддэг бөгөөд man:rsh[1] болон man:rcp[1] зэрэг програмд нөлөөлдөг болохоор тун болгоомжтой хэрэглэхийг сануулж байна.
+
Жишээ нь, `rose` компьютер дээрх [.filename]#/etc/hosts.lpd# файл:
+
[.programlisting]
....
orchid
violet
madrigal.fishbaum.de
....
+
Энэ нь тэгэхээр `rose` компьютер нь `orchid`, `violet`, болон `madrigal.fishbaum.de` зэрэг компьютераас хэвлэх хүсэлт хүлээж авч болно гэсэн үг. Хэрэв эдгээрээс өөр компьютерууд `rose`-н LPD руу хандахыг хүсвэл тэр хүсэлт нь татгалзагдах болно.

Хэмжээгээр нь хязгаарлах::
Түр хадгалагч санд байрлаж болох файлуудын хэмжээ нь хэд хүртэл байж болохыг хянаж болдог. Дотоод хэвлэгчид зориулсан түр хадгалах сан дотор [.filename]#minfree# нэртэй файл үүсгэх хэрэгтэй. Уг файл дотор алсаас ирсэн хэвлэгдэх ажлын хэмжээ нь хичнээн дискний багцаар (512 байт) байж болох дугаарыг бичиж өгдөг. 
+
Ингэснээр алсаас хэрэглэх хэрэглэгчид таны дискийг дүүргэхээс сэргийлнэ. Та энэ файлыг ашигласнаар бас тодорхой дотоод хэрэглэгчдэд давуу эрхийн дараалал тогтоож болдог ба [.filename]#minfree# файлд зааж өгсөн хэмжээнээс хэтэрсэн хэмжээгээр нь дараалал тогтоодог.
+
Жишээ болгож [.filename]#minfree# файлыг `bamboo` хэвлэгчид зориулж нэмж үзье. Бид [.filename]#/etc/printcap# файл дээр дадлага хийх бөгөөд хэвлэгчид зориулсан түр хадгалагч тохируулсан хэсгийг нь олж харцгаая. Ингээд `bamboo`-н оруулгыг харуулъя:
+
[.programlisting]
....
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
        :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:mx#5000:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:
....
+
Түр хадгалах санг `sd` тохиргооны хэсэгт зааж өгсөн байна. Одоо LPD-н алсаас илгээгдсэн хэвлэгдэх ажилд зориулж гурван мегабайт хэмжээг (6144 дискний багц) зааж өгцгөөе. :
+
[source,shell]
....
# echo 6144 > /var/spool/lpd/bamboo/minfree
....

Хэрэглэгчээр нь хязгаарлах::
Та ямар хэрэглэгч алсаас хэвлэх хүсэлт тавьж болохыг [.filename]#/etc/printcap# файл дотор `rs` тохиргооны хэсэгт зааж өгдөг. Хэрэв дотоод хэвлэгчийн оруулгын хэсэгт `rs` гэж харагдвал LPD нь алсаас хэвлэх хүсэлт илгээсэн компьютерийн хэрэглэгч _хэрэв_ дотоод компьютер дээрх нэвтрэх эрхтэй ижилхэн нэртэй хэрэглэгч байвал зөвшөөрөл өгч хэвлүүлнэ. Бусад тохиолдолд LPD нь тухай ажлыг хэвлэхээс татгалзана.
+
Энэ тохиргоо нь (жишээлбэл) нэг хэвлэгчийг хувааж хэрэглэдэг олон салбартай байгууллагад ашиглагдаж болох бөгөөд зарим хэрэглэгчид нь хэд хэдэн салбарт харьяалагддаг бол уг хэрэглэгчид эрх өгснөөр өөрийнхөө байгаа салбараас өөр салбарт буй хэвлэгчид хэвлэх ажил илгээх маягаар ашиглаж болох юм. Хэрэв та тэдгээр хэрэглэгчдийг _зөвхөн_ таны хэвлэгчийг л хэрэглэх бөгөөд бусад зүйлсийг ашиглуулахгүй гэж бодож байгаа бол тэд нарт эхлэл сан байхгүй бөгөөд [.filename]#/usr/bin/false# гэсэн хэрэглэгдэхгүй бүрхүүлтэй "хязгаарлагдмал" бүртгэл үүсгэх хэрэгтэй. 

[[printing-advanced-acct]]
=== Хэвлэгчийн хэрэглээнд бүртгэл тооцох

За тэгэхээр та хэвлэлт болгонд мөнгө тооцох шаардлага байг. Цаас болон хэвлэх хорнуудыг мөнгөөр авдаг болохоор яагаад болохгүй гэж? Мөн дээрээс нь хэвлэгчийн эд анги байнга хөдөлж эвдрэх магадлалтай байдаг болохоор хэвлэгчээ тордох нь бас үнэтэй билээ. Та хэвлэгчээ арчилж хуудас болгондоо (эсвэл хуудасны хэсэг бүрд, гарчиг бүрд, эсвэл юу ч байсан яахав) мөнгө тооцохыг хүсэв. Тэгэхээр та яаж хэвлэгдсэн хуудас болгонд мөнгө тооцож чадах вэ?

Гэхдээ, жаахан таагүй мэдээ нь юу вэ гэхээр LPD түр хадгалагч гуай иймэрхүү талын үйлчилгээ хийхдээ тун тааруу юм. Иймэрхүү бүртгэл тооцоо нь хэвлэгчээ хэрхэн ашиглахаас их хамаардаг бөгөөд хэвлэгдэх загвар, мөн _таны_ хэвлэгчээсээ мөнгө олборлох шаардлагаас их шалтгаална.

Бүртгэл тооцоо хийхийн тулд та хэвлэгчийнхээ текст шүүлтүүрийг өөрчлөх хэрэгтэй (энгийн текст ажлаас мөнгө тооцохын тулд) бөгөөд мөн хувиргагч шүүлтүүрүүдийг бас (мөн бусад файл төрлүүдээс) өөрчлөх шаардлагатай. Энгийн шүүлтүүр ашиглаад та бүртгэл тооцоо хийж чадахгүй. <<printing-advanced-filter-intro,Шүүлтүүр>> хэсгийг харна уу.

Ерөнхийдөө бүртгэл тооцоо хийж болох хоёр арга бий:

* _Үечлэн бүртгэл тооцох_ гэдэг бол тун амархан бөгөөд байнга хэрэглэгддэг арга. Хэн нэгэн хэвлэх үед хэрэглэгчийн нэр, компьютерийн нэр, мөн хэвлэсэн хуудасны дугаар зэргийг бүртгэл файлд хадгалдаг. Хэвлэгчдээ зориулсан нэгжийнх нь тооцоог та сараар, эсвэл жилээр, эсвэл өөрийнхөө заасан хугацаагаар хэрэглэгч бүрийн хувьд тохирсон жагсаалт авч болдог. Ингэж бүртгэл тооцоо хийгээд уг файлыг цэвэрлэж дараагийн үеэр нь мөн тооцоо хийхээр бэлтгэнэ.
* _Цагаар бүртгэж тооцох_ гэдэг нь жаахан хэцүү болохоор нэлээн бага хэрэглэгддэг. Энэ арганд хэрэглэгчдийг хэвлэж эхлэнгүүт тооцоо хийдэг шүүлтүүр байдаг. Дискний хэмжээ хязгаарлагчтай ижилхэн энэ бүртгэл тооцоо нь харьцангуй шулуухан гүйцэтгэгддэг. Та хэрэглэгчдийн бүртгэлд заагдсан хэмжээ дуусах дөхөхөөр хэвлүүлэхгүй болгож болохоос гадна хэрэглэгчдэд өөрсдийн "хэвлэх хувийг" шалгаж тохируулах боломжийг олгон тохируулж болох юм. Гэвч энэ арга нь хэрэглэгчийн бүртгэл болон тэдгээрийн хязгаарласан хэмжээг мөрдөхийн тулд зарим өгөгдлийн бааз руу хандах шаардлагатай байдаг. 

Та шаардагдах шүүлтүүрүүдийг, мөн бүртгэж тооцоо хийх кодыг нь хангаж чадаж л байвал LPD түр хадгалагч систем нь өмнө тайлбарласан хоёр аргыг дэмждэг. Бүртгэж тооцох арганд бас онцгой тал байдаг. Жишээ нь та үечилж үү эсвэл цагаар тооцох уу гэдгээ сонгож болно. Та ямар мэдээллийг бүртгэж бичихээ сонгоно: хэрэглэгчийн нэр, компьютерийн нэр, хэвлэсэн төрөл, хэвлэгдсэн хуудасны тоо, загвар, хэр удаан хэрэглэсэн гэх мэт. Та шүүлтүүрүүдийг өөрчилж эдгээр мэдээллийг хадгалдаг болгох хэрэгтэй. 

==== Хэвлэлтэд тооцоо хийх түргэн бөгөөд бохир арга

FreeBSD нь бүртгэл тооцоо хийхэд хэрэглэгдэх хоёр үечлэн тооцоо хийдэг програмтай хамт ирдэг. Тэдгээр нь `lpf` текст шүүлтүүрүүд бөгөөд <<printing-advanced-lpf,lpf: Текст шүүлтүүр>> хэсэгт тайлбарлагдсан байгаа. Нөгөөх нь man:pac[8] бөгөөд энэ нь хэвлэлтийн бүртгэл тооцоо хийх файлд буй оруулгуудыг цуглуулдаг програм.

Шүүлтүүрийн хэсэгт тайлбарласны дагуу (<<printing-advanced-filters,Шүүлтүүрүүд>>), LPD нь текст болон хувиргагч шүүлтүүрийг бүртгэл файлтай нь хамт шүүлтүүрийн тушаалын мөрнөөс эхлүүлдэг. Шүүлтүүр нь ингэж тушаалын мөрнөөс авсан утгаар хаана бүртгэл файлд оруулах вэ гэдгээ мэддэг. Энэ файлын нэр нь [.filename]#/etc/printcap# файл доторх `af` тохиргоонд заагдсан байдаг ба хэрэв файлынх нь зам нь яг нарийвчилж заагдаагүй байгаа бол түр хадгалагчийн сангийн байрлалтай харьцангуй хэлбэрээр мөн зааж өгч болно.

LPD нь `lpf`-г хуудасны өргөн болон өндрийн утгатай нь (`pw` болон `pl` тохиргуулаас авч) эхлүүлдэг. `lpf` нь эдгээр утгыг ашиглаж хичнээн хуудас хэвлэгдэх вэ гэдгийг тодорхойлдог. Файлыг хэвлэгч рүү илгээсний дараа бүртгэл тооцооны файлд тооцоо хийх утга нь оруулагддаг. Энэ оруулга нь дараах маягтай байдаг:

[.programlisting]
....
2.00 rose:andy
3.00 rose:kelly
3.00 orchid:mary
5.00 orchid:mary
2.00 orchid:zhang
....

Та болж өгвөл хэвлэгч болгонд тус тусад нь бүртгэл тооцооны файл хөтлөх хэрэгтэй. Учир нь `lpf`-д ямар ч түгжиж зохицуулдаг шинж чанар байхгүй болохоор хоёр `lpf`-ууд нэг файлд хандах тохиолдолд мөргөлдөөн үүсэж болзошгүй. Тус тусад нь бүртгэл тооцооны файл хөтлөх амар арга бол [.filename]#/etc/printcap# дотор `af=acct` гэсэн тохиргоог оруулах хэрэгтэй. Дараа нь хэвлэгчид зориулсан түр хадгалах сан бүрд [.filename]#acct# гэсэн файл хөтлөгдөх болно.

Хэрэглэгчдээс хэвлэлтийн төлбөрийг шаардах үедээ man:pac[8] програмыг ажиллуулах хэрэгтэй. Тооцоо хийх хэвлэгчийнхээ түр хадгалах санд оронгуутаа `pac` гэсэн тушаал ажиллуулахад болно. Дараа нь доллараар тооцсон дараах маягийн үр дүнг харах болно:

[source,shell]
....
  Login               pages/feet   runs    price
orchid:kelly                5.00    1   $  0.10
orchid:mary                31.00    3   $  0.62
orchid:zhang                9.00    1   $  0.18
rose:andy                   2.00    1   $  0.04
rose:kelly                177.00  104   $  3.54
rose:mary                  87.00   32   $  1.74
rose:root                  26.00   12   $  0.52

total                     337.00  154   $  6.74
....

man:pac[8]-тай хамт хавсруулж хэрэглэдэг сонголтуудыг жагсааж харуулъя:

`-P__хэвлэгч__`::
Энэ нь тооцоо бодох __хэвлэгч__ийг зааж өгнө. [.filename]#/etc/printcap# файл доторх `af` сонголтод яг нарийвчилсан файлын зам зааж өгсөн үед л энэ нь хэрэгждэг.

`-c`::
Хэрэглэгчдийн нэрээр биш үнээр нь эрэмбэлж харуулдаг.

`-m`::
Тооцоо хийх файлаас компьютерийн нэрийг алгасаж харуулдаг. Ийм үед `alpha` компьютер дээрх `smith` нэртэй хэрэглэгч `gamma` компьютер дээрх `smith` нэртэй хэрэглэгчээс ялгардаггүй. 

`-p__үнэ__`::
[.filename]#/etc/printcap# файлд буй `pc` тохируулгад зааж өгсөн үнийн оронд нэгж хуудас болгоныг __үнэ__ээр үнэлж доллараар тооцдог бөгөөд эсвэл хоёр центээр ( анхдагч хэмжээ нь) тооцно. Та энэ __үнэ__-г бутархай тоон хэлбэрээр бас бичиж болно.

`-r`::
Эрэмбэлэх дарааллыг эсрэгээр үйлдэнэ.

`-s`::
Төлбөр тооцооны дүгнэсэн хуудас үүсгэж бүртгэл тооцооны файлыг богиносгодог.

_хэрэглэгч ..._::
Зөвхөн зааж өгсөн _хэрэглэгчийн_ бүртгэл тооцоог харуулна.

man:pac[8] боловсруулсан анхдагч тооцоонд янз бүрийн компьютераас хэвлэсэн хэрэглэгч бүрд хуудасных нь дугаарыг харуулдаг. Хэрэв танд компьютерийн нэр харуулах шаардлага байхгүй (хэрэглэгч янз бүрийн машинаас хэвлэсэн байж болно) гэж үзвэл `pac -m` гэсэн тушаалаар доорх маягаар үр дүнг харах болно:

[source,shell]
....
  Login               pages/feet   runs    price
andy                        2.00    1   $  0.04
kelly                     182.00  105   $  3.64
mary                      118.00   35   $  2.36
root                       26.00   12   $  0.52
zhang                       9.00    1   $  0.18

total                     337.00  154   $  6.74
....

Долларын хэмжээг тооцохын тулд man:pac[8] нь [.filename]#/etc/printcap# доторх `pc` тохиргооны утгыг ашигладаг (анхдагч утга нь хуудас болгонд 200, эсвэл 2 цент гэж байдаг). Энэ тохируулгад хуудас бүрд юм уу эсвэл алхам бүрд тооцох центүүдийг зааж өгдөг. Та энэ утгыг man:pac[8]-г ажиллуулахдаа `-p` гэсэн хавсралт сонголтоор дарж хэрэглэж болдог. `-p` сонголтод хэрэглэх утга нь центээр биш доллараар байх ёстой. Жишээ нь,

[source,shell]
....
# pac -p1.50
....

гэснээр хуудас бүр нэг доллар тавин цент болж байна. Та энэ тохиргоог ашиглаж үнэхээр ашиг олж болох юм шүү.

Эцэст нь `pac -s` гэж тушааснаар дүгнэсэн тооцоог дүнгийн бүртгэл файл уруу хадгалах бөгөөд энэ файл нь хэвлэгчийн тооцооны файлын нэрийн ард нь `_sum` гэж залгагдсан нэртэй файл болж хадгалагдана. Дараа нь бүртгэлийн файлыг богиносгодог. Хэрэв та man:pac[8]-г дахин ажиллуулбал энэ нь дүгнэлт файлаас нийт утгыг уншиж аваад ердийн тооцооны файлаас авсан утган дээр нэмээд ерөнхий нийт нийлбэрийг харуулах болно.

==== Хэвлэгдсэн хуудасны тоог яаж тооцох вэ?

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

Цэвэр текст ажлуудын хувьд энэ асуудлыг шийдэх нь тийм ч хэцүү биш юм: та ажилд хичнээн мөр байгааг тоолж тэр тоогоо таны хэвлэгч нэг хуудсандаа хичнээн мөрийг дэмждэгтэй харьцуулах хэрэгтэй. Мөрүүдийг давхар хэвлэдэг файл дахь устгах тэмдэгтүүд эсвэл нэг буюу хэд хэдэн нэмэлт мөрүүд болдог урт логик мөрүүдийг бодолцохоо мартуузай.

Текст шүүлтүүр `lpf` (<<printing-advanced-lpf,lpf: Текст шүүлтүүр>> хэсэгт танилцуулагдсан) нь бүртгэл хийхдээ эдгээр зүйлсийг бодолцдог. Бүртгэл хийх хэрэгтэй текст шүүлтүүр та бичиж байгаа бол `lpf`-ийн эх кодыг та магадгүй үзэхийг хүсэж болох юм.

Тэгэхээр та бусад файлын хэлбэршилтүүдтэй хэрхэн ажиллах вэ?

DVI-аас-LaserJet эсвэл DVI-аас-PostScript(R) руу хийх хөрвүүлэлтийн хувьд `dvilj` эсвэл `dvips` тушаалаас гарах оношлогооны гаралтыг та өөрийн шүүлтүүрээр оруулж хичнээн хуудаснууд хөрвүүлэгдсэнийг хайж олж болох юм. Бусад файлын хэлбэршилтүүд болон хөрвүүлэх програмуудын хувьд та эдгээртэй төстэй зүйлсийг хийж чадах ёстой.

Гэхдээ хэвлэгч нь тэдгээр бүх хуудаснуудыг жинхэнэдээ хэвлэхгүй байж болох сул тал энэ аргуудад ажиглагддаг. Жишээ нь цаас гацах, хор дуусах, эсвэл дэлбэрсэн хэр нь хэрэглэгчид төлбөр ноогдуулсан хэвээр байж болох зэргийг дурдаж болох юм.

Тэгэхээр та юу хийж чадах вэ?

_Зөв_ бүртгэл хийх цорын ганц _найдвартай_ арга байдаг. Хичнээн цаас ашигладаг болохоо хэлж чаддаг хэвлэгч аваад цуваа шугамаар юм уу эсвэл сүлжээгээр залгах хэрэгтэй. Бараг бүх PostScript(R) хэвлэгчүүд үүнийг дэмждэг. Бусад загварууд бас ингэж чаддаг (жишээ нь сүлжээнд холбогдсон Imagen laser хэвлэгчүүд). Хэвлэгчүүдийг ажил бүрийг хэвлэснийхээ дараа хуудасныхаа хэрэглээг авч _зөвхөн_ тэр утга дээрээ үндэслэн бүртгэлийн мэдээллээ бүртгүүлдэг болгохын тулд эдгээр хэвлэгчүүдийн хувьд шүүлтүүрүүдийг өөрчлөх хэрэгтэй. Мөр тоолох эсвэл алдаагүй файл шалгалт шаардлагагүй юм.

Мэдээж та үргэлж өгөөмөр байж бүх хэвлэлтийг үнэгүй болгож болох юм.

[[printing-using]]
== Хэвлэгчдийг ашиглах нь

Энэ хэсэгт таны FreeBSD дээр тохируулсан хэвлэгчийг хэрхэн хэрэглэх талаар өгүүлэх болно. Хэрэглэгчийн ашиглаж болох тушаалууд нь:

man:lpr[1]::
Хэвлэх үйлдлийг гүйцэтгэдэг

man:lpq[1]::
Хэвлэгчийн хэвлэх дарааллыг шалгадаг

man:lprm[1]::
Хэвлэгчийн хэвлэх дарааллаас устгадаг

Энд мөн удирдаж зохицуулах тушаалууд байдаг. Тэр нь <<printing-lpc,Хэвлэгчдийг зохицуулах>> хэсэгт өгүүлсэн man:lpc[8] тушаал юм.

man:lpr[1], man:lprm[1], мөн man:lpq[1] гэсэн эдгээр тушаалууд нь бүгдээрээ `-P _хэвлэгчийн-нэр_` гэсэн сонголт авдаг бөгөөд үүгээрээ [.filename]#/etc/printcap# файлд буй хэвлэгч/дараалалтай ажилладаг. Энэ нь хэвлэгчийн ажлыг нэмэх, устгах эсвэл хэвлэгдэж байгаа ажлыг шалгах зэрэгт хэрэглэгддэг. Хэрэв та `-P` сонголт хэрэглэдэггүй бол `PRINTER` гэсэн орчны хувьсагчийн утгыг энэ тушаал хэрэглэдэг. Эцэст нь хэрэв танд `PRINTER` орчны хувьсагч зарлагдаагүй бол `lp` нэртэй хэвлэгчийг анхдагч хэвлэгч гэж ханддаг.

Энд _анхдагч хэвлэгч_ гэдэг нь `PRINTER` орчны хувьсагч дотор буй хэвлэгч юм уу эсвэл уг орчны хувьсагчид хэвлэгч заагдаагүй байвал `lp` гэсэн нэртэй хэвлэгч байна гэж авч үзэхийг хэлж байгаа юм.

[[printing-lpr]]
=== Хэвлэх ажиллагаа

Файлыг хэвлэхийн тулд:

[source,shell]
....
% lpr filename ...
....

Энэ нь жагсааж өгсөн файлуудыг анхдагч хэвлэгч рүү илгээж хэвлэдэг. Хэрэв та ямар ч файл зааж өгөөгүй бол man:lpr[1] нь гарнаас оруулах утгуудыг хэвлэгч рүү илгээдэг. Жишээ нь дараах тушаал нь системийн чухал файлуудыг хэвлэнэ:

[source,shell]
....
% lpr /etc/host.conf /etc/hosts.equiv
....

Хэвлэгчийг онцгойлж сонгохыг хүсвэл :

[source,shell]
....
% lpr -P printer-name filename ...
....

Дараах жишээн дээр тухайн байгаа сангийн файлуудыг жагсааж `rattan` нэртэй хэвлэгч рүү илгээхийх харуулах болно:

[source,shell]
....
% ls -l | lpr -P rattan
....

Ямар ч файлын жагсаалт өгөөгүй болохоор man:lpr[1] тушаал нь `ls -l` тушаалын гаралтыг өөрийнхөө оруулга гэж авч үзсэн байна.

man:lpr[1] тушаал нь файл хувиргалт хийх, олон хуулбарлаж хэвлэх гэх мэтчилэн маш олон төрлийн сонголт хүлээн авч хэвлэх үйлдлийнхээ загварыг өөрчилж чаддаг. <<printing-lpr-options,Хэвлэх сонголтууд>> хэсгээс нэмэлт мэдээллүүдийг уншина уу.

[[printing-lpq]]
=== Хэвлэж буй ажлыг шалгах

man:lpr[1] тушаалаар хэвлэгдэх зүйлс LPD түр хадгалагч дээр очдог бөгөөд тэдгээрийг ерөнхийд нь "хэвлэгдэх ажил" гэж нэрлэдэг. Хэвлэгч болгонд хэвлэгдэх ёстой ажлууд жагсаагдсан байдаг бөгөөд таны хэвлэхийг хүссэн юм тань бусад хэрэглэгчидтэй адилхан хэвлэгдэх дараалалд ээлжээ хүлээгээд зогсож байдаг. Хэвлэгч нь ирсэн зүйлсийг хэн-түрүүлж-ирнэ түүнийг-түрүүлж-хэвлэнэ гэсэн зарчим баримталж хэвлэдэг. 

Анхдагч хэвлэгчийн дарааллыг харуулахын тулд man:lpq[1] тушаалыг бичдэг. Хэрэв хэвлэгчээр нь сонгож харахыг хүсвэл `-P` сонголт хэрэглэдэг. Жишээлбэл 

[source,shell]
....
% lpq -P bamboo
....

гэсэн тушаал нь `bamboo` нэртэй хэвлэгч дээр байгаа хэвлэх дарааллыг хардаг. Доорх хэсэгт `lpq` тушаалын гаралтыг харуулав:

[source,shell]
....
bamboo is ready and printing
Rank   Owner    Job  Files                              Total Size
active kelly    9    /etc/host.conf, /etc/hosts.equiv   88 bytes
2nd    kelly    10   (standard input)                   1635 bytes
3rd    mary     11   ...                                78519 bytes
....

Энэ нь `bamboo` хэвлэгчид гурван файл жагсаагдан ээлжээ хүлээж байгааг харуулсан байна. Эхний ээлжит ажлыг kelly хэрэглэгч илгээсэн бөгөөд "хэвлэх дугаар нь" 9 байна. Хэвлэх ажил болгон давтагдаагүй өөрийн гэсэн дугаар авдаг. Та хэвлэх дарааллын энэ дугаарыг хэрэгсэхгүй байж болох ч гэсэн хэрэв хэвлэх ажлыг цуцлах хэрэг гарвал уг дугаарыг мэдэж байх нь танд хэрэгтэй билээ. Энэ талаар <<printing-lprm,Хэвлэх ажлыг устгах>> хэсгээс харна уу.

Ес гэсэн дугаартай хэвлэх ажил нь хоёр ширхэг файлаас бүтсэн байна. man:lpr[1] тушаалд хэрэв олон файл өгсөн бол тэдгээрийг нэг ажилд тооцдог. Энэ ажил нь одоогийн идэвхитэй ажил ("Rank" нэртэй баганад `active` гэж бичсэн байгааг анхаарна уу) бөгөөд хэвлэгч яг одоо түүнийг хэвлэж байна гэсэн үг. Хоёр дахь ажил нь стандарт оруулгаас man:lpr[1] тушаал уруу илгээгдсэн ажил байна. Гурав дахь ажил нь `mary` хэрэглэгчээс илгээгдсэн бөгөөд нэлээн их хэмжээнийх юм байна. Файлын нэрийн урт нь их байгаа учраас man:lpq[1] нь түүнийг гурван цэгээр товчилж харуулсан байна.

man:lpq[1] тушаалын гаралтын хамгийн эхний мөр бас чухал утга илэрхийлдэг нь: хэвлэгч яг одоо юу хийж байгааг (ядаж хэвлэгчийн юу хийж байгааг LPD нөхөр бодож байгааг) харуулдаг.

man:lpq[1] тушаал нь мөн `-l` сонголтыг дэмждэг бөгөөд энэ нь уртасгасан жагсаалтыг харуулдаг юм. Доор `lpq -l` тушаалын гаралтыг харуулав:

[source,shell]
....
waiting for bamboo to become ready (offline ?)
kelly: 1st				 [job 009rose]
       /etc/host.conf                    73 bytes
       /etc/hosts.equiv                  15 bytes

kelly: 2nd				 [job 010rose]
       (standard input)                  1635 bytes

mary: 3rd                                [job 011rose]
      /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes
....

[[printing-lprm]]
=== Хэвлэх ажлыг устгах

Хэрэв та хэвлэе гэсэн бодлоо өөрчилбөл man:lprm[1] тушаалаар хэвлэгдэх ажлыг устгаж болно. Мөн та man:lprm[1] тушаалаар хэвлэгдэж байгаа ажлыг бас устгаж болдог боловч зарим хэсэг нь хэвлэгдэж магадгүй юм.

Анхдагч хэвлэгчээс ажил устгахын тулд эхлээд man:lpq[1] тушаал хэрэглэж дарааллынх нь дугаарыг нь мэддэг. Тэгээд дараа нь:

[source,shell]
....
% lprm job-number
....

Хэвлэгдэх ажлыг хэвлэгчийн нэрийг нь онцгойлж хандан устгахын хүсвэл `-P` сонголт хэрэглэнэ. Дараах тушаал нь `bamboo` нэртэй хэвлэгчээс 10 дугаартай ажлыг устгана:

[source,shell]
....
% lprm -P bamboo 10
....

man:lprm[1] тушаалын хэд хэдэн товчлол бий:

lprm -::
Танд хамаатай бүх хэвлэгдэх ажлыг устгадаг (анхдагч хэвлэгчээс).

lprm _хэрэглэгч_::
_Хэрэглэгч_-д хамаатай бүх ажлыг устгана (анхдагч хэвлэгчээс). Супер хэрэглэгч мэдээж бүх хэрэглэгчдийн ажлыг устгаж болох бөгөөд хэрэв та биш бол зөвхөн өөрийнхөө л ажлыг устгана.

lprm::
Ямар ч дарааллын дугаар, хэрэглэгчийн нэр, эсвэл `-` сонголт зэргийг оруулаагүй бол танд хамаатай яг одоо хэвлэгч дээр идэвхитэй байгаа ажлыг man:lprm[1] устгадаг. Супер хэрэглэгч бол яг одоо идэвхитэй байгаа хэний ч дараалал байсан гэсэн устгана.

Дээрх товчлолуудыг `-P` сонголт ашиглан хэвлэгчийн нэр зааж өгөн ямар нэгэн хэвлэгч рүү онцгойлон хандаж болдог. Жишээлбэл дараах тушаал нь `rattan` хэвлэгчээс тухайн хэрэглэгчийн бүх дарааллыг устгана:

[source,shell]
....
% lprm -P rattan -
....

[NOTE]
====
Хэрэв та сүлжээний орчинд ажиллаж байгаа бол man:lprm[1] тушаал нь өөр ижил нэртэй хэвлэгч өөр машинд залгаатай байсан ч зөвхөн илгээсэн компьютерийн л дарааллыг устгахад зөвшөөрдөг. Доорх жишээнд үүнийг тодруулав:

[source,shell]
....
% lpr -P rattan myfile
% rlogin orchid
% lpq -P rattan
Rank   Owner	  Job  Files                          Total Size
active seeyan	  12	...                           49123 bytes
2nd    kelly      13   myfile                         12 bytes
% lprm -P rattan 13
rose: Permission denied
% logout
% lprm -P rattan 13
dfA013rose dequeued
cfA013rose dequeued
....

====

[[printing-lpr-options]]
=== Энгийн текстээс өөр зүйлс хэвлэх нь: Хэвлэх сонголтууд

man:lpr[1] тушаал нь текст загварчлах, зураг файлыг өөр хэлбэрт хувиргах, олон хуулбар хийх, хэвлэгдэж байгаа файлууд уруу хандах гэх мэтчилэн маш олон сонголттой. Энэ хэсэгт тэр тухай зааварлах болно.

[[printing-lpr-options-format]]
==== Хэлбэршүүлэх болон хувиргах сонголтууд

Дараах man:lpr[1]-н сонголтууд нь хэвлэгдэх ажлын хэлбэршүүлэлтийг хянадаг. Эдгээр сонголтуудыг хэрэв таны хэвлэх зүйлс тань энгийн текст хэлбэртэй биш юм уу эсвэл текстээ man:pr[1] хэрэгсэл ашиглан өөрчилж хэвлэх үед хэрэглэнэ.

Жишээлбэл дараах тушаал нь [.filename]#fish-report.dvi# нэртэй DVI төрлийн файлыг (TeX төрлийн бичилтийн системийн) `bamboo` хэвлэгч рүү явуулна:

[source,shell]
....
% lpr -P bamboo -d fish-report.dvi
....

Энэ сонголт нь хэвлэгдэх гэж буй бүх файлд хэрэгждэг болохоор жишээ нь та DVI болон ditroff файлуудыг хамт хэвлэгч рүү илгээж болохгүй. Түүний оронд файлуудыг тусад нь тусдаа сонголттой илгээх хэрэгтэй.

[NOTE]
====
`-p` болон `-T` сонголтуудаас бусад бүх сонголтуудад хэвлэгч дээр суугдсан хөрвүүлж хувиргадаг шүүгч ажиллагаа шаардагддаг. Жишээ нь `-d` сонголт DVI хөрвүүлж хувиргадаг шүүлт шаарддаг. <<printing-advanced-convfilters,Хувиргагч шүүлтүүрүүд>> хэсэгт тодорхой өгүүлсэн буй.
====

`-c`::
cifplot файлуудыг хэвлэнэ.

`-d`::
DVI файлуудыг хэвлэнэ.

`-f`::
FORTRAN текст файлуудыг хэвлэнэ.

`-g`::
plot төрлийн зураг график файлуудыг хэвлэнэ.

`-i _тоо_`::
Гаралтыг __тоо__гоор зай авч хэвлэнэ. Хэрэв та _тоо_ оруулахгүй тушаавал 8 гэсэн зайгаар хэвлэнэ. Энэ сонголт зөвхөн тодорхой хэдэн шүүлтүүртэй л ажилладаг.
+
[NOTE]
====
`-i` сонголт болон тоо хоёрын завсар ямар ч зай байж болохгүй.
====

`-l`::
Текст файлд буй зарим хянагч тэмдэгтүүдтэй нь шууд үсэгчлэн хэвлэнэ.

`-n`::
ditroff (төхөөрөмж болгоноос хамааралгүй troff) өгөгдлийг хэвлэнэ.

-p::
Хэвлэхээсээ өмнө энгийн текстийг man:pr[1] хэрэгслээр хэлбэршүүлдэг. Нэмэлт мэдээллийг man:pr[1] гарын авлагаас харна уу.

`-T _гарчиг_`::
man:pr[1] хуудасны толгой хэсэгт файлын нэрийг байрлуулахын оронд зааж өгсөн _Гарчиг_-г хэвлэдэг. Энэ сонголт нь гэхдээ зөвхөн `-p` сонголт хэрэглэсэн үед л хэрэгждэг. 

`-t`::
troff өгөгдлийг хэвлэнэ.

`-v`::
raster өгөгдлийг хэвлэнэ.

Жишээ: Дараах тушаал нь man:ls[1]-н гарын авлагыг аятайхан загварчлаад анхдагч хэвлэгчээр хэвлэнэ:

[source,shell]
....
% zcat /usr/shared/man/man1/ls.1.gz | troff -t -man | lpr -t
....

man:zcat[1] тушаал нь man:ls[1] гарын авлагын эх шахсан файлыг нь задлаад GNU troff хэлбэрт оруулдаг man:troff[1] тушаал уруу дамжуулна. Уг хэлбэрт оруулсны дараа man:lpr[1] руу дамжигдах бөгөөд энэ нь хэвлэх ажлыг LPD түр хадгалагч уруу илгээдэг. Бид `-t` сонголт man:lpr[1] дээр хэрэглэсэн болохоор түр хадгалагч хэвлэгдэх үед GNU troff гаралтыг хэвлэгчийн ойлгох хэлбэрт хувиргаж хэвлэнэ.

[[printing-lpr-options-job-handling]]
==== Хэвлэлтэд хандах сонголтууд

man:lpr[1] тушаалд өгсөн дараах сонголтууд LPD дээрх хэвлэгдэх ажлуудад онцгойлж ханддаг:

-# _хуулбарлах-тоо_::
Зөвхөн нэг удаа хэвлэгдэх ажлуудыг __хуулбарлах-тоо__гоор хувилдаг. Систем хянаж зохицуулагч албатай хүн магадгүй хэвлэгчийн ингэж ахин дахин хуулбарлаж хэвлэхийн оронд хувилах фото хуулбар үүсгээд түүнийгээ шууд буулгах сонголт санал танд тавьж болох юм. <<printing-advanced-restricting-copies,Олон хуулбарлалтыг хязгаарлах>> хэсэгт тодорхой заасан байгаа.
+
Доорх жишээн дээр [.filename]#parser.c# файлыг гурав, [.filename]#parser.h# файлыг мөн гурав хувилж анхдагч хэвлэгч рүү хэвлэж байна:
+
[source,shell]
....
% lpr -#3 parser.c parser.h
....

-m::
Хэвлэх ажил дууссаны дараа захиа илгээнэ. Хэвлэгдэх ажил дууссаны дараа LPD систем таны бүртгэл рүү захиа явуулдаг. Захиан дотроо таны хэвлэх ажиллагаа амжилттай болсон эсвэл алдаа гарсан тухай мэдэгддэг бөгөөд алдаа гарсан байвал (голдуу) ямар алдаа гарсныг нь бичсэн байдаг.

-s::
Түр хадгалагч сан уруу хуулахгүйгээр уг файлуудад тэмдэгт холбоос үүсгэдэг.
+
Хэрэв та том хэмжээний файл хэвлэх гэж байгаа бол энэ сонголт танд тун хэрэг болно. Ингэснээр түр хадгалагчид буй дискний хэмжээг хэмнэдэг ( таны том хэмжээний файл түр хадгалагчийн хэмжээнээс хэтэрч түүнтэй зэрэгцээ орших зай уруу илүүдэж гарах аюултай). LPD мөн хэвлэх файлыг хуулах гэж цаг зарцуулахгүй түргэн байх болно.
+
Нэг сул тал бий: LPD нь хэвлэгдэх файл уруу шууд хандаж байгаа болохоор хэвлэгдэж дуусахаас нааш та уг файлыг засварлаж чадахгүй байх болно.
+

[NOTE]
====
Хэрэв та сүлжээгээр өөр хэвлэгч рүү хэвлэж байгаа бол LPD нь уг компьютераас алсад буй хэвлэгч рүү файлыг хуулдаг болохоор `-s` сонголт нь дотоод зайгаа хэмнэхээс биш алсад буй компьютерийн дискний зайг хэмнэдэггүй. Гэвч ийм байсан ч хэрэгтэй сонголт билээ. 
====

-r::
Түр хадгалагч уруу хуулсны дараа юм уу эсвэл `-s` сонголт хэрэглэж хэвлэсний дараа уг файлыг утсгана. Энэ сонголтыг тун болгоомжтой хэрэглэнэ үү!

[[printing-lpr-options-misc]]
==== Хуудасны толгой хэсгийг загварчлах сонголтууд

man:lpr[1] тушаалд хэрэглэсэн эдгээр сонголтууд нь хуудасны толгой хэсэгт хэвлэгддэг текстийг зааж өгөхөд хэрэглэгддэг. Хэрэв хуудасны толгой хэсгийг өөр програм өөрчилнө гэж заасан байвал энэ сонголт хүчингүй болдог. <<printing-advanced-header-pages,Хуудасны толгой хэсэг>> хэсэгт энэ талаар тодорхой өгүүлсэн байгаа.

-C _текст_::
Толгой хэсэгт байдаг компьютерийн нэрийг зааж өгсөн __текст__ээр орлуулдаг. Ердийн үед бол уг хэвлэх ажлыг илгээсэн компьютерийн нэр байдаг. 

-J _текст_::
Толгой хэсэгт байдаг хэвлэх ажлын нэрийг зааж өгсөн __текст__ээр орлуулдаг. Ердийн үед ажлын нэр нь хэвлэх файлын нэр байдаг ба хэрэв та консолийн стандарт оруулга хэрэглэсэн бол [.filename]#stdin# гэж байдаг.

-h::
Толгой хэсэггүй хэвлэнэ.
+

[NOTE]
====
Хэрэв өөр програмаар толгой хэсэг нь бэлтгэгдсэн бол энэ сонголт зарим тохиолдолд хүчингүй болдог. <<printing-advanced-header-pages,Хуудасны толгой хэсэг>> хуудсанд энэ тухай тайлбарласан буй
====

[[printing-lpc]]
=== Хэвлэгчдийг зохицуулах

Хэвлэгчдийг зохицуулагчийн зүгээс тэдгээрийг суулгаж шалгахад үүрэгтэй байдаг. man:lpc[8] тушаал ашиглан хэвлэгчтэйгээ та олон аргаар харилцаж чадна. man:lpc[8] тушаал ашиглан

* Хэвлэгчийг эхлүүлэх болон зогсоох
* Хэвлэгдэх дарааллыг хорих болон зөвшөөрөх
* Дараалалд буй хэвлэгдэх ажлын ээлж дарааг өөрчлөх

Эхлээд жаахан тодруулцгаая: Хэрэв хэвлэгч _зогссон_ бол дараалалд буй ямар ч ажлыг хэвлэхгүй. Хэрэглэгчид хэвлэх ажил илгээж болох бөгөөд тийм ажлууд бүгд дараалалд нэмэгдэж хэвлэгчийг _эхлэх_ хүртэл юм уу эсвэл дарааллыг цэвэрлэх хүртэл тэнд хадгалагдана.

Хэрэв дараалал _хоригдсон_ бол ямар ч хэрэглэгч (`root` хэрэглэгчээс бусад) хэвлэгч рүү юм илгээж чадахгүй. Дараалал _зөвшөөрөгдсөн_ үед л хэвлэх ажил хүлээж авдаг. Хэвлэгч _эхлэх_ үедээ мөн хоригдсон дарааллыг хоосортол нь хэвлэнэ.

man:lpc[8] тушаалыг хэрэглэхийн тулд та `root` эрхтэй байх хэрэгтэй байдаг. Энгийн хэрэглэгчид бол man:lpc[8] тушаалыг хэвлэгчийн төлөв байдал юм уу эсвэл гацсан хэвлэгчийг эхлүүлэхэд хэрэглэнэ. 

Энд man:lpc[8] тушаалын нэгтгэсэн жагсаалтыг харуулав. Ихэнх тушаалуудад онцгойлон хэвлэгч рүү хандахын тулд _хэвлэгчийн-нэр_ нэмж өгдөг. Хэрэв та `all` гэж _хэвлэгчийн-нэр_-н оронд өгвөл [.filename]#/etc/printcap# файл жагсаалттай буй бүх хэвлэгчийг илэрхийлэх болно.

`abort хэвлэгчийн-нэр`::
Одоогийн хэвлэж байгаа ажлыг цуцлаад хэвлэгчийг зогсооно. Хэрэв дараалал хоригдоогүй бол хэрэглэгчид хэвлэх зүйлс илгээж байж болно.

`clean хэвлэгчийн-нэр`::
Хэвлэгчийн түр хадгалагчид буй хуучин файлуудыг устгана. LPD уг файлыг ямар нэгэн шалтгааны улмаас устгаагүй байж болох юм. Энэ нь хэвлэх үед алдаа гарах, эсвэл зохион байгуулах зарим үйлдэл хийгдэх гэх мэт янз бүрийн шалтгаан байж болно. Энэ тушаал түр хадгалагч санд хамаарахгүй файлуудыг шалгаж олоод устгадаг.

`disable хэвлэгчийн-нэр`::
Шинээр ирэх ажлуудад дарааллыг хорьно. Хэрэв хэвлэгч тухайн үед хэвлэж байвал дараалалд үлдсэн байгаа зүйлсүүдийг хэвлэдэг. Супер хэрэглэгч (`root`) дараалал хоригдсон байсан ч хэвлэх зүйл илгээдэг.
+
Энэ тушаал шинэ хэвлэгчийн суулгац юм уу шүүлтийг шалгахад их хэрэгтэй. Жишээ нь хэвлэх дарааллыг хориод `root` эрхээр хэвлэж туршиж болно. Бусад хэрэглэгчид дарааллыг `идэвхжих` хүртэл дараалал уруу ажил илгээж чадахгүй.

`down хэвлэгчийн-нэр мэдээлэл`::
Хэвлэгчийг унтраана. `disable` тушаалыг `stop`-тай хамт хэрэглэсэнтэй ижил. Хэрэв хэрэглэгч хэвлэгчийн man:lpq[1] юм уу эсвэл `lpc status` тушаал хэрэглэн төлөв байдлыг мэдье гэсэн үед уг зааж өгсөн _мэдээлэл_ харуулагддаг. 

`enable хэвлэгчийн-нэр`::
Хэвлэгчийн дарааллыг зөвшөөрдөг. Хэрэглэгч хэвлэгч рүү юм илгээж болох боловч хэвлэгч эхлэхээс нааш хэвлэгдэхгүй.

`help тушаал`::
__тушаал__ын хэрэглэх тусламжийг харуулдаг. Хэрэв _тушаал_ бичилгүйгээр тушаавал боломжтой бүх тушаалын ерөнхий мэдээллийг харуулна.

`restart хэвлэгчийн-нэр`::
Хэвлэгчийг эхлүүлдэг. Ердийн хэрэглэгчид энэ тушаалыг хэрэв ямар нэгэн тохиолдлоор LPD гацсан үед хэвлэгчийг эхлүүлэхэд хэрэглэж болдог боловч `stop` юм уу `down` тушаал хэрэглэн ажиллаж байгаа хэвлэгчийг зогсоож чаддаггүй. `restart` тушаал нь `abort` тушаалыг `start` тушаалтай хэрэглэсэнтэй ижилхэн.

`start хэвлэгчийн-нэр`::
Хэвлэгчийг эхлүүлнэ. Хэвлэгч дараалалд байгаа ажлуудыг хэвлэж эхэлдэг.

`stop хэвлэгчийн-нэр`::
Хэвлэгчийг зогсооно. Хэвлэгч яг хэвлэж байсан ажлаа дуусгаад дараалалд байгаа ажлуудыг хэвлэлгүйгээр зогсоно. Хэвлэгч зогссон байсан ч хэрэглэгчид хэвлүүлэх ажлаа дараалалд илгээж болно.

`topq хэвлэгчийн-нэр ажил-эсвэл-хэрэглэгчийн-нэр`::
_хэвлэгчийн-нэр_ нэртэй хэвлэгчийн дараалалд байгаа ажлуудын хамгийн дээд хэсэгт нь зааж өгсөн _хэрэглэгчийн-нэр_ хэрэглэгчийн _ажлыг_ оруулдаг. Энэ тушаалыг `all` гэж _хэвлэгчийн-нэр_-н оронд хэрэглэх боломжгүй.

`up хэвлэгчийн-нэр`::
`down` тушаалын эсрэгээр уг хэвлэгчийг шинээр эхлүүлдэг. `start` тушаалыг `enable`-тай хэрэглэсэнтэй ижилхэн.

man:lpc[8] нь дээрх тушаалуудыг тушаал бичих мөрнөөс хүлээж авдаг. Хэрэв та ямар ч тушаал оруулаагүй бол man:lpc[8] нь `exit` юм уу `quit`, эсвэл end-of-file тэмдэгт илгээх хүртэл гарнаас тушаал оруулж ажиллах харилцах горимд шилждэг.

[[printing-lpd-alternatives]]
== Хэвлэгчийн стандарт түр хадгалагчидтай ижил хадгалагчид

Хэрэв та энэ гарын авлагыг эхнээс нь уншиж байгаа бол FreeBSD-тэй цуг ирдэг түр хадгалах систем болох LPD-ийн талаар бүх л мэдэж болох зүйлсийг одоо сурсан байх ёстой. Та үүний олонхи дутагдалтай талуудыг үнэлж чадах байх. Энэ нь дараах асуултанд хүргэдэг: "Өөр ямар (FreeBSD-тэй ажилладаг) түр хадгалах системүүд байдаг вэ?"

LPRng::
LPRng буюу "LPR: the Next Generation" гэгддэг дараа үеийн систем нь PLP-ийг дахин бичсэн хувилбар юм. Патрик Пауэл болон Жастин Мэйсон (PLP-ийн гол арчлагч) нар нийлэн LPRng-г хийсэн юм. LPRng-ийн гол сайт бол http://www.lprng.org/[http://www.lprng.org/] юм.

CUPS::
CUPS буюу Common UNIX Printing System нь UNIX(R) дээр тулгуурласан үйлдлийн системүүдэд зориулсан зөөгдөж болох хэвлэх давхаргын боломжийг олгодог. Энэ нь бүх UNIX(R) үйлдвэрлэгчид болон хэрэглэгчдэд зориулж стандарт хэвлэх шийдлийг дэмжихийн тулд Easy Software Products-аас хөгжүүлэгдсэн юм.
+
CUPS нь Internet Printing Protocol (IPP) буюу Интернэтийн Хэвлэх Протоколыг ашиглаж хэвлэх ажлууд болон дарааллуудыг удирдах үндсээ болгодог. Line Printer Daemon (LPD) буюу Шугамын Хэвлэгчийн Дэмон, Server Message Block (SMB) буюу Серверийн Мэдэгдлийн Блок, болон AppSocket (JetDirect гэгддэг) протоколууд нь багасгасан ажиллагаатайгаар бас дэмжигдсэн байдаг. CUPS нь амьдралд байх UNIX(R) дээрх хэвлэлтийг дэмжихийн тулд сүлжээний хэвлэгч олох (browsing) болон PostScript Printer Description (PPD) буюу PostScript Хэвлэгчийн Тайлбар дээр суурилсан хэвлэх тохируулгуудыг нэмдэг.
+
CUPS-ийн гол сайт нь http://www.cups.org/[http://www.cups.org/] юм.

HPLIP::
HPLIP буюу HP Linux(R) Imaging and Printing систем нь HP өөрийнхөө төхөөрөмжүүдэд зориулан хөгжүүлсэн хэвлэлт, скан хийлт, болон факсын боломжуудыг дэмжсэн програм хангамжийн цуглуулга юм. Энэ програм хангамжийн цуглуулга нь өөрийн зарим хэвлэх боломжууддаа зориулж ар талдаа CUPS хэвлэх системийг хэрэглэдэг.
+
HPLIP-ийн гол сайт нь http://hplipopensource.com/hplip-web/index.html[http://hplipopensource.com/hplip-web/index.html] юм.

[[printing-troubleshooting]]
== Алдааг олж засварлах

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

Хэвлэж болж байна, гэхдээ хэсэг хугацааны дараа юм уу эсвэл анхнаасаа хуудасны тал хэсгийг хэвлээд зогсох.::
Хэвлэгч дээд хэсгийг нь хэвлээд хэсэг хугацааны дараа юу ч хийхгүй болох. Ийм үед та хэвлэгч дээрх PRINT REMAINING эсвэл FORM FEED товч дарж үлдсэн хэсгийг нь хэвлэх эсэхийг харах хэрэгтэй.
+
Хэрэв хэвлэгч өөр хэвлэх юм байгаа эсэхийг хүлээгээд байгаа тийм нөхцөлд орвол хэвлэгч рүү FORM FEED тэмдгийг илгээснээр (эсвэл ямар нэгэн юм) уг асуудал шийдэгдэж болох юм. Өөрийнхөө түр хадгалагч дээр орж ирсэн өгөгдлийг шууд хэвлэдэг хэвлэгчдэд иймэрхүү арга хэрэглэхэд хангалттай билээ. Хэрэв өмнөх хуудас нь хуудасны тал хүртэл байгаад дараагийн хуудас нь шинээр хуудаснаас эхлэх байсан болоод дууссан хуудасны тал хэсгээс хэвлэхгүй байгаад байх нөхцөл үүссэн байж болзошгүйг шалгахад мөн илүүдэхгүй.
+
[.filename]#/usr/local/libexec/if-simple# бүрхүүлийн скриптэд оруулсан дараах оруулга нь хэвлэх үйлдлийн дараа хэвлэгч рүү хуудас дууссан тэмдэгт илгээнэ:
+
[.programlisting]
....
#!/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
....

Гэхдээ энэ нь "хачирхалтай нөлөө" үүсгэж болох юм.::
Та дараах зүйлсийг хуудсан дээрээ харах болно:
+

[source,shell]
....
!"#$%&'()*+,-./01234
                "#$%&'()*+,-./012345
                                 #$%&'()*+,-./0123456
....
+
Энэ нь таныг шинэ мөр илэрхийлдэг тэмдэгт хөрвүүлэгдээгүй улмаас өнөөх _хачирхалтай нөлөөний_ хохирогч нь болсон байна гэдгийг илэрхийлж байна. UNIX(R) төрлийн үйлдлийн системүүд мөр дууссаныг илэрхийлэхийн тулд ASCII-н 10 гэсэн дугаарыг буюу line feed (LF) гэсэн нэг л тэмдэгт хэрэглэдэг. Харин MS-DOS(R), OS/2(R), болон бусад үйлдлийн системүүд ASCII-н 10 _ба_ ASCII-н 13 (CR буюу шинэ мөр эхлэх) гэсэн хоёр тэмдгийг хамтад нь хэрэглэдэг. Ихэнх хэвлэгч нар шинэ мөрийг илэрхийлэхдээ MS-DOS(R)-н шийдлийг хэрэглэдэг.
+
Хэрэв та FreeBSD-с хэвлэхээр бол таны текстүүд зөвхөн мөр дууссан тэмдэгт л агуулсан байгаа. Мөр дууссан тэмдэгтийг хэвлэгч хүлээж авангуутаа хуудсаа нэг мөрөөр дээшлүүлсэн мөртлөө яг тухайн байрлалдаа дараагийн тэмдэгт ирэхийг хүлээж зогсдог. Энэ үед л шинэ мөр гэсэн тэмдэгт ирж байж хэвлэгчийн толгой зүүн хэсэг рүүгээ гүйдэг билээ. 
+
FreeBSD нь дараах маягаар хэвлэхийг хэвлэгчээс хүсдэг:
+
[.informaltable]
[cols="1,1", frame="none"]
|===

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

|Хэвлэгч LF тэмдэгт хүлээж авлаа
|Хэвлэгч CR + LF гэж хэвлэх
|===
+
Үүнийг залруулах хэдэн арга бий:

** Хэвлэгчийнхээ тохируулгын цонхыг ашиглан эдгээр тэмдэгтийг өөрөөр хөрвүүлж ойлгохоор тохируулах. Иймэрхүү тохиргоо байдаг эсэхийг хэвлэгчийнхээ гарын авлагад харах хэрэгтэй.
+
[NOTE]
====
Хэрэв та системээ шинээр ачаалахдаа FreeBSD-ээс өөр давхар суусан үйлдлийн систем рүү орвол тухайн үйлдлийн системдээ тохируулж CR болон LF тэмдэгтийн хөрвүүлэх тохиргоог _дахин хийх_ хэрэг гарч магадгүй юм.
====

** FreeBSD-н цуваа холболтын таниулагч програм нь автоматаар LF тэмдэгтийг CR+LF тэмдэгт рүү хувиргадаг. Мэдээж энэ нь _зөвхөн_ цуваа холболтоор холбогдсон хэвлэгч дээр ажиллана. Энэ шинж чанарыг идэвхжүүлэхийн тулд `ms#` хэрэгслийг ашиглан `onlcr` горимыг хэвлэгчийн [.filename]#/etc/printcap# файл дотор оруулж өгөх хэрэгтэй.
** Хэвлэгчийн алгасаж болдог _escape code_ тэмдэгт илгээж хэвлэгчийг LF тэмдэгт илгээгдсэн гэж ойлгуулж болох юм. Хэвлэгчийн гарын авлагаас ийм тэмдэгт дэмждэг эсэхийг харах хэрэгтэй. Хэрэв та тохирох тийм тэмдэгт олсон бол текст шүүгч програмыг өөрчилж эхлээд тэр тэмдэгтийг илгээгээд дараа нь хэвлэх зүйлсийг илгээхээр засах хэрэгтэй. 
+ 
Энд Hewlett-Packard PCL хэвлэгчийн ойлгодог алгасаж болдог тэмдэгтийн текст шүүгч жишээг татаж үзүүлэв. Энэ шүүгч нь LF тэмдэгтийг LF ба CR гэж хөрвүүлээд хэвлэгч рүү хэвлэх ажлыг илгээж дараа нь мөр дууссан тэмдэгтийг илгээж хэвлэх ажил дууссаныг мэдэгддэг. Энэ нь бараг бүх Hewlett Packard хэвлэгчдэд тохирдог.
+
[.programlisting]
....
#!/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` нэртэй компьютерийн [.filename]#/etc/printcap# файлын жишээг харуулж байна. Энд `teak` нэртэй Hewlett Packard LaserJet 3Si хэвлэгчийг зэрэгцээ холболтоор холбосон байгаа. Энд өмнө үзүүлсэн скриптийг текст шүүгчээ болгож хэрэглэсэн байгаа:
+
[.programlisting]
....
#
#  /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 тэмдэгтүүдийг дараах маягаар хөрвүүлэхээр тохируулах хэрэгтэй:
+
[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Хэвлэгчийн хүлээж авалт
| Хэвлэгчийн хэвлэлт

|CR
|CR

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

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

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

Юу ч болохгүй байх.::
Хэрэв юу ч болохгүй байвал хүндрэл нь хэвлэгчид биш FreeBSD-д байж болох юм. [.filename]#/etc/printcap# файлд бүртгэл файл хэрэглэнэ гэсэн (`lf`) шинж чанарыг нэмэх хэрэгтэй. Жишээ нь энд `rattan` оруулганд `lf` шинж чанар нэмж байна:
+
[.programlisting]
....
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
....
+
Тэгээд дахиад хэвлэх гээд оролдоод үз. Гарч болзошгүй алдааны мэдэгдэл байгаа эсэхийг бүртгэлийн файлаас (бидний жишээн дээр [.filename]#/var/log/rattan.log#) шалгах хэрэгтэй. Мэдэгдлүүдээс хамаарч асуудлыг засахыг оролдох хэрэгтэй.
+
Хэрэв та `lf` шинж чанар зааж өгөөгүй бол, LPD нь [.filename]#/dev/console# файлыг анхдагч гэж авч үзнэ.
