Меню сайта
   Главная   
   Обо мне   
   Статьи   
   Дневник   
   Картинки   
   Файлы   
   Форум   
   Гостевая книга   

Категории раздела
Куклы и игрушки [60]
Личное [117]
Музыка [19]
Общее [305]
Японский язык [12]
ZX Spectrum [70]
Субмарины [98]
Настольные игры [34]
Го (碁) [11]
Книги [16]
Япония [26]
Таро [4]
Запертый шкаф [17]
CSA (КША) [15]
GNU/Linux [135]
Ubuntu [103]
Manjaro Linux [40]
Python [3]
Магнитольное [44]
Commodore64 [15]
Игровые приставки [2]
ПЭВМ КУВТ [5]


 
Дневник (2020 » Декабрь » 28 в 02:35)
GNU/Linux Матричный принтер EPSON LX-300+

EPSON
LX-300+II
Захотелось олдскула, купил матричный принтер, 9-pin Dot Matrix Printer. Цели - печать этикеток для кассет с играми ZX-Spectrum, просто всяких этикеток на кассеты с музыкой, и вообще заметок чудесным матричным шрифтом из точек. В общем для фана и не только.

 

УСТАНОВКА ДРАЙВЕРА   #manjaro Linux


Традиционно в системе не нашлось драйвера принтера. Спасибо, народ подсказал где скачать PPD:
https://www.openprinting.org/printer/Epson/Epson-LX-300plus
Выбрал impro по ссылке directly download PPD, который успешно скормил обнаруженному принтеру.Кстати на сайте openprinting.org можно поискать принтер в базе данных драйверов Linux.


Учстановить, настроить принтер можно утилитой:
system-config-printer

Также дополнительные настройки и документация доступны по локальному адресу:
Там же по ссылке Печать из командной строки описаны соответствующие инструкции:


РАБОТА С ПРИНТЕРОМ ИЗ КОНСОЛИ   #linuxstyle


Для работы с принтером из консоли сперва необходимо его выбрать:

Посмотреть состояние принтера и принтер по умолчанию:
lpstat -p -d

Выбрать принтером по-умолчанию принтер "epson-lx-300p":
lpoptions -d epson-lx-300p

Приостановить печать, поставить принтер epson-lx-300p на паузу:
cupsdisable epson-lx-300p
Возобновить печать на принтере epson-lx-300p:
cupsenable epson-lx-300p
Посмотреть текущий статус принтера (подробнее чем lpstat)
lpc status

Теперь можно распечатать строку прямо из стандартного ввода:
a="Linux RULEZ!"; echo $a | lpr
либо из файла:
cat printertest.txt | lpr

Посмотреть доступные опции принтера "epson-lx-300p":
lpoptions -p epson-lx-300p -l
В данном случае это:
PageSize/Page Size: Custom.WIDTHxHEIGHT Letter *A4 3x5 4x6 5x7
5x8 6x8 8x10 8x12 11x14 11x14.Transverse 16x20 16x24 210x305mm
378x279mm.Transverse A3 FanFoldGerman Legal SuperB
Просмотр очереди на печать:
lpq
Удаление всех заданий из очереди, или по номеру:
cancel -a
lprm -
cancel 123
Удаление текущего задания:
lprm


ПОЛЕЗНЫЙ ПРИЁМ — печать массива без форматирования и прокрутки листа после печати. Задание печатается, позиция ПГ и лист остаются там,  где их застал конец печати. Очень удобно для самостоятельного форматирования текста и работы в режиме телеграфа. При желании можно настроить чтение смс с бумаги в реальном времени)

echo "Wake up, User!" | lpr -l

Согласно man lpr ключ -l эквивалентен -o raw. (!) Внимание, при этом размер шрифта меняется в мелкий дефолтный, и русские буквы не печатаются. Все команды даются в ручном режиме через ESC-последовательности.

Чтобы в raw можно было печатать русскими буквами, следует произвести конвертацию кодировки из UTF-8, в которой работает консоль Linux, в cp866, которую знает этот принтер. В этом поможет добавление в конвеер пайпов утилиты iconv с ключом -t (to-encoding) Не перепутайте ключ с -f (from-encoding), он используется для конвертации входящих символов, а нам нужно конвертировать выходящие:
a="Русские буквы работают!"; echo $a | iconv -t CP866 | lpr -o raw

ЯЗЫК УПРАВЛЕНИЯ ПРИНТЕРОМ      #epson ESC/P

Если вместо русских букв ерунда, и вы как я сбросили настройки принтера в дефолт (для этого при включении принтера  я удерживал нажатыми кнопки: LF/FF, Load/Eject, Pause), то придётся попотеть, и настроить 866 страницу через непростое меню принтера. Как это сделать, описано в инструкции по русификации, там даже видеоинструкция есть. Однако тоже самое можно сделать одной строкой с двумя командами:
echo -e "\x1b\x28\x74\x03\x00\x30\x0e\x00\x1b\x74\x00" | lpr -l
где  \x1b\x28\x74\x03\x00\x30\x0e\x00 — выбор символов. (см. EPSON мануалSelect Characters R-15 page 249).А  \x1b\x74\x00 — выбор текущей таблицы символов из четырёх доступных: 0,1,2,3. (см. EPSON мануалSelect character table С-77 page 85. )

NOTE: Команда echo переводит строку на принтере, что может быть лишним. Избежать этого можно командой printf. Дальнейшие примеры с ней.


Выбор качества печати, в один проход или в два:
printf "\x1b\x78\x30" | lpr -l  # Select Draft
printf "\x1b\x78\x31" | lpr -l  # Select LQ Mode

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

echo "Default (condensed) text" | lpr -l
printf "\x1b\x21\x00" | lpr -l # Select 10cpi
printf "\x1b\x21\x01" | lpr -l # Select 12cpi
printf "\x1b\x21\x02" | lpr -l # Select proportional
printf "\x1b\x21\x04" | lpr -l # Select condensed
printf "\x1b\x21\x08" | lpr -l # Select bold
printf "\x1b\x21\x10" | lpr -l # Select double-strike
printf "\x1b\x21\x20" | lpr -l # Select double-width
printf "\x1b\x21\x40" | lpr -l # Select italic
printf "\x1b\x21\x80" | lpr -l # Select underline

Коды также можно комбинировать:
a=$(echo 'print("{0:x}".format(0x01+0x08).zfill(2))' | python3);
echo -e "\x1b\x21\x$a"01+08 12 cpi bold | lpr -l

Не забывайте перед отправкой русских символов из консоли с utf8 на принтер  с dos кодировкой, выполнять перекодировку!
echo -e "Русские буквы работают!" | iconv -t CP866 | lpr -o raw

Блок из девяти команд выше изменяет отдельные биты байта после \x1b\x21. Поэтому для включения и выключения сразу нескольких режимов следует оперировать непосредственно бинарным числом. Значение битов слева-направо: underline, italic, double-width, double-strike, bold, condensed, proportional, 12cpi. Выбрать шрифт 10pci можно выключив последний бит, или указав 00000000:
        double-strike ───┐┌───  bold
        double-width  ──┐││┌──  condensed
        italic        ─┐││││┌─  proportional
        underline     ┐││││││┌  12-cpi
