LINUX.ORG.RU

Настройка Epson LX-1050+ в Debian 8

 


1

1

К ноутбуку через переходник USB→LPT подключен принтер. DIP-переключатели выставлены так: 1(1-5)→On 1(6)→Off 2(1-4)→Off. В настройках CUPS выбран драйвер «eps9high». Печать предполагается на формате A4. PPD-файл модифицирован с целью увеличения области печати до максимальной — изменены следующие строки:

*1284DeviceID: «DRV:Deps9high;» — изменение вроде не повлияло ни на что. Что дают параметры по умолчанию «R0,M0,F1,P0,TG» ?

*HWMargins: 0 0 0 0

*ParamCustomPageSize Width: 1 points 0 100000

*ParamCustomPageSize Height: 2 points 0 100000

*FoomaticRIPOptionSetting PageSize=A4: " -dDEVICEWIDTHPOINTS=595 -dDEVICEHEIGHTPOINTS=842"

*ImageableArea A4/A4: «0 0 595 842»

*PaperDimension A4/A4: «595 842»

Остальное не трогал. После включения принтера, вставки листа и нажатия кнопки «ON LINE» принтер втягивает лист так, что верхний край листа встает напротив головы. Но когда начинается печать, например пробная страница в веб-интерфейсе CUPS, принтер сначала прокручивает примерно 10 мм, т.е. переводит строку наверно сам, и получается верхнее поле, соответственно последняя строка на странице не печатается и принтер требует новый лист для нее, или страница на бумаге получается смещенной вниз.

Подскажите пожалуйста, есть ли команда принтера (<ESC>... ), которая открутит бумагу на строку назад перед началом печати каждой страницы? И куда эту команду вставить — в PPD-файл ? Или может быть еще как-то победить проблему?



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

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

Теперь добавил и напечатало, но открутка не отработала.

Может, как раз из-за того, о чем ты говорил? Пересбросить все с нуля и проверить?

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

сейчас перезагружусь

Не поможет. Я понял, кажется. Все неправильно. Нам надо добавлять echo уже после gs, а мы это делаем до. То есть нам на вход скрипта отмотки прет postscript, мы к нему лепим echo и он уходит в последний фильтр - в foomatic-rip, который на вход ждет postscript или pdf, а ему в начале какая-то хрень прет, он ее проглатывает. А нам надо как раз какой-нибудь postFilter, а не preFilter, то есть чтобы он уже к выводу foomatic-rip лепил отмотку. В общем, я тут еще подумаю.

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

Ага, есть идея, но надо быть уверенным, что foomatic-rip работает как стандартный фильтр. Попробуй в *cupsPreFilter в PPD прописать foomatic-rip, а в cupsFilter в PPD твой paperFeedBack (самая последняя версия).

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

А можно такой скрипт написать, который выполнит какую-нибудь команду (запись в порт), а после этого вызовет печать через CUPS ? И он должен выглядеть для системы как принтер...

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

Стало вот так

*cupsPreFilter:	"application/vnd.cups-postscript 100 foomatic-rip"
*cupsFilter:	"application/vnd.cups-postscript 100 paperFeedBack"
*cupsPreFilter:	"application/vnd.cups-pdf 0 foomatic-rip"
*cupsFilter:	"application/vnd.cups-pdf 0 paperFeedBack"

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

На бумаге вот это:

-en \x1B\x6A\xFF
теперь прокрутил бумагу, как обычно
и дальше — то что в печатаемом документе
т.е. команда пошла не в порт а на бумагу

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

Убери set -x. Это для debug я добавил. Это он пролез. И перегрузись на всяк случай, чтобы отмотка прошла гарантированно.

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

Убрал, но результат в точности тот же

А там точно не старые какие-то задания пролезли? Ты перегрузился? Принтер выключал? Если все так же, то покажи лог. Хоть гляну, что там.

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

Выключил принтер, перезагрузился. Напечаталось то что после echo в строке, потом лист прокрутился как обычно и напечатался документ.

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

Думаю. Пока выяснил, что foomatic-rip работает как стандартный фильтр CUPS, то есть может быть включен в цепочку фильтров:

SYNOPSIS
   General Options:
       foomatic-rip [-v] [-q] <mode-specific options>

   Spooler-less printing filter:
       foomatic-rip [-P <printer>  |  --ppd  <ppdfile> ]  [-J <jobtitle> ] [-o
        <option>=<value>  [...]]  [<files>]

   CUPS filter:
   ^^^^^^^^^^^^
       foomatic-rip <jobid> <user> <jobtitle> <numcopies> <options> [<file>]

Ну и дальше написано, что на вход принимает stdin, а на выход stdout. То есть вроде все верно пока.

It translates PostScript and PDF from standard input or a file to the printer's native language on standard output.

Предлагаю на завтра перенести, а то уже все - спать охота. Завтра, думаю, победим.

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

access_log

