Возникла идея печатать 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)
Поскольку каталог будет мониториться программой, видимость предоставлять не обязательно, и даже не желательно.
sudo sevice smbd restart
Все, на этом настройка линуксовой части закончена. Переходим к настройке винды.
Рекомендация: Все файлы, которые вы качаете из интернета проверяйте на virustotal.com . Это не защитит на 100 %, но вероятность заражения резко уменьшается.
В качестве виндового сервера печати я использовал «старушку» с win XP. Не принципиально. Можно выбрать любую клиентскую машину и поставить все на нее.
Ставим на нее все сетевые принтеры всех пользователей.
Устанавливаем 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)
Чтобы было меньше ошибок, рекомендую копировать названия принтеров:
На принтере клик правой кнопкой мыши, свойства
После того, как все настроено, нужно проверить все в «ручном режиме».
На Ubuntu Server, напечатаем какой-нибудь документ на принтер PDF.
Из под винды провинды проверим, что файл был создан \192.168.1.100pdfUser1
Пуск->Выполнить
Находим файл, который только что распечатали, и САМОЕ ГЛАВНОЕ пробуем его удалить.
Если файл защищен от записи, проверяем права доступа на папку и разрешение на запись в Samba.
До тех пор, пока файл не будет нормально удаляться из-под винды, программу PdfPrint.exe запускать нельзя, иначе принтер будет печатать это задание постоянно.
Если все удаляется — запускаем программу PdfPrint.exe и она начинает Работать. Для начала очень полезно просмотреть LOG программы (файл PdfPrint.log в каталоге программы PdfPrint).
Внимание, программа PdfPrint не отбражается в Taskbar, поэтому вырубить ее можно только через диспетчер задач (процесс PdfPrint.exe)
Напомню, что на новых операционках (7-10) программа, помещенная в автозагрузку может не запускаться автоматически, если не отключен UAC. Возможно программу можно запускать через планировщик задач.
Со временем, если программа будет кому-нибудь интересна, оформлю ее в виде windows-службы.
Интересная идея.
(1) kns77, Спасибо, идея, видимо, витала в воздухе.
Велосипед в кубе. Что мешает поставить принт-серверы и печатать напрямую?
В статье не указаны подводные камни этого «изобретения»:
1. Компьютеры с Windows должны быть членами домена или иметь одну и ту же учетную запись, указанную в ubuntu.
2. Сможет ли кто-то после Вас это решение поддерживать? Вы его задокументировали и вместе с исходниками отправили своему руководителю/работодателю?
Или это специально сделано, чтобы не уволили, а если уволят — то будут кланятся?
Подсчитайте время, потраченное на реализацию и установку этого «решения» и сравните со стоимостью самого простого принт-сервера.
P.S. У Вас в статье упоминаются принтеры HP — драйвера на linux есть на все модели. Единственное оправдание этого велосипеда — какой-нибудь GDI принтер типа Canon, Samsung и т.п., под который нет драйвера на linux. Но я бы в этом случае убедил бы руководство купить б/у HP, а эти принтеры продать как можно скорее.
(3)Demonster, спасибо за отзыв.
Отсутствие нескольких принтсерверов.
Только один компьютер (на котором размещена PdfPrint должен иметь учетную запись ubuntu Доступ к принтерам клиентов идет уже с него. При подключении принтеров пароли можно запоминать.
Именно это я и сделал, опубликовав статью на популярном сервисе.
Развертывание программы занимает час-полтора. Программу я писал в рабочее время. Я хороший администратор, свободного времени у меня много. Для фирмы это не стоит ничего.
У меня складывается ощущение, что статью читали Вы не очень внимательно 😉
Фирма развивалась постепенно. У меня большой зоопарк принтеров В основном Canon. Именно после попыток их настроить я и написал программу.
В моем городе не найти 10 Б/У принтеров HP.
Доброго времени суток. Попробовал данную идею реализовать, но дело в том что pdf файлы кидаются в папку по имени терминального *user*, а не в папку pdf. Соответственно ничего не печатается. Если в самбе указать путь /srv/samba/pdf*user* то все работает. Что я сделал не так?
(5) Ruvim, Все так и должно быть.
Допустим, у вас пользователь user_buh
Тогда файлы должны появляться в папке /srv/samba/pdf/user_buh
На виндовой машине в конфигурационном файле UserPrinter.ini должна быть запись
user_buh=Название_Вашего_Принтера.
Ну, и желательно посмотреть лог-файл PdfPrint.log в каталоге виндовой программы.
Если есть возможность, киньте сюда от последней записи » ### Start PdfPrint»
Дело в том что папки у меня создаются не в 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
Разобрался, в файле cups-pdf.conf по вышеприведенной инструкции нужно поменять опции Out /srv/samba/pdf${USER}, вот когда так прописать то пользовательские папки будут появляется около основной папки pdf, поменял на Out /srv/samba/pdf/pdf${USER}, папки пользователей стали создаваться в папке pdf (\192.168.2.117pdfpdfterm1) и все заработало. Спасибо.
И еще такой вопрос, у нас работа в браузере, ведется, вот при подключении через RDP страницы пролистываются с торможением, есть ли способ убыстрить как-то.
(8) Ruvim, Спасибо, мой косяк, пропустил слэш
опцию следует читать как Out /srv/samba/pdf/${USER}
Сейчас исправлю в тексте.
По-поводу браузера ничего сказать не могу. У меня работает так же как на локальной машине. Возможно что-то с драйверами видеокарты.
(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
(9) viptextil, Спасибо вам большое, за такие понятные инструкции, честно говоря я первый раз по вашей статье установил Ubuntu и настроил терминал. Все понятно. Сделал с первого раза. И еще один вопрос, правда по статье установка Ubuntu там выписали «но в терминале возникли проблемы с переключением языков клавиатуры. Для решения редактируем файл /etc/X11/Xsession» Проблема в том, что пользователи при отключении не выходят из системы, а просто закрывают RDP и при повторном подключении, язык ввода уже не переключается. С этим что-то можно сделать?
(11) Ruvim, Спасибо, конечно, но статья по установке терминального сервера не моя, а уважаемого
neomatrix , спасибо ему за это. Я тоже не решил проблему с русским языком, поэтому в панели быстрого запуска поставил кнопочку «Рус/лат», по которой выполняется команда setxkbmap -layout «us,ru» -model «pc105» -option «grp:ctrl_shift_toggle,grp_led:scroll» и объяснил бухгалтерии, что ее нужно нажимать, когда перестает переключаться язык.
Но это к теме не относится, это нужно обсуждать в комментах к установке терминального сервера.