LINUX.ORG.RU

Использование принтера в режиме телетайпа-телеграммной ленты.

 ,


2

2

Купил под восстановление матричный usb принтер EPSON LX-300+. (кстати а есть ли под него нормальный драйвер в линукс? Я нашёл только стандартный Epson 9-Pin Series)

Фото жужжалки https://i.postimg.cc/13hTySMh/IMG-6074.jpg

Цели - печать этикеток для кассет с играми ZX-Spectrum, просто всяких этикеток на кассеты с музыкой, и вообще заметок чудесным матричным шрифтом из точек. В общем для фана и не только.

В linux в консоли тоже нашёл применение, хочу отправлять на него однострочные заметки из терминала.

Казалось бы, всё просто:

a="Message to print"; echo $a | lpr


но после печати даже одной строки принтер прокручивает весь лист, что в принципе логично, но мне вовсе не надо. Мне надо как это было на рулонных принтерах докинескопной эры, напечатать строку, перевести каретку, и ждать строкой ниже следующей печати.

Как это можно сделать?

Я не хочу заранее составлять листы документов и печатать их, это сломает весь кайф, я хочу периодически отправлять на принтер отдельные строки, чтобы они заполняли один лист. Возможно я буду делать это по сети, и у меня не будет возможности менять бумагу, возможно я так буду смски принимать, почему бы и нет?). Про вариант питания от рулона я знаю, пока про него не будем, пока под рукой только бумага А4 и я хочу выжать эту ф-цию на ней.

★★★

Последнее исправление: hikikomori (всего исправлений: 1)

Ответ на: комментарий от sigurd

Я тоже думал, что битовая маска. Но это какая-то странная битовая маска.

По этой логике я шлю ESC ! и число, биты которого 0-7 отвечают за разные свойства, которые можно произвольно комбинировать. Okey, Epson! Напечатай мне подчёркнутый текст:

a=$(echo 'print("{0:x}".format(0b00000001))' | python3); echo -e "\x1b\x21\x$a" Underline | lpr -l


но чёрта лысого, а не подчёркнутый. Подчёркнутый можно получить только так:
echo -e "\x1b\x21\x80"Underline | lpr -l


А 80 это:
print(bin(80))
0b1010000

То есть комбинация включённых битов 0 (select 10 cpi) и 2 (select condensed). Согласно этой ИНСТРУКЦИИ. С-120 страница 128. Скриншот: https://i.postimg.cc/Df6VrPg0/Screenshot-20201231-033510.jpg

По факту понимаю, что я не так понял, биты не числа в бинарном виде 0000 0000 а условные биты принтера?
Тогда суммировать надо числа колонок hex или dec? Okey, Epson, напечатай мне жирный наклонный шрифт:
a=$(echo 'print("{0:x}".format(0x8+0x40))' | python3); echo -e "\x1b\x21\x$a"Bold Italic | lpr -l

Получилось. Вроде не напутал.

Головка после печати остаётся на символе, надо смещать её правее, чтобы напечатанное было сразу видно.
Как бы это получше сделать?

echo -e "\x1b\x24\xNNN" | lpr -l


С NNN проблемы. Там на стр.40 ( Set absolute horizontal print position) дана какая-то шизанутая формула рассчёта.

hikikomori ★★★
() автор топика
Ответ на: комментарий от anonymous

Спасибо, задним числом уже догадался. Просто без префиксов не всегда угадаешь.

hikikomori ★★★
() автор топика

