Next Previous Contents

## 16. Последовательные принтера под управлением lpd

Последовательные принтера редко используются с lpd.

## 16.1 Настройка printcap

Lpd обеспечивает пять атрибутов, которые вы можете установить в /etc/printcap для контроля всех установок принтера на последовательном порту. Читайте справочную страницу printcap и отметьте значение атрибутов br#, fc#, xc#, fs# and xs#. Последние четыре из этих атрибутов являются битовыми картами показывающими установки для использования портом. Атрибут br# это просто скорость передачи в бодах, например ``br#9600`'.

Очень легко переводить из установок stty в установки флагов printcap. Если вам необходимо, то смотрите справочную страницу stty.

Используйте stty для настройки порта принтера, так что вы сможете выполнить копирование файла на него и получить правильно напечатанный файл. Здесь приводятся данные того, что `stty -a' показывает для моего принтерного порта.

> `

>     dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2
>     speed 9600 baud; rows 0; columns 0; line = 0;
>     intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
>     eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
>     lnext = ^V; min = 1; time = 0;
>     -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
>     -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr
>     -igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel
>     -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
>     bs0 vt0 ff0
>     -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase
>     -tostop -echoprt -echoctl -echoke

> `

Разница между этим и тем способом которым порт инициализируется при загрузке во флагах `-clocal`, `-crtscts`, and `ixon`. Настройки вашего порта могут отличаться в зависимости от того как ваш принтер делает контроль потока.

В действительности вы используете stty странным способом. Так stty работает с терминалами, подключенными к его стандартному вводу, вы используете его для манипуляций с заданным последовательным портом используя символ ``<`' как показано выше.

После того как вы правильно установили настройки stty, так что `cat file > /dev/ttyS2' (в моем случае) посылает файл на принтер, посмотрите в файл /usr/src/linux/include/asm-i386/termbits.h. Этот файл содержит некоторое количество #defines и несколько структур (вы можете захотеть напечатать этот файл на принтере (он у вас работает, не так ли?) и использовать его как черновик). Перейдите в раздел который начинается с:

> `

>     /* c_cflag bit meaning */
>     #define CBAUD   0000017

> `

Этот раздел перечисляет значение битов fc# и fs#. Вы будете уведомлены, что имена здесь (после скорости передачи) соответствуют одной из строк вывода stty. Не я ли сказал что все будет легко?

Заметим какая из этих настроек начинается с `a` -- в вашем выводе stty. Просуммируем все эти числа (они в восьмеричном представлении). Это представляет собой биты которые вы хотите очистить, так что результатом будет ваше свойство fc#. Конечно помните что вы будете устанавливать биты прямо после очистки, так что вы можете просто использовать ``fc#0177777`' (я так делаю).

Теперь сделаем это для тех установок (перечисленных в этом разделе) которые не имеют `a` в начале -- в вашем выводе stty. В моем примере самые важные это CS8 (0000060), HUPCL (0002000), и CREAD (0000200). также заметим флаги для вашей скорости передачи (мои равны 0000015). Сложим их все, и в моем примере получим 0002275. Это идет как ваше свойство fs# (``fs#02275`' великолепно работает в моем примере).

Сделайте тоже самое с установкой и очисткой для следующего раздела включаемого файла, "c_lflag bits". В моем случае я не устанавливал ничего, так что я просто использовал ``xc#0157777`' и ``xs#0`'.

## 16.2 Старые последовательные принтера и потеря символов

Jon Luckey указал, что некоторые старые последовательные принтера с десятицентовым последовательным интерфейсом и маленькими буферами действительно останавливаются когда используется контроль потока. Он нашел, что запрещение FIFO для последовательного порта 16550 его Linux-машины с помощью `setserial` исправило проблему потерянных символов (вы по всей видимости можете просто указать тип uart как 8250 чтобы сделать это).

Next Previous Contents