Skip to content

Instantly share code, notes, and snippets.

@gregsonar
Last active June 3, 2026 16:01
Show Gist options
  • Select an option

  • Save gregsonar/6c36a306deaf41fdeeb836cf9b36825d to your computer and use it in GitHub Desktop.

Select an option

Save gregsonar/6c36a306deaf41fdeeb836cf9b36825d to your computer and use it in GitHub Desktop.
Подробное руководство по подключению принтера Brother DCP-T220 к домашней сети через CUPS и одноплатный компьютер на базе ARM64

Brother DCP-T220 - сетевой принт-сервер на Orange Pi (ARM64)

03.06.2026

Подробное руководство по подключению принтера Brother DCP-T220 к домашней сети через одноплатник на базе ARM64. Позволяет печатать с любого устройства в сети (Mac, Windows, Linux, iPhone, Android) без прямого USB-подключения к принтеру. Инструкция писалась с применением ИИ, но параллельно с решением проблемы на практике, так что предлагаемое решение проверено и полностью работает.

Конфигурация, на которой я проверял решение:

  • Принтер: Brother DCP-T220 (только USB подключение, без сетевых интерфейсов)
  • Одноплатник: Orange Pi 3b (Rockchip RK3566, aarch64)
  • ОС: Ubuntu 20.04.6 LTS (Focal Fossa)

Перейти сразу к делу: Пошаговая установка

Возможные проблемы: Диагностика проблем

Так же я нашёл другое, более простое решение с IPP over USB, которое у меня не заработало: Другое существующее решение


Суть проблемы