Я 30 лет не кормил эпсоны esc последовательностями и не настраивал их... Но припоминаю режим, когда автоматом FF (Form Feed) после каждой печати запускается.
Вот что нагуглил (http://files.support.epson.com/pdf/lx3pii/lx3pii00ug.pdf#page=36&view=Fit...
Using Default Setting modeFollow the steps below to enter Default Setting mode. If you use single sheets, you’ll need to load a new sheet of paper each time the printer ejects a printed page.
1.Make sure paper is loaded and the printer is off.
2.Hold down the Tear Off (Font) button and then turn on the printer.The printer enters Default Setting mode and prints instructions for selecting the language. The current language is indicated by which control panel lights are on. (For English, only the Pause light is on.)
3.If you want a different language, press the LF/FF button until the lights show the language you want.
4.Press the Tear Off (Font) button to print a list of all the current settings.
5.If the settings are all correct, turn off the printer to exit Default Setting mode. If you want to change any settings, go to step 6.
6.Press the Tear Off (Font) button. The printer prints instructions for changing the settings.
7.Press the LF/FF button to scroll through the options for the selected setting until you see the one you want. Then press theTear Off (Font) button to select the next setting you want to change.
8.When you finish making settings, turn off the printer to exit Default Setting mode.

- тебе нужен параметр «Auto tear off», который по умолчанию off, т.е. Auto tear работает, и нужно этот параметр переключить в on.

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

Печатает какие-то инструкции в этом сервисном режиме, но как настроить немного из описания не понял. Какой-то сложный перебор функций и их выбор, я затупил. Но за ссылку на инструкцию спасибо!

Вообще возня с матричным принтером увлекательна.

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)

Так печатай сразу несколько того что тебе надо или ты лист хочешь после каждой печати ножницами/ лезвием не снимая срезать?

Может тут что полезное найдёшь https://web.archive.org/web/20161031121145/https://upload.wikimedia.org/wikipedia/en/f/f6/Working_papers_on_dot_matrix_teletypewriter%2C_1961.pdf

anonymous
()

А если перед нуль терминальным символом возврат каретки задать? Он по идее должен в режим готовности вернуться после вывода.

anonymous
()
Ответ на: комментарий от sigurd

КОНСПЕКТ (вдруг кому пригодится)

Чтобы изменить размер и тип шрифта, необходимо указать принтеру управляющие Escape-последовательности и код выбранного режима:

echo "Default (condensed) text" | lpr -l
echo -e "\x1b\x21\x00"00 Select 10cpi | lpr -l
echo -e "\x1b\x21\x01"01 Select 12cpi | lpr -l
echo -e "\x1b\x21\x02"02 Select proportional | lpr -l
echo -e "\x1b\x21\x04"04 Select condensed | lpr -l
echo -e "\x1b\x21\x08"08 Select bold | lpr -l
echo -e "\x1b\x21\x10"10 Select double-strike | lpr -l
echo -e "\x1b\x21\x20"20 Select double-width | lpr -l
echo -e "\x1b\x21\x40"40 Select italic | lpr -l
echo -e "\x1b\x21\x80"80 Select underline | lpr -l
Коды также можно комбинировать:
a=$(echo 'print("{0:x}".format(0x01+0x08).zfill(2))' | python3);[br]echo -e "\x1b\x21\x$a"01+08 12cpi bold | lpr -l

hikikomori ★★★
() автор топика
Ответ на: комментарий от anonymous

Хочу рулон бумаги и срезать напечатанное. Заранее планировать текст не хочу. По вашей ссылке скан текста, я англ. не очень, вручную без гугл транслита переводить массив боль. Там ещё графики какие-то. Ничего не понял, но очень интересно.

hikikomori ★★★
() автор топика
Ответ на: комментарий от anonymous

Каретка странно себя ведёт. иногда останавливается справа, иногда поверх напечатанного. И она стоит в середине принтера, хотя бумагу узкаывал в настрйоках принтера А4. Почему-то не в крайней правой позиции...

hikikomori ★★★
() автор топика
Ответ на: комментарий от i-rinat

Я что-то сломал)

Restoring the printer’s default settings
If you want to restore all the factory default settings, turn off the printer.
Then hold down the Load/Eject, LF/FF, and Pause buttons while you
turn on the printer.


Попробовал на свою голову сбросить в дефолт.

После этого изменился дефолтный шрифт на самый простой-скоростной с минимумом точек, и пропали русские буквы. то есть раньше это печатало, а теперь нет:

a="Русские буквы работают!"; echo $a | iconv -t CP866 | lpr -o raw


Простите, как это «починить»?

На странице 81 Язык управления принтерами Эпсон - https://epson.ru/upload/support/library/esc-p.pdf

Какая-то непонятная формула: Hex 1B 28 74 nL nH d1 d2 d3
Вот чему равны nL nH d1 d2 d3 в душе не пойму.
d2=14 d3=0 PC866 (Russian)


Parameter range
nL = 3, nH = 0

А вот это не понимаю:

0 ≤ d1 ≤ 3, 48 ≤ d1 ≤ 51
0 ≤ d2 ≤ 255
0 ≤ d3 ≤ 255

Что это? Зачем?

Попробовал наугад, не получилось:

echo -e «\x1b\x28\x74\x03\x00\x14\x00»| lpr -l

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от Shadow

Починил, после сброса в дефол вернул 866 страницу с русскими буквами.

Русификация принтера Epson LX-300
http://www.telsi-labs.ru/?q=rusifikaciya_printera_epson-lx300

А вот шрифты в какое-то безобразие скатились... Их я выбирать ещё не научился..

hikikomori ★★★
() автор топика
Ответ на: комментарий от hikikomori

А вот это не понимаю:
0 ≤ d1 ≤ 3, 48 ≤ d1 ≤ 51
0 ≤ d2 ≤ 255
0 ≤ d3 ≤ 255
Что это? Зачем?

Это сложная система выбора языков! Принтеру одновременно доступно 4 таблицы, которые переключаются по «ESC t n». В каждую из этих 4 таблиц можно загрузить любую кодировку командой «ESC ( t …»
Соответственно, d1 - номер таблицы, куда записываем кодировку. Но номер задается символами 48=«0»,49=«1»,50=«2»,51=«3»

Но это можно настроить в меню принтера по светодиодам.

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 2)
Ответ на: комментарий от sigurd

Уже прошёл этот песец со светодиодами, язык выбрал. Но как выбрать его командами? Как расшифровать «0 ≤ d1 ≤ 3, 48 ≤ d1 ≤ 51» ?
Я из-за этого непонимания не могу применить большинство инструкций из мануала. Вот например шрифт сейчас с минимумом точек, едва видно. раньше было читаемей. Как его изменить тоже не понял. Везде эти клятые формулы с меньшеравно ≤. Это я дурак, или зачем так намудрили с формой донесения информации, как это прочитать? У меня нет ключа к этому шифру!

upd: Простите, не уловил, откуда такие цифры?

Соответственно, d1 - номер таблицы, куда записываем кодировку. Но номер задается символами 48=«0»,49=«1»,50=«2»,51=«3»

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от hikikomori

Простите, не уловил, откуда такие цифры?

Почти все ESC-последовательности задаются символами.
В сводке команд приведены их десятичные и ASCII значения. Символ «0» кодируется значением 48 или \x30, символ «1» - значением 49 или \x31 и т.д. Коды символов приведены в таблице ASCII.
Таким образом команда переключения на 3-ю таблицу будет «ESC t 2», где символ 2 имеет код 50 (или \x32).

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 3)
Ответ на: комментарий от sigurd

Правильно ли я Вас понял, что по первому вопросу русификации принтера, которую можно кнопками, командами будет так:

echo -e "\x1b\x28\x74\x03\x00\x30\x0e\x00" | lpr -l


где:
\x1b — 27 — ESC — сигнатура начала ESC-последовательности.
\x28 — 40 — ( — это маркер группы команд по шрифтам?
\x74 — 116 — t — А это?
\x03 — 3 — | В инструкции написано nL = 3,
\x00 — 0 — | nH = 0. А что это?

\x30 — 48 — код d1 — я с трудом понял и только с Вашими комментариями, что «0≤d1≤3, 48≤d1≤51» это выбор какой-то одной из 3х таблиц, и должен он быть почему-то не 0-3, а 48-51. Почему?
В инструкции упоминается термин «Assign character tables», ищу его в мануале, нашёл стр 249 (Select Characters R-15). Ну выбрал табл 0, пока ещё не очень понял какая разница.

\x0e — 14 — код d2 — | На стр 81 есть таблица с языками, и в
\x00 — 0 — код d3 — | строке PC866 (Russian) слева есть коды d2 d3 и равны они 14 и 0.

Я вроде могу выполнить эту команду и ничего не произойдёт - у меня уже руссификация включена. Либо сброситься снова и так вместо кнопок с лампами (и 5 листами бумаги на ветер) включить быстро руссификацию?
Поправьте меня плз. Я только начинаю понимать эту китайскую грамоту. Инструкция очень абстрактная, тяжело воспринимается.


Таким образом команда переключения на 3-ю таблицу будет «ESC t 2», где символ 2 имеет код 50 (или \x32).

А это я не понял, в инструкции на стр 250 указаны варианты:

ESC ( t 3 0 0 0 0 — Assigns the italic table to active Table 0.
ESC ( t 3 0 1 1 0 — Assigns the PC437 (US) table to active Table 1.
ESC ( t 3 0 2 8 0 — Assigns the PC865 (Canada-French) Table to active Table 2.
ESC ( t 3 0 3 3 0 — Assigns the PC850 (Multilingual) table to active Table 3.

Т.е. например:
echo -e «\x1b\x28\x74\x03\x00\x30\x00\x00»| lpr -l866 | lpr -o raw
Есть 4 таблицы, и им можно назначать какие-то язык. Так?
А зачем нужны 4 таблицы, не проще ли сразу назначать язык задаче, к чему лишняя сущность? И какую я сейчас таблицу использую, как понять?



Пока жду ответа буду экспериментировать. Спасибо, самостоятельно тут очень долго разбираться в этом старье, пока не поймёшь логику и умолчания составителей этой «максимально понятной» инструкции.

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 2)
Ответ на: комментарий от hikikomori

Ещё моих изысканий конспект:

Выбор качества печати, в один проход или в два:

echo -e "\x1b\x78\x30"Select Draft | lpr -l
echo -e "\x1b\x78\x31"Select LQ Mode | lpr -l


Сплюснутый шрифт и его отключение:
echo -e "\x1b\x53\x30"Select Superscript | lpr -l
echo -e "\x1b\x53\x31"Select Subscript | lpr -l
echo -e "\x1b\x54"Cancels super/subscript | lpr -l


Прекратить печать наклонным шрифтом:
echo -e "\x1b\x35"Cancels italic | lpr -l


Выбор печати пропорциональным шрифтом:
echo -e "\x1b\x70\x31"Sel Proportional | lpr -l 
echo -e "\x1b\x70\x30"Cancel Proportional | lpr -l



p.s. Как запомнить в ROM, чтобы после включения принтера это не вводить заново, я пока ещё не понял.
В инструкции это вроде бы описывается на стр259 (Storing user-defined character data in printer memory
)

hikikomori ★★★
() автор топика

Ты эту суку 300-350 перевеведи в нормальный режим. Кнопками на нем.

Bootmen ☆☆☆
()
Ответ на: комментарий от hikikomori

Таким образом команда переключения на 3-ю таблицу будет «ESC t 2», где символ 2 имеет код 50 (или \x32).
А это я не понял, в инструкции на стр 250 указаны варианты:
ESC ( t 3 0 0 0 0 — Assigns the italic table to active Table 0.

Блин. Выше я уже писал вам, что у принтера есть 4 таблицы шрифтов в памяти. В любую из этих таблиц можно загрузить любой шрифт из ПЗУ командой «Esc ( t …». По умолчанию, принтер при включении сам загружает указанные в настройках шрифты. Затем можно выбрать текущую таблицу командой «Esc t n». Какая текущая таблица устанавливается при включении - надо читать руководство. Почему 4 таблицы? Ну так тексты бывают на нескольких языках одновременно, плюс шрифты одного языка имеют разное начертания. Так исторически сложилось.

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 1)
Ответ на: комментарий от sigurd

сть 4 таблицы шрифтов в памяти.

Задрали Вы «умные». Счас парень тремя кликами перестроит свой сраный 300 Как я делал 20 лет назад.

Bootmen ☆☆☆
()
Последнее исправление: Bootmen (всего исправлений: 2)
Ответ на: комментарий от Bootmen

Товарищ, вы верно тему не читали, кнопками уже сделано:

Использование принтера в режиме телетайпа-телеграммной ленты. (комментарий)

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

hikikomori ★★★
() автор топика
Ответ на: комментарий от sigurd

тексты бывают на нескольких языках одновременно

Вот ускользнуло очевидное, сам же в 90х читал матричные мануалы на русском с цитатами eng комманд.

Вы на моё длинное сбщ выше не могли бы подробнее ответить? Я затрудняюсь с форматом. Верна ли эта строка (у меня есть сомнения)

echo -e «\x1b\x28\x74\x03\x00\x30\x0e\x00» | lpr -l

В рассшифровке я привёл как её понимаю.

Но она рушится о пример из инструкции:

ESC ( t 3 0 2 8 0 — Assigns the PC865 (Canada-French) Table to active Table 2.

Во первых в мануале «PC865 это Nordic, и если это очепятка, то Canadian-French это PC863. Во-вторых, примере дана строка

ESC ( t 3 0 2 8 0

Если я так буду вводить PC866 (Russian), то у него в столбиках d2 d3 таблицы значится 14 и 0. То есть что получается:

ESC ( t 3 0 2 14 0

Но если в примере подразумевается символьная передача, то 14 будет передан двумя цифрами, и следующий параметр d3 съедет правее. Тогда это не символьная передача, а условная, и бинарно будет так:

echo -e »\x1b\x28\x74\x33\x30\x30\x0e\x30" | lpr -l
Символьно: ESC ( t 3 0 0 14 0

Но после этой строки у меня принтер перестаёт отвечать на задания пока не выключу-включу.


Тоже самое с примером из инструкции:

ESC ( t 3 0 0 0 0 — Assigns the italic table to active Table 0.

На его выполнении принтер повисает:

echo -e «\x1b\x28\x74\x33\x30\x30\x30\x30» | lpr -l

Извините, не понимаю, потому спрашиваю.

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от hikikomori

Предыдущий вопрос открыт, но пока вот что опробовал, в мануале Select character table С-77 page 85.

Выбор таблицы символов. Всего их четыре: 0,1,2,3. Предположительно русский язык в таблице 1. При выборе таблицы с другими символами печать на русском будет кракозябрами:

echo -e "\x1b\x74\x01"SelCharTab - русский язык | iconv -t CP866 | lpr -o raw

hikikomori ★★★
() автор топика
Ответ на: комментарий от sigurd

В общем ещё раз сбросил принтер в дефолт. Русские буквы становятся доступными только после выполнения двух команд, которые уже нашли выше. Одной мало, ещё нужно выбрать таблицу.

echo -e "\x1b\x28\x74\x03\x00\x30\x0e\x00\x1b\x74\x00"проверка кириллицы | iconv -t CP866 | lpr -l


После этого уже можно печатать, но будет блеклый draft, я предпочитаю донастроить шрифты на Select LQ Mode + Bold + 12cpi:
echo -e "\x1b\x78\x31\x1b\x21\x09"LQ+Bold+12cpi | lpr -l
А вот как это сохранить в ROM(EEPROM) принтера, чтобы не вводить каждый раз после вкл. питанию? В мануале только про загрузку в RAM из ROM видел.

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от hikikomori

А вот как это сохранить в ROM(EEPROM) принтера, чтобы не вводить каждый раз после вкл. питанию? В мануале только про загрузку в RAM из ROM видел.

Это я не подскажу. Я как раз использовал программную настройку принтера (перед выдачей на него распечатки из моей программы). Но это было очень давно. И сейчас под рукой матричного принтера нет.
Помоем, никак вы текущее состояние принтера после ESC-команд не сохраните.

sigurd ★★★★★
()
Ответ на: комментарий от sigurd

А вы не знаете, как заставить ПГ убраться после печати вправо?
Она то посередине принтера, то прямо слева поверх напечатанного, то где придётся, словно рандомное позиционирование)
Цель - прочитать напечатанное не прокручивая бумагу вверх.
Как пискнуть принтером (echo -e «\x07» | lpr -l) нашёл, а это не нашёл.


В пространство: неужели дефолт можно настроить только через кнопки? Мега неудобно =( Но принтер был настроен в том числе а на другой дефолтный шрифт (жирный мелкий) неужели тоже через меню настраивали, или может таки есть способ запомнить команды?

hikikomori ★★★
() автор топика
Ответ на: комментарий от sigurd
echo -e "\x09"| lpr -l

далеко не всегда головка куда-то сдвигается, зато всегда переводит строку с прокруткой бумаги, а это не годится и эквивалентно echo -e "\x1b\x0d" | lpr -l

Я научился уже вверх прокручивать, но это слишком громоздно получается, как припадок пьяного дервиша. Вот эта конструкция печатает, потом прокручивает обратно, и ещё раз печатает точно поверх себя. Комбинировать символы, или мегажирно печатать.

echo "( ШЕР )" | iconv -t CP866 | lpr -l
echo -e "\x1b\x6a\x47" | lpr -l
echo ") ШЕР (" | iconv -t CP866 | lpr -l 



Но я бы хотел просто смещать ПГ по горизонтали без прокрутки бумаги.

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от sigurd

Эффект немного другой, но не тот, который хотели. Головка никуда не трогается, но при последующей печати смещается левый отступ и печать выходит за правую границу.

hikikomori ★★★
() автор топика
Ответ на: комментарий от i-rinat

Матричный принтер мне интересен именно быстрым текстовым режимом.
Либо Вы имели ввиду нечто другое, чем конвертировать консольную строку в картинку и печатать уже её?

А существует ли под Linux какой редактор оперирующий ESQ командами и текстовым режимом? Чтобы в списке шрифтов я видел только варианты принтера, выделение, наклонный, подчеркивание, всё это печаталось бы в текстовом режиме? Рисование рамок, псевдографики. Есть же такой редактор или уже нет и остаётся подымать машину с DOSом и Лексиконом?

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от anonymous

Прокрутить на строку вверх без дерганья и смс:
printf «\x1b\x6a\x23» | lpr -l
Вот это да, упустил, наверстываю.

hikikomori ★★★
() автор топика

Смешна эта возня в этои топике. У меня перед лицом система которая печатает непрырывно на 350 принтере. В рулоне. Без прогонов. Система 2005 года.

Bootmen ☆☆☆
()
Ответ на: комментарий от Bootmen

Странный вы человек, называете обсуждение языка управления принтерами ESС-P «вознёй». Тема удалась очень информативной. А что тогда не возня, упоминание про струйный принтер с СНПЧ в теме про матричный? Вам есть чем поделиться - не смотрите свысока на «возню внизу под облаками», спуститесь с трона и поделитесь.


2all: купил сегодня новый картридж к топиковому Epson 300+II. Чуть ярче стал печатать, ресурс поистине огромный. Пожалуй буду 2й такой чинить, а то гляжу на авитах цены на него как на винрарную аудиотехнику, 5-15К. За что столько? Я хренею, дорогая редакция.

hikikomori ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.