Как стать автором
Обновить

Настройка печати с рабочей станции arm64

Время на прочтение2 мин
Количество просмотров2.4K

Понадобилось тут решить небольшую задачку: настроить печать с рабочей станции на arm64 (бывший TV-бокс) на принтер Pantum 2500W, который хотя и сетевой, но требует драйвер, а драйвера соответственно только под x86.

И вот что получилось:

В системе уже установлена CUPS, но для печати на этот принтер, как уже сказано, одного ppd-файла недостаточно, нужен еще "фильтр", программа, которая есть исключительно под x86 (хотя и в 32/64 вариантах)

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

Логика простая: если для работы требуется запустить на arm64 программу для x86 - ее ведь можно запустить в эмуляторе! Скорость работы, конечно, не очень, но чтобы распечатать несколько страниц документа вполне достаточно.

Драйвера для этого конкретного принтера идут в

пакете "Pantum Ubuntu Driver V1_1_123.zip" на сайте производителя.
Если распаковать - внутри два deb-файла, для 32 и 64 систем. Поскольку нам понадобятся библиотеки CUPS с x86, а она у нас 64-битная - берем 64-битную версию.

dpkg --extract xxx.deb dir

В каталог dir распаковывается содержимое deb-файла.
Копируем нужные файлы:

cp "dir/usr/share/cups/model/Pantum/Pantum P2500W Series.ppd" /usr/share/cups/model/
cp "dir/usr/lib/cups/filter/pt2500Filter" /usr/lib/cups/filter

Пробуем запустить этот /usr/lib/cups/filter/pt2500Filter - он ответит что-то вроде EXEC format error - естественно, архитектура-то другая.
Устанавливаем эмулятор:

apt install qemu-system-x86 qemu-user qemu-user-static binfmt-support
update-binfmts --enable qemu-x86_64
update-binfmts --enable qemu-i386

Пробуем запустить снова: теперь ошибка "Not found /lib64/ld-linux-x86-64.so.2"
Логично, его нет.
Создаем каталог /usr/lib/x86_64-linux-gnu и делаем симлинк:

mkdir /usr/lib/x86_64-linux-gnu
ln -s /usr/lib/x86_64-linux-gnu /lib64

Потом смотрим, какие еще библиотеки нужны:

objdump -p pt2500Filter | grep NEEDED
NEEDED libcups.so.2
NEEDED libcupsimage.so.2
NEEDED libdl.so.2
NEEDED libc.so.2

А вот теперь надо заходить на x86 машину и копировать оттуда нужные библиотеки.
Это еще не все, там зависимостей много - поэтому напишем простой скрипт:

#!/bin/bash

libs=$((
for i in * ; do
  objdump -p ${i} | grep NEEDED
done
) | sort | uniq | awk '{ print $2 }')

for i in $libs ; do
  if [ ! -f ${i} ] ; then
    scp XX.XX.XX.XX:/usr/lib/x86_64-linux-gnu/${i} .
  fi
done

Положим его в каталог /lib64, и будем запускать до тех пор, пока все найденные зависимости не будут удовлетворены.
Запустим фильтр еще раз, теперь ошибка должна быть другой:

"ERROR: job-id user title copies options [file]"

А вот теперь подключаем принтер:

lpadmin -p Pantum2500W -E -v ipp://XX.XX.XX.XX -P "/usr/local/share/ppd/Pantum P2500W Series.ppd"
lpadmin -d Pantum2500W

И в общем-то всё, теперь он должен работать.
Это - для рабочей станции, но в принципе ничего не мешает взять похожую коробочку и по такой же схеме сделать из нее принт-сервер.
В этом случае нужно будет просто подключать с рабочих компьютеров этот принтер уже через принт-сервер, как IPP Everywhere

Теги:
Хабы:
Всего голосов 16: ↑16 и ↓0+22
Комментарии13

Публикации

Ближайшие события