Brother DCP-T220 - бюджетный струйный принтер без Wi-Fi и сетевого порта. Официальный драйвер Brother для Linux поставляется только в виде i386-бинарника (можно взять вот тут: https://support.brother.com/g/b/downloadtop.aspx?c=as_ot&lang=en&prod=dcpt220_all ), который физически не запускается на ARM64.

Что не работает и почему

Подход 1: Generic IPP Everywhere - упоминается в интернете и выглядит как "простое решение". На практике не работает с DCP-T220: принтер не поддерживает протокол IPP over USB на аппаратном уровне. Демон ipp-usb обнаруживает принтер, но не может установить IPP-соединение (Device initialization timed out в бесконечном цикле).

Подход 2: Официальный Brother PPD без обёртки - CUPS принимает задание, статус меняется на "completed", но принтер ничего не печатает. В логах:

sh: 1: /opt/brother/Printers/dcpt220/lpd/brdcpt220filter: Exec format error
Sent 0 bytes...

Фильтр brdcpt220filter - i386 ELF-бинарник, который падает с ошибкой архитектуры.

Рабочее решение: запустить i386-бинарники через эмулятор qemu-i386-static с вручную установленными i386-библиотеками.


Архитектура решения

Клиент (Mac/Win/Linux/телефон)
        ↓  IPP / AirPrint / Bonjour
    CUPS (порт 631)
        ↓  PPD: brother_dcpt220_printer_en.ppd
    brother_lpdwrapper_dcpt220  (Perl-скрипт)
        ├── brprintconf_dcpt220  (обёртка → qemu → i386-бинарник)
        └── filter_dcpt220  (Perl-скрипт)
              ↓  Ghostscript: PostScript → PPM-растр
              ↓  brdcpt220filter  (обёртка → qemu → i386-бинарник)
              ↓  Brother-формат по USB
    Принтер Brother DCP-T220

Ghostscript растеризует PostScript в PPM-растр. Затем brdcpt220filter конвертирует растр в проприетарный Brother-формат и отправляет на принтер по USB. Оба i386-бинарника (brdcpt220filter и brprintconf_dcpt220) запускаются через qemu-i386-static с набором i386-библиотек из Ubuntu.


Пошаговая установка

Шаг 1. Базовые пакеты

sudo apt update
sudo apt install -y cups cups-filters avahi-daemon ghostscript \
                   qemu-user-static wget

Примечание: изначально я пробовал настройку с помощью ipp-usb, но в моём случае это не получилось. Кроме того, важно знать, что в Ubuntu 20.04 (Focal) этот пакет отсутствует в репозиториях (появился в 21.04). Есть Snap-версия, но она вовсе отказалась работать.

Шаг 2. Включить и настроить CUPS

# Включить службы
sudo systemctl enable --now cups avahi-daemon

# Разрешить удалённое управление и расшаривание
sudo cupsctl --remote-admin --remote-any --share-printers

# Добавить текущего пользователя в группу администраторов CUPS
sudo usermod -aG lpadmin $USER

Открыть нужные порты, если используется ufw:

sudo ufw allow 631/tcp   # CUPS / IPP
sudo ufw allow 5353/udp  # mDNS / Bonjour (AirPrint)

Шаг 3. Установить официальный драйвер Brother

Прямые ссылки на .deb на сайте Brother могут периодически меняться. Страница скачивания доступна вот тут: https://support.brother.com/g/b/downloadlist.aspx?c=as_ot&lang=en&prod=dcpt220_all&os=128 Кроме этого, доступны два надёжных способа:

Способ А - через RPM + конвертация в deb (рекомендуется)

URL .rpm-пакета стабилен и общеизвестен. Конвертируем его в .deb утилитой alien:

sudo apt install -y alien

# Скачать RPM-пакет (версия 3.5.0-1, проверено)
wget "https://download.brother.com/welcome/dlf105163/dcpt220pdrv-3.5.0-1.i386.rpm" \
     -O /tmp/dcpt220pdrv.rpm

# Конвертировать в deb
cd /tmp
sudo alien --to-deb --scripts dcpt220pdrv.rpm

# Установить (--force-architecture обязателен на ARM64)
sudo dpkg -i --force-architecture dcpt220pdrv*.deb

Способ Б - через официальный linux-brprinter-installer

Для начала вам будет нужно скачать официальный Driver Install Tool https://support.brother.com/g/b/downloadhowto.aspx?c=as_ot&lang=en&prod=dcpt220_all&os=128&dlid=dlf006893_000&flang=4&type3=625 (это должен быть .gz архив) или попробовать сделать это через wget (версия архива зашита в URL и актуальна на момент написания инструкции):

# Скачать установщик (проверьте наличие актуальной версии, но как минимум 2.2.3-1 работала)
wget "https://download.brother.com/welcome/dlf006893/linux-brprinter-installer-2.2.6-0.gz" \
     -O /tmp/linux-brprinter-installer.gz
cd /tmp
gunzip linux-brprinter-installer.gz

# Пропатчить для ARM64 (на случай если скрипт не включает --force-architecture)
sed -i 's/dpkg -i /dpkg -i --force-architecture /g' linux-brprinter-installer-2.2.6-0

# Запустить; на вопрос "Will you specify the DeviceURI?" ответить: No
sudo bash linux-brprinter-installer-2.2.6-0 DCP-T220

Если ссылка на установщик устарела - актуальную версию найти на support.brother.com → DCP-T220 → Linux (deb) → "Driver Install Tool".

Убедиться что драйвер установился:

dpkg -l | grep -i brother
# Ожидаемый вывод: ii  dcpt220pdrv:i386  3.5.0-1  i386  Brother Printer Driver

ls /opt/brother/Printers/dcpt220/lpd/
# Должны быть: brdcpt220filter, brprintconf_dcpt220, filter_dcpt220, i686/

Шаг 4. Подготовить i386-окружение для qemu

qemu-i386-static умеет запускать i386-бинарники, но для динамически слинкованных исполняемых файлов нужны i386-версии системных библиотек.

# Создать директорию для i386-библиотек
sudo mkdir -p /opt/i386-root

# Найти актуальный deb-пакет libc6 для i386 в репозитории Ubuntu
curl -s "http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/" | \
  grep -o 'libc6_[0-9][^"]*_i386\.deb' | sort -V | tail -3

Из вывода взять имя последнего файла (например libc6_2.42-0ubuntu3.1_i386.deb) и скачать его:

LIBC_DEB="libc6_2.42-0ubuntu3.1_i386.deb"   # ← подставить реальное имя из вывода выше

wget "http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/${LIBC_DEB}" \
     -O /tmp/libc6_i386.deb

sudo dpkg-deb -x /tmp/libc6_i386.deb /opt/i386-root/

В новых версиях Ubuntu библиотеки лежат в /usr/lib/, а не в /lib/. Нужно создать совместимые симлинки:

sudo mkdir -p /opt/i386-root/lib
sudo ln -sf ../usr/lib/i386-linux-gnu /opt/i386-root/lib/i386-linux-gnu
sudo ln -sf /opt/i386-root/usr/lib/i386-linux-gnu/ld-linux.so.2 \
            /opt/i386-root/lib/ld-linux.so.2

Проверка - ld-linux.so.2 должен быть виден:

ls -la /opt/i386-root/lib/ld-linux.so.2

Шаг 5. Создать qemu-обёртки для i386-бинарников

Оба бинарника Brother (brdcpt220filter и brprintconf_dcpt220) - симлинки на i386-файлы в i686/. Заменяем симлинки на shell-обёртки.

brdcpt220filter - основной растеризатор:

sudo rm /opt/brother/Printers/dcpt220/lpd/brdcpt220filter

sudo tee /opt/brother/Printers/dcpt220/lpd/brdcpt220filter << 'EOF'
#!/bin/bash
exec /usr/bin/qemu-i386-static -L /opt/i386-root \
  /opt/brother/Printers/dcpt220/lpd/i686/brdcpt220filter "$@"
EOF

sudo chmod +x /opt/brother/Printers/dcpt220/lpd/brdcpt220filter

brprintconf_dcpt220 - конфигуратор:

sudo rm /opt/brother/Printers/dcpt220/lpd/brprintconf_dcpt220

sudo tee /opt/brother/Printers/dcpt220/lpd/brprintconf_dcpt220 << 'EOF'
#!/bin/bash
exec /usr/bin/qemu-i386-static -L /opt/i386-root \
  /opt/brother/Printers/dcpt220/lpd/i686/brprintconf_dcpt220 "$@"
EOF

sudo chmod +x /opt/brother/Printers/dcpt220/lpd/brprintconf_dcpt220

Проверить что обёртки работают (должен появиться вывод справки или ошибка про аргументы - главное не Exec format error):

/opt/brother/Printers/dcpt220/lpd/brdcpt220filter 2>&1 | head -3
/opt/brother/Printers/dcpt220/lpd/brprintconf_dcpt220 2>&1 | head -3

Шаг 6. Добавить принтер в CUPS

# Убедиться что принтер виден по USB
lsusb | grep -i brother
# Ожидаемый вывод: Bus 00X Device 00X: ID 04f9:0474 Brother Industries, Ltd DCP-T220

# Добавить принтер с официальным PPD
sudo lpadmin -p Brother-DCP-T220 \
  -v "usb://Brother/DCP-T220?serial=<ВАШ_СЕРИЙНЫЙ_НОМЕР>" \
  -m "lsb/usr/Brother/brother_dcpt220_printer_en.ppd" \
  -E \
  -o printer-is-shared=true

# Включить принтер и разрешить задания
sudo cupsenable Brother-DCP-T220
sudo cupsaccept Brother-DCP-T220

Серийный номер узнать командой: lpinfo -v | grep -i brother - он будет в URI вида usb://Brother/DCP-T220?serial=XXXXXXXX

Шаг 7. Тест печати

echo "Test print" | lp -d Brother-DCP-T220

# Следить за статусом
lpstat -o
sudo tail -f /var/log/cups/error_log | grep -v ColorManager

Принтер должен напечатать страницу с текстом "Test print". Вы великолепны.


Подключение клиентов

После успешного теста принтер автоматически анонсируется в сети через Bonjour/mDNS.

macOS: Системные настройки → Принтеры и сканеры → +. Принтер появится автоматически. Либо вручную: добавить по IP → протокол IPP → адрес <IP одноплатника> → очередь /printers/Brother-DCP-T220.

iPhone / Android: Ничего настраивать не нужно. Принтер будет доступен в диалоге печати.

Linux: Принтер обнаружится автоматически через avahi. Ручное добавление: ipp://<IP>:631/printers/Brother-DCP-T220.

Windows: находится через диалог "Добавить принтер". Если нет, то "Добавить принтер" → "Принтер не найден в списке" → добавить по адресу http://<IP>:631/printers/Brother-DCP-T220, протокол IPP.


Диагностика проблем

Принтер не найден по USB

lsusb | grep -i brother
# Если пусто - попробовать другой USB-порт или перезагрузить принтер

Задание уходит в completed, но ничего не печатается

Включить подробное логирование и повторить:

sudo cupsctl --debug-logging
echo "test" | lp -d Brother-DCP-T220
sudo grep -E "filter|backend|Exec|format|Sent" /var/log/cups/error_log | tail -20

Если видна строка Exec format error - обёртки созданы неверно или потеряли права на исполнение. Повторить шаг 5.

Если Sent 0 bytes - фильтр запускается, но не производит вывод. Проверить что i386-библиотеки на месте:

ls /opt/i386-root/lib/ld-linux.so.2
ls /opt/i386-root/usr/lib/i386-linux-gnu/libc.so.6

Принтер не виден в сети с других устройств

sudo systemctl status avahi-daemon
sudo systemctl status cups
# Проверить IP одноплатника
ip addr show | grep "inet "

Предупреждения ColorManager в логах

CreateProfile failed: org.freedesktop.DBus.Error.ServiceUnknown

Это предупреждения об отсутствии цветового менеджера colord. На печать не влияют. Можно устранить установкой colord, но это необязательно.


Структура установленных файлов

/opt/brother/Printers/dcpt220/
├── cupswrapper/
│   └── brother_lpdwrapper_dcpt220   ← Perl-скрипт, CUPS-фильтр
├── inf/
│   ├── brdcpt220func
│   ├── brdcpt220rc
│   ├── ImagingArea
│   └── paperinfij2
└── lpd/
    ├── brdcpt220filter              ← ЗАМЕНА: bash-обёртка → qemu → i686/
    ├── brprintconf_dcpt220          ← ЗАМЕНА: bash-обёртка → qemu → i686/
    ├── filter_dcpt220               ← Perl-скрипт (не менялся)
    └── i686/
        ├── brdcpt220filter          ← оригинальные i386 ELF-бинарники
        └── brprintconf_dcpt220

/opt/i386-root/                      ← i386 sysroot для qemu
└── usr/lib/i386-linux-gnu/
    ├── ld-linux.so.2
    ├── libc.so.6
    └── ...

Другое существующее решение

Я нашёл статью, где показано подключение этого принтера через IPP Generic Driver, но у меня не вышло повторить результат. Принтер не зочет работать с IPP over USB, но возможно, что дело в различиях прошивок или даже аппаратных ревизий. Для полноты информации добавлю:

Статья Use Your Brother Printer on LAN by Raspberry PI описывает два подхода для Raspberry Pi:

  1. Generic IPP Everywhere через CUPS - выбрать модель "Generic IPP Everywhere Printer (en)"
  2. IPP over USB через ipp-usb - отредактировать /etc/ipp-usb/ipp-usb.conf

Оба метода требуют чтобы принтер поддерживал IPP over USB на аппаратном уровне - то есть отвечал на HTTP-запросы через USB-интерфейс. В моём случае так не вышло. ipp-usb бесконечно получает Device initialization timed out, а Generic IPP Everywhere молча отправляет 0 байт.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment