ITСooky

IT-рецепты съедобные и не очень!

Печать по сети, с любых устройств, iPad, в PDF!

дата 07.02.2015

Да квази загогулина в названии не просто так, с любого принтера печатать не получиться, даже с как бы поддерживаемого тоже не получится — но процесс ниже описанный правильный и рабочий (если попадается удачный принтер). А пока же будем печать в PDF(причем по пиксельно) файлы чтобы хоть как-то можно было распечатать с iPad, забирать их с web сервера, ну и удалять чтобы не лежали вечно — безопасности для и пр!

20150207_153707000_iOS

Будем устанавливать на FreeBSD сервер CUPS разработку Apple для печати, вообще то для печати по сети ничего дополнительно не нужно но в Apple все через Apple так что установим!

Устанавливаем CUPS
cd /usr/ports/print/cups-base
make

Убрал Desktop Icons и главное чтобы внизу стояло MDNSRESPONDER

УДИВИТЕЛЬНО и нет этому оправдания. Но если устанавливать на FreeBSD CUPS без выбранной галочки MDNSRESPONDER оно не установится

make install

так же установим (кстати не кстати, но это еще один косячный момент)
cd /usr/ports/print/cups-filters

Тут еще одна странность… купс фильтр не установится. Потому что не установится poppler — выход — на XP poppler!

правим файл
vi MakeFile
закрываем там

#BUILD_DEPENDS= pdftops:${PORTSDIR}/graphics/poppler-utils
#RUN_DEPENDS=   pdftops:${PORTSDIR}/graphics/poppler-utils

make
make install

ставим PDF принтер
cd /usr/ports/print/cups-pdf
make
make install

А так же ставим вот это — добавляет драйверов принтеров
cd /usr/ports/print/foomatic-db
make
make install
cd /usr/ports/print/foomatic-filters
make
make install

вставляем на загрузку
vi /etc/rc.conf

cupsd_enable="YES"
avahi_daemon_enable="YES"

vi /usr/local/etc/cups/cupsd.conf

меняем тут слушать локалхост на IP сервера

Listen 192.168.2.200:631

и чтобы пустило доводим эти разделы до такого вида

# Restrict access to the server...
<Location />
  Order allow,deny
Allow all
</Location>

# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
Allow all
</Location>

И на всякий

  # Job-related operations must be done by the owner or an administrator...
  <Limit Create-Job Print-Job Print-URI Validate-Job>
    Order deny,allow
Allow all
 </Limit>

запускаем
/usr/local/etc/rc.d/cupsd start

заходим по адресу
http://IP_vashego_nashego_servera:631

и вот он CUPS
Начало_-_CUPS_1.7.3_-_2015-01-10_12.31.15

ВНИМАНИЕ: Но принтер Kyocera FS-1125MFP не работает с CUPS
но понимания процесса установки важен для раздела Устанавливаем принтер CUPS-PDF (Virtual PDF Printer)
просто прочитайте

Идем в Добавление принтеров и групп > Добавить принтер тут надо подождать и принять сертификаты — FireFox жутко ругается на безопасность. В конце концов запросит имя и пароль пользователя из группы whell — ну это root.

Опять жмем Добавить принтер и что удивительно CUPS находит мой принтер — проблемный FS-1125MFP (Kyocera FS-1125MFP)!
Добавить_принтер_-_CUPS_1.7.3_-_2015-01-10_12.38.58

Для начала надо найти драйвер для Linux это файл PDD мелкий на цать килобайт но без него не фуручит. На Российском сайте Kyocera его нет, но он есть на Европейском: http://www.kyoceradocumentsolutions.eu/index/service/dlc.false.driver.FS1125MFP._.EN.html
сам файл прячится в архиве по даресу /Linux/32bit/Global/English/Kyocera_FS-1125MFPGDI.ppd уф. Куча PPD драйверов есть на сайтп www.opendrivers.com, но наличии ссылки там не значит наличии файла драйверов(просто не дают скачать), а сам файл не гарантирует работоспособность! В моём случае даже наличие PDD для Kyocera FS-1125MFP от производителя не позволило печать через CUPS!!!!!

При установке надо обязательно выбрать Разрешить совместный доступ и подсунуть PDD файл
Добавить_принтер_-_CUPS_1.7.3_-_2015-01-10_14.38.51

Да кстати принтер после установки будет ругаться что нет вот этого /usr/lib/cups/filter/rastertokpsl этот файл вместе с драйверами идет создадим эту ппакуи положим его там
создаем папку
mkdir /usr/lib/cups/filter/
Копируем туда файл и даем ему права
chown root:wheel rastertokpsl
chmod 555 rastertokpsl

Теперь создаем файл который поможет находить наш принтер
cd /usr/local/etc/avahi/services
vi printer.service

добавляем текст

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
        <name>Kyocera1125MFP</name>
        <service>
                <type>_ipp._tcp</type>
                <subtype>_universal._sub._ipp._tcp</subtype>
                <port>631</port>
                <txt-record>txtver=1</txt-record>
                <txt-record>qtotal=1</txt-record>
                <txt-record>rp=printers/Kyocera1125MFP</txt-record>
                <txt-record>ty=Kyocera FS-1125MFP</txt-record>
                <txt-record>adminurl=http://192.168.2.200:631/printers/Kyocera1125MFP</txt-record>
                <txt-record>note=itcooky</txt-record>
                <txt-record>priority=0</txt-record>
                <txt-record>product=Kyocera FS-1125MFP</txt-record>
                <txt-record>printer-state=3</txt-record>
                <txt-record>printer-type=0x801046</txt-record>
                <txt-record>Transparent=T</txt-record>
                <txt-record>Binary=T</txt-record>
                <txt-record>Fax=F</txt-record>
                <txt-record>Color=T</txt-record>
                <txt-record>Duplex=F</txt-record>
                <txt-record>Staple=F</txt-record>
                <txt-record>Copies=T</txt-record>
                <txt-record>Collate=F</txt-record>
                <txt-record>Punch=F</txt-record>
                <txt-record>Bind=F</txt-record>
                <txt-record>Sort=F</txt-record>
                <txt-record>Scan=F</txt-record>
                <txt-record>pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf</txt-record>
                <txt-record>URF=W8,SRGB24,CP1,RS600</txt-record>
        </service>
</service-group>

И добавляем
cd /usr/local/etc/avahi/
vi avahi-daemon.conf

Страку

enable-dbus=no

а то не заработает

Стартуем
/usr/local/etc/rc.d/avahi-daemon start
Да и CUPS тоже
/usr/local/etc/rc.d/cupsd start

Берем iOS устройство типа iPad, заходим в Safari от туда можно распечатать, а вот из почты нельзя странно однако.
Слева жмем нехарактерный значок квадрат со стрелкой выходящую из центра через его верхнею грань наружу — нижний ряд проматываем до иконки Печать
20150118_080642000_iOS

И в Найти принтеры ищем принтер, он у меня в качестве недавнего
20150118_081035000_iOS

Установлено что принтер c родным PDD, не работает в следующих комбинациях:
IPad > CUPS на FreeBSD > Printer по сети > ничего
Ubuntu > CUPS на FreeBSD > Printer по сети > ничего
IPad > CUPS на Ubuntu > Printer по сети > вылезает лист с пятном на 1% от размера A4

Работает только на прямую
Ubuntu > Printer по сети > A4

Ну и черт с ним с Kyocera FS-1125MFP > вот не надо было покупать дешевый принтер хорошего производителя. Потому что хороший производитель чтобы сделать дешевый принтер злономерно его ухудшает. Хороший дешевый принтер может сделать только плохой производителей — который старается на все 100%!

Устанавливаем принтер CUPS-PDF (Virtual PDF Printer)
По шагам все точно также, только в качестве драйвера выбираем драйвер Generic CUPS-PDF Printer
Добавить_принтер_-_CUPS_1.7.3_-_2015-01-18_11.31.37

Файл AVAHI меняем
cd /usr/local/etc/avahi/services
vi printer.service

на

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
        <name>Virtual_PDF_Printer</name>
        <service>
                <type>_ipp._tcp</type>
                <subtype>_universal._sub._ipp._tcp</subtype>
                <port>631</port>
                <txt-record>txtver=1</txt-record>
                <txt-record>qtotal=1</txt-record>
                <txt-record>rp=printers/Virtual_PDF_Printer</txt-record>
                <txt-record>ty=Kyocera FS-1125MFP</txt-record>
                <txt-record>adminurl=http://192.168.2.200:631/printers/Virtual_PDF_Printer</txt-record>
                <txt-record>note=itcooky</txt-record>
                <txt-record>priority=0</txt-record>
                <txt-record>product=Virtual_PDF_Printer</txt-record>
                <txt-record>printer-state=3</txt-record>
                <txt-record>printer-type=0x801046</txt-record>
                <txt-record>Transparent=T</txt-record>
                <txt-record>Binary=T</txt-record>
                <txt-record>Fax=F</txt-record>
                <txt-record>Color=T</txt-record>
                <txt-record>Duplex=F</txt-record>
                <txt-record>Staple=F</txt-record>
                <txt-record>Copies=T</txt-record>
                <txt-record>Collate=F</txt-record>
                <txt-record>Punch=F</txt-record>
                <txt-record>Bind=F</txt-record>
                <txt-record>Sort=F</txt-record>
                <txt-record>Scan=F</txt-record>
                <txt-record>pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf</txt-record>
                <txt-record>URF=W8,SRGB24,CP1,RS600</txt-record>
        </service>
</service-group>

А так же в файле
vi /usr/local/etc/cups/cups-pdf.conf

правим строки на

### Key: AnonDirName
##  ABSOLUTE path for anonymously created PDF filesmkdir /usr/local/www/apache22/data/pdfprinter
chown www:www /usr/local/www/apache22/data/pdfprinter
##  if anonymous access is disabled this setting has no effect
### Default: /var/spool/cups-pdf/ANONYMOUS

AnonDirName /usr/local/www/apache22/data/pdfprinter

и

### Key: AnonUser
##  uid for anonymous PDF creation (this might be a security issue)
##  this setting has no influence on AnonDirName (see there)
##  set this to an empty value to disable anonymous
### Default: nobody

AnonUser www

незабываем создать папку
mkdir /usr/local/www/apache22/data/pdfprinter
chown www:www /usr/local/www/apache22/data/pdfprinter

Перестартуем
да и CUPS тоже
/usr/local/etc/rc.d/cupsd restart
/usr/local/etc/rc.d/avahi-daemon restart

Печатаем с iPad’а заглавную страницу сайта
Она не сразу появится в папке, вес таки большая, ждем, ждем, ждем…
Index_of_pdfprinter_-_2015-02-07_18.24.40

Появилась! Но нельзя сказать что cups-pdf печатает все корректно но буковки не пропали а это главное! Да и еще буковки получаются не буковами а пикселями — картинкой ээээээ ну да ладно!
(IT_320_241ooky)_-_241ooky.pdf_-_2015-02-07_18.24.51

И ура товарищи(по несчастью) мы можем печатать из iPad в печатаемый всеми формат, за ноль рублей(ой кто-то сейчас перевернулся)!

UPD: А и да. Удаляем файлы старее 20 минут из папки для печати чтобы они там не висели до бесконечности… За 20 минут можно этот файл или выкачать на мобилу или открыть с компа чтобы распечатать нормальным способом.

Добавляем
crontab -e

строку

*/20 * * * * /usr/bin/find /usr/local/www/apache22/data/pdfprinter -type f -mmin +20 -exec rm -f {} \; >/dev/null 2>&1