a=$(printf %02x $(( 2#00011001 ))) ; printf "\x1b\x21\x$a" | lpr -l

Например включить и сразу напечатать образец с флагами italic, double-width, bold, и proportional:
a=$(printf %02x $(( 2#01101010 ))) ; echo -e "\x1b\x21\x$a"Text FRAGment $a | lpr -l

Альтернативные верхним команды с тем же действием.


Печать жирным шрифтом:
printf "\x1b\x45" | lpr -l # Select bold
Прекратить печать жирным шрифтом:
printf "\x1b\x46" | lpr -l # Select bold
Печать наклонным шрифтом:
printf "\x1b\x34" | lpr -l # Cancels italic
Прекратить печать наклонным шрифтом:
printf "\x1b\x35" | lpr -l # Cancels italic

Шрифт в полвысоты и его отключение:
printf "\x1b\x53\x30" | lpr -l # Select Superscript
printf "\x1b\x53\x31" | lpr -l # Select Subscript
printf "\x1b\x54" | lpr -l # Cancels super/subscript
Для сравнения оба шрифта в одной строке. Первая часть занимает верх знакоместа, вторая нормального размера, и последняя — нижнюю его часть:
echo -e "\x1b\x53\x30upper\x1b\x54NORMAL\x1b\x53\x31lower" | lpr -l

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

Выбор таблицы символов. (в мануале: Select character table С-77 page 85) Всего их четыре: 0,1,2,3. Предположительно русский язык в таблице 1. При выборе таблицы с другими символами печать на русском будет кракозябрами:
echo -e "\x1b\x74\x01"SelCharTab - русский язык | iconv -t CP866 | lpr -o raw

Моя строка инициализации шрифта: Select LQ Mode + Bold + 12cpi
printf "\x1b\x78\x31\x1b\x21\x09" | lpr -l # LQ+Bold+12cpi

Моя строка полной инициализации принтера с русификацией и настройками шрифта как выше
echo -e "\x1b\x28\x74\x03\x00\x30\x0e\x00\x1b\x74\x00\x1b\x78\x31\x1b\x21\x09" | lpr -l

Пискнуть биппером принтера:
printf "\x07" | lpr -l
Напечатать строку из 40 случайных букв и цифр:
tr -dc a-zA-Z0-9 < /dev/urandom | fold -w 40 | head -1| lpr -l

Левая и правая границы строки  (29-31стр С21-C23  EPSON мануала)
Указать правую границу печати, то есть ширину бумаги. \x2d  это десятичное число 45, половина ширины А4.
После этой команды можно печатать строки любой длины, они автоматически будут переноситься при печати при выходе за указанную границу:
echo -e "\x1b\x51\x2d" | lpr -l

Но удобнее сразу писать в десятичной системе. Установим правую границу в 78 символов:
a=$(printf %02x $(( 78 ))) ;printf "\x1b\x51\x$a" | lpr -l # правая граница печати
Установить ЛЕВУЮ граници печати. Двумя границами можно центрировать текст.
a=$(printf %02x $(( 20 ))) ;printf "\x1b\x6c\x$a" | lpr -l # левая граница печати

Пропустить строку вверх, эквивалент кнопки LF/FF
echo -e "\x1b\x0d" | lpr -l

Прокрутить рулон на строку обратно вниз
printf "\x1b\x6a\x47" | lpr -l

Таким образом можно проверить точность позиционирования, пропечатать надпись поверх самой себя, сделав её жирнее жирногоbold, скомбинировать из двух символов один. Пример:
echo "( ШЕР )" | iconv -t CP866 | lpr -l
printf "\x1b\x6a\x23" | lpr -l
echo ") ШЕР (" | iconv -t CP866 | lpr -l
Чтобы исключить перевод строки, можно использовать printf вместо echo. Будь в примере ниже echo, буквы располагались бы по одной в строке, а так будут напечатаны как если бы это была одна строка: HELL.
printf "H" |lpr -l
printf "E" |lpr -l
printf "L" |lpr -l
printf "L" |lpr -l

Почему-то команда может очень долго идти на принтер
for i in {a..z}; do echo -n $i| lpr -l; done

Любопытный процесс печати текста:
for x in "Wake up, User", "The Windows has you...", "follow the GNU/Linux", 
"Knock, knock, User...";do sleep 2 && echo $x | lpr -l;done





Междустрочный интервал (line spacing)

В инструкции ESC/P Reference Manual.pdf эти команды описаны на страницах 59-68 (C-51...C-60) 
Немаловажный параметр для оформления текста. Чем он меньше, тем плотнее строки и больше текста на листе, но тем труднее он считывается. По умолчанию интервал между строк составляет 1/6-inch. 2.54 / 6 = 0.42333333333333334 см.

Выбрать стандартный 1/6" интервал, более плотный 1/8", и совсем без интервалов 7/72".
printf "\x1b\x32" | lpr -l # 1/6-inch line spacing
printf "\x1b\x30" | lpr -l # 1/8-inch line spacing
printf "\x1b\x317" | lpr -l # 7/72-inch line spacing. 9-pin printer only!

Также можно указать произвольный интервал в пределах n/180-inch, где n — 0..255. Например:
printf "\x1b\x33\x18" | lpr -l # 216-inch\nLine spacing

Кроме прямой функции это позволяет применять любопытные эффекты. Скрипт ниже пятикратно печатает слово SHADOW с увеличивающимся интервалом. Получается красивая тень:
for x in {1..5};do printf "\x1b\x33\x$(printf %x $x)SHADOW\n" | lpr -l; done


СИМВОЛЫ ПСЕВДОГРАФИКИ - ПЕЧАТЬ РАМОК

Чтобы оформить печать в текстовом режиме таблицами, на помощь приходят символы псевдографики:
┌ ─ ┬ ─ ┐    ╔ ═ ╦ ═ ╗    ╒ ╤ ╕    ╓ ╥ ╖
│░░░│░░░│    ║░░░║░░░║    ╞ ╪ ╡    ╟ ╫ ╢ ░ ▒ ▓ █ ▀▄ ▌▐
├ ─ ┼ ─ ┤    ╠ ═ ╬ ═ ╣    ╘ ╧ ╛    ╙ ╨ ╜
└ ─ ┴ ─ ┘    ╚ ═ ╩ ═ ╝

Поскольку рамки нужны, чтобы печатать их на принтере, лучше сразу выводить в кодировке CP866, а для вывода на экран использовать конвертацию. Напечатаем их всех в консоли так:
echo $(for x in {176..223}; do printf "\x$(printf %x $x)" ; done ;) | iconv -f CP866
Или так:
echo $(for x in $( seq $((16#B0)) $((16#DF)) ); do printf "\x$(printf %x $x)" ; done ;)
| iconv -f CP866

Теперь распечатаем эти символы на принтере так:
echo $(for x in {176..223}; do printf "\x$(printf %x $x)" ; done ;) | lpr -l
Или так:
echo $(for x in $( seq $((16#B0)) $((16#DF)) ); do printf "\x$(printf %x $x)"
; done ;) | lpr -l
Как можно заметить выше, iconv не используется, поскольку на принтер изначально идёт кодировка cp866.

Но это генерация, а как быть с печатью уже готового текстового файла с рамками? Во избежание неверной перекодировки полезно узнать, в какой кодировке записан печатаемый файл:
file -i filename.txt

Допустим команда показала, что файл text/plain; charset=utf-8. Тогда можно смело печатать с перекодированием для принтера в CP866:
cat filename.txt | iconv -t CP866 | lpr -l

Да, печатать рамки лучше всего жирным шрифтом, иначе вертикальные линии будут неровными из-за особенностей матрицы принтера.  Как я писал выше, можно выбрать: Select LQ Mode + Bold + 12cpi
echo -e "\x1b\x78\x31\x1b\x21\x09" | lpr -l



Ссылки:
  1. Язык управления принтерами Эпсон - https://epson.ru/upload/support/library/esc-p.pdf
  2. Матричные принтеры: зачем, для кого и как выбрать http://www.ls-comp.ru/matrix_printer/
  3. Epson Standard Code for Printers (ESC/P)  https://ru.wikipedia.org/wiki/ESC/P
  4. Матричный принтер https://ru.wikipedia.org/wiki/Матричный_принтер
  5. Epson FX Printer Codes http://lprng.sourceforge.net/DISTRIB/RESOURCES/PPD/epson.htm
  6. USER`s GUIDE Epson LX-300 9-pin Dot Matrix Printer (мануал на английском)
    http://files.support.epson.com/pdf/lx3pii/lx3pii00ug.pdf#page=1&view=FitV&pagemode=none):
  7. Русификация принтера Epson LX-300
    http://www.telsi-labs.ru/?q=rusifikaciya_printera_epson-lx300
  8. Немного истории: (14.12.1999) Некоторые аспекты русификации принтеров
    https://www.ixbt.com/peripheral/prn_rus.html
  9. how to: Disassemble LX-300+II (видео без звука) https://youtu.be/btfxeYuVAhI

Категория: GNU/Linux | Просмотров: 833 | Добавил: harushima | Рейтинг: 0.0/0 |
Всего комментариев: 10.

31.12.2020 08:16
1 harushima
0  
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.


31.12.2020 15:02
2 harushima
0  
Сбросить текущие настройки принтера и проинициализировать.
echo -e "\x1b@" | lpr -l


06.02.2021 04:30
3 harushima
0  
Градиентная полоска серого для подбора заливки при печати оттенков.
convert -size 2x20 gradient: -scale 4000% gradient.png
https://legacy.imagemagick.org/Usage/canvas/


04.04.2021 14:42
4 harushima
0  
файл на принтер:

cat FILE | iconv -c -t CP866 | lpr -o raw


02.05.2021 19:06
5 harushima
0  
printf "\x1b\x08" | lpr -l # репозиционировать ПГ на символ влево


19.05.2021 05:40
6 harushima


19.05.2021 05:55
7 harushima


29.07.2021 02:21
8 harushima
0  
Отвалилась служба принтера, восстановить:
sudo systemctl enable cups.service
sudo systemctl start cups.service


27.05.2022 02:09
9 harushima
0  
вывести характеристики принтера
lpoptions -p epson-lx-300p

# печатает на весь экран.
lp -d epson-lx-300p -n1 -o position=top -o scaling=100 -o media=A4.bl dm-r05.jpg

# уменьшить масштаб
lp -d epson-lx-300p -n1 -o position=top -o scaling=75 -o media=A4.bl dm-r05.jpg

# А так получается уменьшенная копия и печатается внизу листа
convert dm-r03.jpg -page A4 -gravity center ps:- | lpr -


27.05.2022 02:10
10 harushima
0  
# тоже не вариант, полезна только поглядеть формат post-script
tiff2ps -z -w 8.27 -h 11.69 dm-r05.jpg | lpr -

В целях защиты от спама, добавлять комментарии могут только зарегистрированные пользователи. Если Вы не хотите регистрироваться под своим именем, войдите под логином: anonymous, паролем: anonymous.   ( Регистрация,   Вход).
Авторизация
Анонимный вход:
anonymous / anonymous

Календарь
«  Декабрь 2020  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031

Поиск

Облако тэгов
JGSDF игрушки Брюнетки Кладбище сайты Ярость Дракулы Древний Египет девушки кошки Cthulhu Вампиры Kitsune Ужас Аркхема инструмент комиксы Lovecraft готика Submarine submarine rc toy Hosting игротека Ужас Аркхэма book uboat мобильная связь го Edgar Poe swf Mansions of Madness Nightmares персоны Synergy linux-hardware bash youtube Storages Python Мастер-рукожоп Магнитофоны Entropy Grub2 loglevel WiFi Beeline ОПСОСЫ sharp939 Аудиокассеты Windows linuxwork Хочуны ImageMagick топБарыг C64c Commodore

Статистика
Яндекс.Метрика
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Page QR code


Перепечатка материалов сайта без активной ссылки запрещена. Следить за RSS
(c) hermitlair.ucoz.com 2009-2024
Лучший браузер!
Блокировка рекламы