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.
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-версия, но она вовсе отказалась работать.
# Включить службы
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)Прямые ссылки на .deb на сайте Brother могут периодически меняться. Страница скачивания доступна вот тут: https://support.brother.com/g/b/downloadlist.aspx?c=as_ot&lang=en&prod=dcpt220_all&os=128
Кроме этого, доступны два надёжных способа:
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Для начала вам будет нужно скачать официальный 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/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Оба бинарника 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/brdcpt220filterbrprintconf_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# Убедиться что принтер виден по 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
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.
lsusb | grep -i brother
# Если пусто - попробовать другой USB-порт или перезагрузить принтерВключить подробное логирование и повторить:
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.6sudo systemctl status avahi-daemon
sudo systemctl status cups
# Проверить IP одноплатника
ip addr show | grep "inet "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:
- Generic IPP Everywhere через CUPS - выбрать модель "Generic IPP Everywhere Printer (en)"
- 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 байт.