ubuntu + 1Cv8 + winXP-7-8. Решение проблемы с печатью на расшаренные принтеры клиентов

Принтеров и операционок много, драйверов под Ubuntu на всех не хватает.
Возникла идея печатать cups-PDF, в расшаренную по smb папку. Написать программу под винду, которая будет мониторить эту папку и в зависимости от пользователя печатать *.pdf на принтер, указанный для данного пользователя. Текущая версия программы 1.3

Часть первая. Продолжение данной статьи читайте ubuntu + 1Cv8 + winXP-7-8. Печать на электронную почту

Спасибо людям, благодаря которым возникла данная статья: Atheist, Landre за дельные подсказки neomatrix, со статьи которого Установка терминального сервера на базе Ubuntu Server 12.04 LTS 64-bit для работы c платформой 1C 8.3 все и началось.

При переходе с Windows server  на Ubuntu возникли проблемы печати. Оказалось, что в отличие от винды драйвера под Ubuntu либо есть не всегда, либо работают плохо. Печать на расшаренные принтеры виндовых клиентов из-под Ubuntu — вообще отдельная тема.

Рекомендация: Если Вы только собираетесь переходить на Linux и есть возможность купить принтер — покупайте принтеры HP с сетевым интерфейсом (RJ-45) это избавит Вас от головной боли с печатью. Если принтеры уже куплены — читайте дальше.

Настраиваем Ubuntu Server: Предполагаем, что сервер имеет ip 192.168.1.100

Устанавливаем систему печати в PDF

sudo apt-get install cups-pdf

Устанавливаем Samba:

sud apt-get install samba samba-common system-config-samba

Если Вы ставили терминальный сервер поверх десктопной версии Ubuntu, следующие два пункта можете пропустить, если ставили поверх Ubuntu Server — нужно будет отключить защиту cups-pdf. Иначе невозможно будет изменить каталог назначения для pdf-файлов.

Устанавливаем набор программ для работы с apparmor

sudo apt-get install apparmor-utils

Отключение защиты для модуля usr.sbin.cupsd

sudo aa-complain /etc/apparmor.d/usr.sbin.cupsd

Создаем каталог для печати, который потом сделаем доступным для виндовых клиентов, и делаем его доступным для всех.

sudo  mkdir /srv/samba/pdf

sudo chmod -R 2777 /srv/samba/pdf

sudo chown -R root:sambashare /srv/samba/pdf

Далее редактируем файл /etc/cups/cups-pdf.conf

Для начала сохраняем резервную копию.

sudo cp /etc/cups/cups-pdf.conf /etc/cups/cups-pdf.conf.bak

Редактируем файл настроек cups-pdf

sudo nano /etc/cups/cups-pdf.conf

Далее в файле меняем опции:

Out /srv/samba/pdf/${USER}

Label 2

AnonUMask 0000

UserUMask 0000

Сохраняем файл и рестартуем cups.

sudo service cups restart

Далее Пуск->Настройки-Samba (У меня XFCE4)

Samba1

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

Samba2

 sudo sevice smbd restart

 Все, на этом настройка линуксовой части закончена. Переходим к настройке винды.

 


 

Рекомендация: Все файлы, которые вы качаете из интернета проверяйте на virustotal.com . Это не защитит на 100 %, но вероятность заражения резко уменьшается. 

 

В качестве виндового сервера печати я использовал «старушку» с win XP. Не принципиально. Можно выбрать любую клиентскую машину и поставить все на нее.

Ставим на нее все сетевые принтеры всех пользователей.

Printer1

 

Устанавливаем Foxit Reader. Foxit Reader должен быть версии не ниже 2.3. Именно старую версию я рекомендую использовать, потому что она меньше и быстрее. Вобщем, yandex в помощь.

 

Качаем архив old.viptextil.ru/Admin/PdfPrint/PdfPrint.zip

Программа портабельная. Распаковываем в какую нибудь папку.

Настройка программы сводится к редактированию двух INI-файлов.

Редактируем PdfPrint.ini

# BackupDir — если указать каталог, то после распечатки файлы будут переноситься в этот каталог (для отчетности)
# если BackupDir оставить пустым — файлы после распечатки будут удаляться.
BackupDir=

# PdfRootDir — каталог, в который сохраняет файлы cups-pdf, но только снаружи (с точки зрения винды)
# Если адрес линуксового сервера статический — рекомендую ссылаться на сервер через его IP
PdfRootDir=\192.168.1.100pdf

# Маска файлов, создаваемых cups-pdf (именно такая получается при опции Label 2 в cups-pdf.conf)
PdfMask=job_*.pdf

# Принтер по-умолчанию, именно на него будут отправляться все задания от новых пользователей и пользователей не указанных в UserPrinter.ini
DefaultPrinter=HP LaserJet P2050 Series PCL6

# Задержка между опросами PdfRootDir в секундах. Задержка отправки задания печати на принтер будет составлять 2-3 LoopDelaySec
LoopDelaySec=3

# Путь к программе FoxitReader.exe

FoxitReader=c:Program FilesFoxit SoftwareFoxit ReaderFoxitReader.exe

#текущее название программы mailsend

MailSend=mailsend1.18.exe

# настройки для gmail.com . Отправка почты осуществляется с ящика googlename@gmail.com
#MailParam=  -enc-type «7bit» -sub «PdfPrint ServName» -f googlename@gmail.com -ssl -port 465 -smtp smtp.gmail.com -auth -user googlename -pass «GoogleUserPass»

 
# настройки для mail.ru .  Отправка почты осуществляется с ящика mailuser@mail.ru
#MailParam=  -enc-type «7bit» -sub «PdfPrint ServName» -f mailuser@mail.ru -ssl -port 465 -smtp smtp.mail.ru -auth -user mailuser@mail.ru -pass «MailUserPass»

#настройки yandex.ru.   Отправка почты осуществляется с ящика yandexuser@yandex.ru
MailParam=  -enc-type «7bit» -sub «PdfPrint ServName» -f yandexuser@yandex.ru -ssl -port 465 -smtp smtp.yandex.ru -auth -user yandexuser@yandex.ru -pass «YandexUserPass»

# Примерный Размер лог-файла в килобайтах. Если 0 — лог файл не создается.
LogSizeKB=1000

# LogLevel 0,1,2,3 default 1. 0=no log, 1=status, 2=error, 3=debug
LogLevel=3

 

Редактируем файл UserPrinter.ini

 

User1=HP LaserJet P2050 Series PCL6
User2=user2@usermail.ru
User3=user3@usergmail.com
User4=HP LaserJet Professional M1212nf MFP
User5=HP LaserJet Professional M1212nf MF


Функционал программы, по отправке файлов на электронную почту описан во второй части статьи ubuntu + 1Cv8 + winXP-7-8. Печать на электронную почту.

User1, User2… User5 это пользователи терминального (и не только) сервера Ubuntu, которые печатают на принтер cups-pdf. Если печатает пользователь, не указанный в файле UserPrinter.ini, его файл буде отправлен на принтер по-умолчанию (указан в файле PdfPrint.ini)

Чтобы было меньше ошибок, рекомендую копировать названия принтеров:

На принтере клик правой кнопкой мыши, свойства

Printer2

 

После того, как все настроено, нужно проверить все в «ручном режиме».

На Ubuntu Server, напечатаем какой-нибудь документ на принтер PDF.

Из под винды провинды проверим, что файл был создан \192.168.1.100pdfUser1

Пуск->Выполнить

Выполнить

Находим файл, который только что распечатали, и САМОЕ ГЛАВНОЕ пробуем его удалить.

Если файл защищен от записи, проверяем права доступа на папку и разрешение на запись в Samba.

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

Если все удаляется — запускаем программу PdfPrint.exe и она начинает Работать. Для начала очень полезно просмотреть LOG программы (файл PdfPrint.log в каталоге программы PdfPrint).

Внимание, программа PdfPrint не отбражается в Taskbar, поэтому вырубить ее можно только через диспетчер задач (процесс PdfPrint.exe)

Напомню, что на новых операционках (7-10) программа, помещенная в автозагрузку может не запускаться автоматически, если не отключен UAC. Возможно программу можно запускать через планировщик задач.

Со временем, если программа будет кому-нибудь интересна, оформлю ее в виде windows-службы.

12 Comments

  1. kns77

    Интересная идея.

    Reply
  2. viptextil

    (1) kns77, Спасибо, идея, видимо, витала в воздухе.

    Reply
  3. Demonster

    Велосипед в кубе. Что мешает поставить принт-серверы и печатать напрямую?

    В статье не указаны подводные камни этого «изобретения»:

    1. Компьютеры с Windows должны быть членами домена или иметь одну и ту же учетную запись, указанную в ubuntu.

    2. Сможет ли кто-то после Вас это решение поддерживать? Вы его задокументировали и вместе с исходниками отправили своему руководителю/работодателю?

    Или это специально сделано, чтобы не уволили, а если уволят — то будут кланятся?

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

    P.S. У Вас в статье упоминаются принтеры HP — драйвера на linux есть на все модели. Единственное оправдание этого велосипеда — какой-нибудь GDI принтер типа Canon, Samsung и т.п., под который нет драйвера на linux. Но я бы в этом случае убедил бы руководство купить б/у HP, а эти принтеры продать как можно скорее.

    Reply
  4. viptextil

    (3)Demonster, спасибо за отзыв.

    Что мешает поставить принт-серверы и печатать напрямую?

    Отсутствие нескольких принтсерверов.

    1. Компьютеры с Windows должны быть членами домена или иметь одну и ту же учетную запись, указанную в ubuntu.

    Только один компьютер (на котором размещена PdfPrint должен иметь учетную запись ubuntu Доступ к принтерам клиентов идет уже с него. При подключении принтеров пароли можно запоминать.

    2. Сможет ли кто-то после Вас это решение поддерживать? Вы его задокументировали и вместе с исходниками отправили своему руководителю/работодателю?

    Именно это я и сделал, опубликовав статью на популярном сервисе.

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

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

    P.S. У Вас в статье упоминаются принтеры HP — драйвера на linux есть на все модели.

    У меня складывается ощущение, что статью читали Вы не очень внимательно 😉

    Единственное оправдание этого велосипеда — какой-нибудь GDI принтер типа Canon, Samsung и т.п., под который нет драйвера на linux. Но я бы в этом случае убедил бы руководство купить б/у HP,

    Фирма развивалась постепенно. У меня большой зоопарк принтеров В основном Canon. Именно после попыток их настроить я и написал программу.

    Но я бы в этом случае убедил бы руководство купить б/у HP, а эти принтеры продать как можно скорее.

    В моем городе не найти 10 Б/У принтеров HP.

    Reply
  5. Ruvim

    Доброго времени суток. Попробовал данную идею реализовать, но дело в том что pdf файлы кидаются в папку по имени терминального *user*, а не в папку pdf. Соответственно ничего не печатается. Если в самбе указать путь /srv/samba/pdf*user* то все работает. Что я сделал не так?

    Reply
  6. viptextil

    (5) Ruvim, Все так и должно быть.

    Допустим, у вас пользователь user_buh

    Тогда файлы должны появляться в папке /srv/samba/pdf/user_buh

    На виндовой машине в конфигурационном файле UserPrinter.ini должна быть запись

    user_buh=Название_Вашего_Принтера.

    Ну, и желательно посмотреть лог-файл PdfPrint.log в каталоге виндовой программы.

    Если есть возможность, киньте сюда от последней записи » ### Start PdfPrint»

    Reply
  7. Ruvim

    Дело в том что папки у меня создаются не в pdf, а рядом

    (6) viptextil, 20160411-103615 ### Start PdfPrint v1.2 freeware © viptextil.ru 2016

    20160411-103615 BackupDir=

    20160411-103615 PdfRootDir=\192.168.2.117pdfterm1

    20160411-103615 PdfMask=job_*.pdf

    20160411-103615 PdfRegMask=job_.*.pdf$

    20160411-103615 DefaultPrinter=HP Universal Printing PCL 5

    20160411-103615 FoxitReader=c:Progra~2Foxits~1Foxitr~1Foxitr~1.exe

    20160411-103615 LogSizeKB= 1000

    20160411-103615 LoopDelaySec= 3

    20160411-103615 LogLevel= 3

    20160411-103615 User=term1, Printer=HP Universal Printing PCL 5

    20160411-103615 User=pdfdkmc, Printer=HP Universal Printing PCL 5

    Reply
  8. Ruvim

    Разобрался, в файле cups-pdf.conf по вышеприведенной инструкции нужно поменять опции Out /srv/samba/pdf${USER}, вот когда так прописать то пользовательские папки будут появляется около основной папки pdf, поменял на Out /srv/samba/pdf/pdf${USER}, папки пользователей стали создаваться в папке pdf (\192.168.2.117pdfpdfterm1) и все заработало. Спасибо.

    И еще такой вопрос, у нас работа в браузере, ведется, вот при подключении через RDP страницы пролистываются с торможением, есть ли способ убыстрить как-то.

    Reply
  9. viptextil

    (8) Ruvim, Спасибо, мой косяк, пропустил слэш

    опцию следует читать как Out /srv/samba/pdf/${USER}

    Сейчас исправлю в тексте.

    По-поводу браузера ничего сказать не могу. У меня работает так же как на локальной машине. Возможно что-то с драйверами видеокарты.

    Reply
  10. viptextil

    (8) Ruvim, Измените опцию в файле /etc/cups/cups-pdf.conf

    на Out /srv/samba/pdf/${USER}

    в файле PdfPrint.ini задайте

    PdfRootDir=\192.168.2.117pdf

    в файле UserPrinter.ini задайте

    term1=Printer=HP Universal Printing PCL 5

    dkmc=HP Universal Printing PCL 5

    Reply
  11. Ruvim

    (9) viptextil, Спасибо вам большое, за такие понятные инструкции, честно говоря я первый раз по вашей статье установил Ubuntu и настроил терминал. Все понятно. Сделал с первого раза. И еще один вопрос, правда по статье установка Ubuntu там выписали «но в терминале возникли проблемы с переключением языков клавиатуры. Для решения редактируем файл /etc/X11/Xsession» Проблема в том, что пользователи при отключении не выходят из системы, а просто закрывают RDP и при повторном подключении, язык ввода уже не переключается. С этим что-то можно сделать?

    Reply
  12. viptextil

    (11) Ruvim, Спасибо, конечно, но статья по установке терминального сервера не моя, а уважаемого

    neomatrix, спасибо ему за это. Я тоже не решил проблему с русским языком, поэтому в панели быстрого запуска поставил кнопочку «Рус/лат», по которой выполняется команда setxkbmap -layout «us,ru» -model «pc105» -option «grp:ctrl_shift_toggle,grp_led:scroll» и объяснил бухгалтерии, что ее нужно нажимать, когда перестает переключаться язык.

    Но это к теме не относится, это нужно обсуждать в комментах к установке терминального сервера.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *