Создаем принт-сервер "JetDirect" в среде Windows ("общий доступ" дает бесправный) #476070


#0 by smaharbA
Качаем тут и распаковываем в любую папку запускаем пакетный файл lpserver.bat если запустить без аргументов, то "jetDirect" будет на порту 9100 и печать на принтер по умолчанию. Параметры командной строки: lpserver.bat ["Имя принтера как в системе"] [номер порта] Если имя принтера содержит пробелы, то заключаем в кавычки, если в имени принтера присутствуют кавычки, то заменяем их на парные и тоже заключаем имя в кавычки. Номер порта может быть в десятичном, восьмеричном и шестнадцатиричном формате, к примеру: 9101, 021615 или 0x238D Восьмеричный начинается с символа 0..., шестнадцатиричный с 0x... Про netcat для windows читаем тут и тут (в последнем антивирус может ругнуться, но там все расписано, если сыкливо то по первой ссылке) По rawprint читаем тут Все... (будет не лениво уйду от нетката и равпринта, пакетник специально для показать то что в пакетниках многое возможно, по сути пакетник может быть всего из 4 строк)
#1 by Fragster
а оно по snmp статус отдавать будет?
#2 by Fragster
а на пакетниках - и морской бой писали..
#3 by Asmody
мсье знает толк в извращениях. а может еще и cups под виндой запустить?
#4 by Fragster
уто было бы круто. и принтеров 5 в пул объединить...
#5 by Asmody
делов-то: colinux+mingw+исходники+ много-много свободного времени и желания потрахаться с извращениями
#6 by Fragster
лучше бабу
#7 by Ковычки
неткат позволит и псевдо группировку делать ))
#8 by Asmody
такие извращения не каждая выдержит
#9 by Ковычки
сабж очень полезен линуксоидам, в нем ответ на "нерешаемое"
#10 by DjSpike
и в чем его полезность ?
#11 by Ковычки
Вы печатали на canon mf 3110 или еще какой panasonic 650 ? решение в линуксе аналогичное, не требует настроенной системы печати много бьется лбом о косяки капса и самбы, а ответ ужасно прост
#12 by Ковычки
и применяется не один год
#13 by DjSpike
Печатал, только использую другой костыль в видe redmon и gs864. Вот описание
#14 by DjSpike
Вот теперь интересно какой из вариантов лучше ???
#15 by Ковычки
не путай божий дар с яичницей, кстати по этому поводу все еще просче
#16 by DjSpike
И что из них божий дар а что яишница ???
#17 by smaharbA
решение в ссылке крайне убогое все решается либо в бакенд скриптах капса либо аналогией сабжу
#18 by smaharbA
+ и не нужен для этого никакой редмон
#19 by DjSpike
ладно попробуем, данное решение.  А что в данном случае надо будет прописывать на стороне cups , какой принтер указвать ?
#20 by smaharbA
на стороне капса как и в прописывается либо постскрипт принтер, либо пдф на схему socket://x.x.x.x:xxxx в приведенное решение (конечно лучше переписать на wsh) внедряют либо тот же gs либо adobe reader с выводом на печать соответствующим (вместо rawprint) либо делают вариант с бакенд скриптами капса, создают свою схему типо customprint://... и тут уже гибче, либо вывод на аналогию сабжа, либо на тот же общий доступ через smbclient В целом, сабж был не как готовое решение, а как пример возможности решения вопроса
#21 by smaharbA
с бакенд скриптами можно сделать и возможность создания пользователем нужного принтера без прав рута
#22 by Ковычки
добавлен джихост и печать из постскрипт и пдф
#23 by smaharbA
Версия дополненная и переработанная (объем 16 мегабайт) включает в себя ghostscript, позволяет печатать на socket://адрес:порт в форматах PostScript, PDF, PCL и RAW т.е. достаточно установить на клиенте принтер с дривером PostScript, PDF или PCL (для виндуз к примеру HP LaserJet 1200 PCL или любой другой) печатать будет на любой установленный на "сервере" принтер, даже самый виндовозный. проверено как "сервер печати" на windows XP/2003, как клиент на Mandriva,Windows XP/2003/7 Запуск без параметров найдет свободные порты начиная с 9100 и повешает на них имеющиеся принтеры, первый из свободных портов будет задействован для печати на принтер по умолчанию от чьего имени запущен пакетник (права на запуск и использование не нужны)
#24 by DjSpike
Спасибо за данную очень полезную вещь...  Попробовал понравилось больше чем вариант который я озвучивал в .     Подскажи а можно сделать так чтобы у пользователя не весело черное окно батника, и чтобы он запускался сразу при запуске системы....  ну т.е. оформить это как службу windows ?
#25 by smaharbA
дописываю некоторые исправления пакетника а запускать можно из шедулера от другого пользователя перепишу на скрипты и в пакетник и скриптовый вариант включу вывод в очередь печати источник печати и документ (для логирования) еще дополнение - сделаю "обратную" печать на принтер подключенный к линуксу непосредственно и не имеющий дриверов и бакендов для капса, это просто и сейчас реализуется, но думаю в один флакон загнать если хватит терпения то сведу батник и скрипт WSH и bash в один файл
#26 by smaharbA
на скриптах окон конечно не будет (диагностические может и сделаю) да еще - прикрутить надо и акробат ридер если установлен в системе проверять
#27 by DjSpike
Ждемс с нетерпением....
#28 by Ковычки
Версия 0.3, комбинированный пакетный файл, запускаться может и как пакетник и как JavaScript (без окна) изменены параметры запуска, порядок ключей значения не имеет, если не указывать ключ /all то слушатель будет только для одного принтера стартовать и стопать можно как в командном режиме так и в джабе. Подсказка минимальная, ссылок на свободные утили в коде пока нет.
#29 by Ковычки
*.**************************************************************** *.Использование как КОМАНДНОГО ФАЙЛА: *.lpserver.js.bat ["Имя Принтера"] [Номер Порта TCP] *.[/start | /stop | /restart | /status] [/all] [/js] *.[/all] - Использовать для всех принтерах. *.[/js] - Стартовать как JavaScript. *.[//b] - Включить тихий режим для JavaScript. *.[/restart] - Пока не реализовано. *.**************************************************************** *.Использование как JavaScript: *.wscript.exe/e:javascript lpserver.js.bat... *.**************************************************************** *.Если название Принтера включает символы ", то замените их на '. *.[/en | /ru] - Язык помощи. Без указания - язык системы. *.****************************************************************
#30 by DjSpike
файл по ссылке что-то не скачивается.
#31 by smaharbA
Не ту ссылку указал )) некоторое причесывание кода, возможность использовать в ключах как / так и -
#32 by smaharbA
снава не совсе то )) так правильно !
#33 by smaharbA
Отображение в диспетчере печати реальных данных кто и что печатает еще не реализовано
#34 by ildary
появится в будущих версиях?
#35 by smaharbA
обязательно
#36 by smaharbA
хотя пока даже метод restart не реализован )))
#37 by smaharbA
устранена досадная ошибка в последней версии, не верно определял тип выходного потока т.е. PS,PDF,PCL или RAW ((
#38 by smaharbA
издание четвертое дополненное и переработанное - исправлена досадная ошибка в таблице символов - сделано автоопределение utf8 кодировки в полях комментариев - изменена работа :unescape, декодирует как cp1251 так и utf8 - сделано "обрезание" файла, для определения параметров не по всему файлу - код пакетной части подробно комментирован, и может быть выведен новым ключем /rem - добавлена работа с .XPS - изменено определение типов файлов - добавлено логирование печати, виндуз для большинства дриверов логирует и имя и название документа - много повторяющегося кода вынесено в "процедуры" (метки), создан интересный механизм возврата значений из "процедур" для линук без изменений в ОС будет логирование только удаленного адреса если нужно сделать полное логирование надо добавить в /usr/lib/cups/backend примерно такой скрипт с именем socket.sh (есть в архиве) (URI принтера надо поменять с socket://x.x.x.x:91xx на socket.sh://x.x.x.x:91xx) #!/bin/sh LANG=ru_RU.UTF-8 tocode=utf-8 function recodes {    LANG=ru_RU.UTF-8    iconv -t $tocode | od -A n -w1024 -t x1 - | tr 'a-z' 'A-Z' | tr -d ' '    } backend=/usr/lib/cups/backend/`basename "$0" .sh` pspool=/var/spool/cups/tmp spool=$pspool/`basename "$0" .sh`.$RANDOM.spool if [ ! -d "$pspool" ]; then    mkdir -p "$pspool" 2> /dev/null fi cat >> "$spool" DEVICE_URI=`basename "$0" .sh`:${DEVICE_URI#*:} type=`file -ib $spool` title=`echo -n $3 | recodes ../qp | sed 's/ =/=20=/g; s/=//g' | tr -d ' '` user=`echo -n $2 | recodes ../qp | sed 's/ =/=20=/g; s/=//g' | tr -d ' '` if [ "${type%;*}" = "application/postscript" ]; then    sed 's/^%!PS-Adobe-3.0/%!PS-Adobe-3.0 %%For: <'"$user"'> %%Title: <'"$title"'> /g' "$spool" | `which ps2pdf` - - > $spool.pdf    sed 's/^%!PS-Adobe.*/%!PS-Adobe-3.0 %%For: <'"$user"'> %%Title: <'"$title"'> /g' "$spool" | "$backend" "$@"    ret=$? elif [ "${type%;*}" = "application/pdf" ]; then    sed 's/^%PDF.*/%PDF-1.4 %%For: <'"$user"'> %%Title: <'"$title"'>/g' "$spool" | "$backend" "$@" elif [ "${type%;*}" = "application/octet-stream" ]; then    (    echo -e 'x1b%-12345X@PJL'    echo @PJL COMMENT ""Username: <$user>; Filename: <$title>; `date +%d.%m.%Y`""    cat "$spool"    ) | "$backend" "$@"    ret=$? else    "$backend" "$@" < "$spool"    ret=$? fi rm -f "$spool" exit $ret (в общем - пишите письма)
#39 by smaharbA
будет дополнено ответом на запросы клиента при нахождении принтеров JetDirect так же ждет реализации двусторонний обмен, для получения всяких параметров, типа остатка тонера/чернил и прочего, отправки тестовой страницы принтера (не тестовой страницы системы печати) из линукса есть проблема печати документов содержащих разные размеры страниц
#40 by Ковычки
сделана "обратная печать", для печати на непосредственно подключенный к машмне принтер через "принтсервер" в сети, без наличия дриверов на машинке (ранне такое делалось, но ручками) пешите письма
#41 by DjSpike
Эх... очередное огромное спасибо.  На днях попробую.
#42 by Ковычки
"обратная печать" пока не выложена
#43 by Ковычки
плюсом написан простенький скрипт эмулирующий JetDirect в линуксе/бсд (на бсд еще не проверил) возможно обходиться и без этого скрипта просто "шведским ножом" или ncat из пакета nmap или просто в inetd/xinet.d но сделано для универсальности, на сколько возможно максимум не использовано внешних утилит (скрипт составной шел и перл, будем еще упрощать не теряя универсальности)
#44 by Ковычки
да строчка devices="/tmp/lp0 /tmp/lp1" лишняя, была для тестирования
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С