Настройка принтера этикеток 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>
      

      Добавляем 631 порт в firewall (или в iptables):

      firewall-cmd --zone=public --add-port=631/tcp --permanent
      firewall-cmd --reload
      
    • Открываем ссылку в браузере по IP виртуальной машины, в моём случае 192.168.1.5:631/admin

      Добавляем принтер (нужно ввести root и пароль)

    • Есть 2 варианта, которые мне удалось настроить, по протоколу LPD и через samba.

      1. Для подключения по протоколу LPD, нужно включить службу в windows (Включение или отключение компонентов Windows), перезагрузить компьютер.


        В настройках cups вводим lpd://192.168.1.52/Xprinter_XP-460B, где 192.168.1.52 — IP компьютера, на котором установлен принтер, Xprinter_XP-460B — название принтера в настройках общего доступа windows


        Выбираем драйвер 4BARCODE => 4B-3064TA


        В параметрах ничего не выбираем и не сохраняем! Я пробовал настроить размер этикетки, но тогда принтер по какой-то причине не работает. Размер этикетки можно задать в задании на печать.


        Пробуем распечатать пробную страницу — готово!
      2. Второй вариант. Нужно установить samba, запустить, перезапустить cups, тогда появится новый пункт подключения в cups, в настройках ввести строку вида smb://user:password@192.168.1.52/Xprinter_XP-460B. Где, user — пользователь в windows, у пользователя обязательно должен быть задан пароль, с пустым авторизация не проходит.

    Когда всё получилось и принтер распечатал пробную страницу, задания можно отправлять через консоль:

    lpr -P Xprinter_XP-460B -o media=Custom.100x102mm test.txt

    В данном примере этикетка имеет размеры 100х100 мм, 2 мм подобраны экспериментально. Расстояние между этикетками 3 мм, но если выставить высоту 103 мм, происходит сдвиг ленты, неудобно отрывать этикетку. Недостаток протокола LPD — задания отправляются как на обычный принтер, формат ESC/P0S не отправляется на печать, сенсор не калибрует этикетки.

    Дальше можно работать с принтером через php. Есть библиотеки для работы с cups, мне проще отправить команду в консоль через exec();

    Поскольку ESC/P0S не работает, я решил сделать шаблоны в pdf через библиотеку tFPDF

    require_once($_SERVER["DOCUMENT_ROOT"] . "/tfpdf/tfpdf.php");
    $w = 100;
    $h = 100;
    $number = 59;
    $pdf = new tFPDF('P', 'mm', [$w, $h]);
    $pdf->SetTitle('Information');
    $pdf->AddFont('Font', 'B', $_SERVER["DOCUMENT_ROOT"] . '/fonts/opensans-bold.ttf', true);
    $pdf->SetTextColor(0,0,0);
    $pdf->SetDrawColor(0,0,0);
    
    $pdf->AddPage('P');
    $pdf->SetDisplayMode('real','default');
    $pdf->Image($_SERVER["DOCUMENT_ROOT"]. '/images/logo_site.png',$w - 4 - 28,$h - 13,28.1,9.6,'');
    
    $pdf->SetFontSize(140);
    $pdf->SetXY(0,24);
    $pdf->Cell($w,$h - 45, $number,0,0,'C',0);
    
    $pdf->SetFontSize(1);
    $pdf->SetTextColor(255,255,255);
    $pdf->Write(0, $number);
    
    $pdf->Output('example.pdf','I');
    

    exec('php label.php | lpr -P Xprinter_XP-460B -o media=Custom.100x102mm');
    


    Готово. Убил на настройку 2 выходных, надеюсь, кому-то это будет полезно.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 2

      0
      Без дела лежит термопринтер (CMS-THERMO S1) phoenix contact, старый уже, драйвера только для x86, х64 в природе не существует.

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

    Самое читаемое