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

Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости