Настройка принтера этикеток XPrinter на Linux в VMware Workstation
Пример для настройки в CentOS без графической оболочки, по аналогии можно настроить на любой ОС Linux.
Решаю специфичную задачу, из php нужно печатать этикетки с произвольным текстом по шаблону. Поскольку на мероприятии нельзя рассчитывать на стабильный интернет, а большая часть задач по автоматизации пересекается с веб-сайтом, приняли решение работать с виртуальной машиной на VMware.
XPrinter подойдут и для задач маркировки, под windows устанавливаются значительно проще. Остановился на модели XP-460B с шириной этикетки до 108 мм.
Поскольку настройкой Linux и подключением устройств к нему занимаюсь крайне редко, искал готовые мануалы по настройке, понял что самый простой способ подключить принтер через cups. У меня не получилось подключить принтер по USB, не помогли никакие манипуляции по советам в мануалах, только сломал виртуальную машину несколько раз.
Скачиваем драйвера с сайта производителя xprintertech.com, они идут одним архивом для Windows, Mac и Linux
Драйвера размещены на сайте для серии устройств, в моём случае 4 inch Label Printer Drivers. Как оказалась, XP-460B уже снят с производства, понял к какой серии он относится по хлебным крошкам похожей модели XP-470B.
Устанавливаем принтер в windows, включаем общий доступ
Для Linux в архиве 1 файл 4BARCODE. Это «2 в 1» файл, bash сценарий с tar архивом, который сам себя распаковывает и копирует драйвера в cups. В моём случае для распаковки нужен bzip2 (для серии 80 мм используется другой архиватор)
yum install cups
yum install bzip2
chmod 744 ./4BARCODE
sh ./4BARCODE
service cups start
Далее нужно открыть localhost:631 в браузере, для удобства делаю настройку, чтобы открыть из браузера в windows. Редактируем /etc/cups/cupsd.conf:
Listen localhost:631 меняем на Listen *:631
<Location />
Order allow,deny
Allow localhost
Allow 192.168.1.*
</Location>
<Location /admin>
Order allow,deny
Allow localhost
Allow 192.168.1.*
</Location>
Открываем ссылку в браузере по IP виртуальной машины, в моём случае 192.168.1.5:631/admin
Добавляем принтер (нужно ввести root и пароль)
Есть 2 варианта, которые мне удалось настроить, по протоколу LPD и через samba.
Для подключения по протоколу LPD, нужно включить службу в windows (Включение или отключение компонентов Windows), перезагрузить компьютер.
В настройках cups вводим lpd://192.168.1.52/Xprinter_XP-460B, где 192.168.1.52 — IP компьютера, на котором установлен принтер, Xprinter_XP-460B — название принтера в настройках общего доступа windows
Выбираем драйвер 4BARCODE => 4B-3064TA
В параметрах ничего не выбираем и не сохраняем! Я пробовал настроить размер этикетки, но тогда принтер по какой-то причине не работает. Размер этикетки можно задать в задании на печать.
Пробуем распечатать пробную страницу — готово!
Второй вариант. Нужно установить samba, запустить, перезапустить cups, тогда появится новый пункт подключения в cups, в настройках ввести строку вида smb://user:[email protected]/Xprinter_XP-460B. Где, user — пользователь в windows, у пользователя обязательно должен быть задан пароль, с пустым авторизация не проходит.
Когда всё получилось и принтер распечатал пробную страницу, задания можно отправлять через консоль:
В данном примере этикетка имеет размеры 100х100 мм, 2 мм подобраны экспериментально. Расстояние между этикетками 3 мм, но если выставить высоту 103 мм, происходит сдвиг ленты, неудобно отрывать этикетку. Недостаток протокола LPD — задания отправляются как на обычный принтер, формат ESC/P0S не отправляется на печать, сенсор не калибрует этикетки.
Дальше можно работать с принтером через php. Есть библиотеки для работы с cups, мне проще отправить команду в консоль через exec();
Поскольку ESC/P0S не работает, я решил сделать шаблоны в pdf через библиотеку tFPDF