localhost - - [01/Aug/2016:00:19:49 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 236 Create-Job successful-ok
localhost - - [01/Aug/2016:00:19:49 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 6335 Send-Document successful-ok
localhost - - [01/Aug/2016:00:29:38 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 236 Create-Job successful-ok
localhost - - [01/Aug/2016:00:29:38 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 6335 Send-Document successful-ok
localhost - - [01/Aug/2016:00:37:09 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 236 Create-Job successful-ok
localhost - - [01/Aug/2016:00:37:09 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 6335 Send-Document successful-ok
localhost - - [01/Aug/2016:00:42:16 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 236 Create-Job successful-ok
localhost - - [01/Aug/2016:00:42:16 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 6335 Send-Document successful-ok
localhost - - [01/Aug/2016:00:45:13 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 236 Create-Job successful-ok
localhost - - [01/Aug/2016:00:45:13 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 6335 Send-Document successful-ok
localhost - - [01/Aug/2016:00:51:02 +0300] "POST / HTTP/1.1" 200 155 Cancel-Subscription successful-ok
localhost - - [01/Aug/2016:00:53:36 +0300] "POST / HTTP/1.1" 200 565 Create-Printer-Subscriptions successful-ok
localhost - - [01/Aug/2016:00:56:00 +0300] "POST / HTTP/1.1" 200 565 Create-Printer-Subscriptions successful-ok
localhost - - [01/Aug/2016:00:57:55 +0300] "POST / HTTP/1.1" 200 565 Create-Printer-Subscriptions successful-ok
localhost - - [01/Aug/2016:00:58:54 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 236 Create-Job successful-ok
localhost - - [01/Aug/2016:00:58:54 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 6335 Send-Document successful-ok
localhost - - [01/Aug/2016:01:02:00 +0300] "POST / HTTP/1.1" 200 565 Create-Printer-Subscriptions successful-ok
localhost - - [01/Aug/2016:01:04:33 +0300] "POST / HTTP/1.1" 200 565 Create-Printer-Subscriptions successful-ok
localhost - - [01/Aug/2016:01:09:49 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 236 Create-Job successful-ok
localhost - - [01/Aug/2016:01:09:49 +0300] "POST /printers/Epson_9_mid HTTP/1.1" 200 6335 Send-Document successful-ok

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

А эррор-лога на последних запусках и не было — последний был с номером [238] вроде. Я его выше выкладывал.

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

До принтера смогу добраться сегодня только после 22мск

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

Да. Слово echo не напечатал. Его содержимое пошло на печать.

Ну вот не могу никак понять, как код из скрипта мог попасть в принтер. Хоть убей. Кроме set -x еще могу предположить, что ты вместо echo -ne «\x1B\x6A\xFF» по ошибке вбил как echo "-ne \x1B\x6A\xFF". Тогда такое может быть.

$ echo -ne "\x30\x31\x32\n"
012
$ echo "-ne \x30\x31\x32\n"
-ne \x30\x31\x32\n
Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

Может быть мне удаленный рабочий стол включить или телнет?

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

Скрипт сейчас такой error_log пустой — все прекрасно

на печать отправляется из libre-word-а докумет с:

—                                                                                —
на бумаге имеем (в начале прокрутки нет) :
-en \x1B\x6A\xFF


(прокрутка ≈30мм)


—                                                                                —

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

Все, я понял. Скрипт, скорее всего, выполняется в dash. Замени #!/bin/sh в начале на #!/bin/bash. перезапусти сервис cups и пробуй.

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

Отлично!

Еще есть альтернативный вариант без cupsPreFilter. предполагаю, но надо потестировать. Создаешь скрипт foomatic-rip-ext, например. В PPD вписываешь *cupsFilter .... foomatic-rip-ext, а в скрипт кладешь что-то вроде:

#!/bin/bash

if [ -n "$6" ]; then 
    exec <"$6"
fi

echo -en "\x1B\x6A\xFF"
`dirname $0`/foomatic-rip "$1" "$2" "$3" "$4" "$5" -
exit 0

То есть получается такой враппер вокруг foomatic-rip. Умозрительно должен тоже заработать.

Я думаю, что еще можешь посмотреть в CUPS чего-нибудь на предмет, можно ли свой фильтр положить не в /usr/lib/cups/filter, а куда-нибудь в /usr/local. Мне все же кажется, что кидать свои файлы в /usr/lib как-то не очень. Хотя в данном случае это вкусовщина. А права должны быть строгими root:root и 755 из-за того, что никто левый, кроме админа, не должен садиться на поток принтера и смотреть, что печатается. Поэтому CUPS и ворчал на права и отказался запускать скрипт.

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

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

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

Блин, точно. А мы ведь не можем влезть в задание... Это плохо. Надо подумать, можно ли влезть в задание и в нужные места навставлять отмотку. Наверняка же там можно отловить момент, когда начинается новая страница. Если можно, то написать фильтр. Надо еще раз в систему команд EPSON погрузиться и глянуть, какая команда начинает новую страницу.

Или пока печатать по одной, если позволяет задача.

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

Я одного не пойму. Мы первопроходцы? Как люди раньше печатали на матричниках на форматной бумаге? Неужели в каждом офисе свой фильтр писали или бумагу откручивали? Это смешно по-моему.

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

Нет, ну почему? Никто не знает, кто и чего там для себя пишет. Я пока искал тут инфу про фильтры видел, как кто-то спрашивал, может ли он скомпилировать отдельно foomatic-rip, потому что ему надо его почему-то (или зачем-то) видоизменить.

Но тут надо в gs тогда влезать, в драйвер eps9high. Или еще есть фильтр в CUPS rastertoepson. Я вот им пользовался. В его код можно влезть и посмотреть.

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

Единственный вариант без этих перекомпиляций - понять по сгенерированному потоку команд, куда вставить отмотку и вставить ее в нужные моменты в задание. Это фильтром можно сделать без проблем. Главное знать куда.

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

Или на матричнике можно нормально печатать только из лексикона? Ну а графику как печатали тогда?

Делали документы, которые вмещались в printable area? Еще вариант - вставить нестандартный лист. Например, есть формат A4+ и A3+. Написать только в PPD про них.

https://www.quora.com/What-are-A3 -and-A4 -paper-sizes

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

Ну допустим у меня страница в либре-ворде. У нее поля 20х20х20х20. А на бумаге она получается смещенной вниз на еще ≈30 мм. В результате последняя строка уже на новом листе будет напечатана. Это очень подозрительно. Так не должно быть. Что-то не так в дефолтном обработчике или в переходнике USB→LPT.

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

когда бумага отматывается сильно? Когда ты уже отправил задание или когда принтер автономно отматывает при захвате бумаги, но задание еще не передано?

Написнао, что минимум 22 мм. Я не знаю, сколько он отступает, но, наверное, он отступает 8.5 мм , а потом еще 20. Получается где-то 30 мм

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

После отправки задания. Нормальное поле сверху — 20 мм. Но без грязного хака будет минимум 30. Неужели раньше никто не сталкивался с этим?

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

После отправки задания. Нормальное поле сверху — 20 мм.

Что это означает - Нормальное поле сверху"? Вот если ты вставил бумагу и нажал load page (или что там), то бумага протянется в принтер. Как сильно он протянет? Или ты вручную завичиваешь бумагу? Можно какую-нибудь текстовую последовательность передать и измерить, на каком расстоянии она от края будет (при помощи echo).

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

Я хотел сказать, что у документов поле сверху обычно 20 мм. А если я хочу напечатать гостовскую рамку, то вообще 5 мм. Даже первый вариант нормально не распечатается без грязного хака — на бумаге верхнее поле будет >30 мм. А должно быть так: принтер втянул на 5 мм, а потом сделал отступ не на 30, как он делает, а на 15, чтобы получилось 20 мм как на оригинале. И так как этого не происходит по дефолту, я делаю вывод, что что-то не так.

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

принтер втянул на 5 мм

Так на сколько он втягивает? Я все никак не могу добиться ответа. Вот без задания какие границы получаются? Проверить хотя бы так: вставить бумагу, она продвинется, потом в порт вогнать echo «111111111» > принтер. И измерить хотя бы примерно, где он печатать начал. Он не должен делать никаких отступов при этом. Сразу начнет.

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

Сам принтер втягивает на ≈8 мм. Это его собственный отступ всегда. Если отправить строку в порт, то начнет сразу печатать.

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

НУ это вроде согласуется с документацией. Там вроде идет речь о 8.5 мм. Ну? А раз поля у тебя 20, то он еще 20 откручивает и получается 28. Я правильно понимаю?

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

Сейчас у меня такого принтера нет, поэтому я не могу сказать, что должно произойти, но мне кжется, тебе надо не нулевые HWMargins указывать, а реальные (и ImagableArea тоже правильные задать). Это все в PPD. Тогда, полагаю, фильтр сможет учесть их и тогда сможет отмотать не 20 мм еще к 8 мм, а 12 мм, чтобы получить 20 мм в итоге. Но я могу не так понять. Из нулевых HWMargins он может посчитать, что надо все 20 мм отматывать.

И еще попробуй другой растеризатор. Вон в том PPD, который я прислал, там используется rastertoepson из CUPS, а не foomatic-rip. Вдруг результат другой будет.

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

И еще попробуй другой растеризатор. Вон в том PPD, который я прислал, там используется rastertoepson из CUPS, а не foomatic-rip. Вдруг результат другой будет.

Только в cupsModelNumber в PPD укажи 0 - это 9 pin, а 1 - это 24 иглы (который был у меня).

/*
 * Model numbers...
 */

#define EPSON_9PIN	0
#define EPSON_24PIN	1
#define EPSON_COLOR	2
#define EPSON_PHOTO	3
#define EPSON_ICOLOR	4
#define EPSON_IPHOTO	5
Zubok ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.