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

Понадобилось тут решить небольшую задачку: настроить печать с рабочей станции на 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

@JBFW
02.03.2025 00:35 UTC
Первоисточник

Комментарии

@Grey83
01.03.2025 21:00 UTC
0

А через box64 это бы не получилось бы сделать?
Он ставится без особых проблем, тем более на гитхабе есть уже собраные версии.

@Johan_Palych
01.03.2025 21:37 UTC
+1

Есть такой док:
https://wiki.debian.org/ru/Multiarch/HOWTO
How to use apt-get to download multi-arch library?
https://askubuntu.com/questions/430705/how-to-use-apt-get-to-download-multi-arch-library

dpkg --print-architecture
Добавить репы amd64 в /etc/apt/sources.list.d/multi-arch.list
sudo /bin/sh -c "dpkg --add-architecture amd64;apt-get update"
sudo apt install ./pantum_1.1.123-1_amd64.deb
dpkg --print-foreign-architectures
sudo dpkg --remove-architecture amd64

Полная распаковка пакета
dpkg-deb -R ./pantum_1.1.123-1_amd64.deb folder
Сборка пакета
dpkg-deb -b folder pantum-fixed_1.1.123-1_amd64.deb

@Grey83
01.03.2025 23:33 UTC
0

только ему нужны были arm64.deb, а не amd64.deb

02.03.2025 13:02 UTC
+2

Мдя
Использовал Armbian-20241125-unofficial_24.11.0-trunk_Transpeed-8k618-t_bookworm_edge_6.10.10_server.tar.gz
Все расписывать лень. Запускал на Debian 12 Bookworm amd64

mv -v Armbian-unofficial_24.11.0-trunk_Transpeed-8k618-t_bookworm_edge_6.10.10.img 8k618.img
sudo kpartx -av 8k618.img
sudo mount /dev/mapper/loop0p1 /mnt
sudo systemd-nspawn --bind-ro="/etc/resolv.conf" -M 8k618 -D /mnt
Запустился мастер настройки:пароль для root, создание пользователя, выбор локали

Добавляем amd64-архитектуру:

/bin/sh -c "dpkg --add-architecture amd64;apt-get update"
dpkg --print-foreign-architectures

После добавления архитектуры amd64, можно даже так поставить:
apt install cups:amd64
Брал тут Pantum.Ubuntu.Driver.V1_1_123.zip
Старт с сервисами:
sudo systemd-nspawn --bind-ro="/etc/resolv.conf" -M 8k618 -bD /mnt
apt install ./pantum_1.1.123-1_amd64.deb

02.03.2025 14:50 UTC
0

Я с линухом на своём боксе уже несколько месяцев не игрался: надоело.

А так и софт для amd64 запускал через box86/64.
И архитектуры добавлял (после установки этих самых box86/64).
Правда принтер подключать не пытался из-за отсутствиея оного.

В общем сейчас можно примерно за те же самые деньги купить какой-нибудь б/у мини-ПК для офиса с x86 или x64 архитектурой и не бороться с проблемами отсутствия софта под arm64.
И при сравнимой цене производительность будет не сильно отличаться (а то и повыше будет), зато при необходимости можно без особых проблем подключать ssd и память расширить.

02.03.2025 21:27 UTC
0

Места много занимает, гудит )

У боксов интересное свойство: они компактные. Сервер на гвоздике висит, десктоп к задней стенке монитора приклеен - вот как-то так.
Еще и электроэнергии почти не требуют (ну, кроме самого монитора).
Большое если брать - то для чего-нибудь типа "96 Гб RAM", ламу на нем гонять...

02.03.2025 23:19 UTC
0

гудит

Может владелец и да, но мини-ПК тихие обычно. Особенно безвентиляторные.

Например всякие Dell Optiplex, HP EliteDesk, Fujitsu Esprimo или Lenovo ThinkCentre с интеловским процем на 35Вт и имеющим индекс t, которые имеют габариты 180x180x35мм (т.е. размером с подставку обычного двадцатидюймового моника). В этих ещё стоит ноутбучный вентилятор, но без нагрузки он и включаться не будет.
Или вообще какой-нибудь Beelink на n95 размером с тот самый TVbox, а то и меньше его. У таких и вентилятора может не быть.

@Grey83
01.03.2025 23:55 UTC
0

Нашёл где я видел про установку box86/64:
https://habr.com/ru/articles/861844/
Есть и про сборку, и про установку из скомпиленых файлов.

@
02.03.2025 08:31 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
@JBFW
02.03.2025 08:31 UTC
0

Работает )
Вот сейчас за ним сижу, весьма удобно.

@apevzner
02.03.2025 10:15 UTC
0

У этого принтера заявлена поддержка AirPrint и Mopria,

Похоже, у него такая же проблема, как вот тут вот описано: https://github.com/OpenPrinting/cups/pull/826

Мне тогда не удалось протолкать этот патч в CUPS, но желающие могут руками приложить.

Кроме того, более-менее свежие версии ipp-usb (https://github.com/OpenPrinting/ipp-usb) тоже умеют "чинить" эту проблему при USB-подключении, подчищая ошибки в ответах принтера так, что CUPS начинает всё устраивать. Это я к тому, что если говорить про коробочку, то ipp-usb умеет самостоятельно делать всю работу этой коробочки, ему нужен только avahi-daemon, dbus и udev.

@Javian
02.03.2025 13:20 UTC
0

Эх, такое же бы для Canon LBP-1120. Но увы.

@JBFW
02.03.2025 13:25 UTC
+1

А вот это не пойдет? http://welinux.ru/post/4170/