Чтобы сделать сетевой принтер/сканер из обычного, достаточно купить микрокомпьютер с одним USB разъёмом и WIFI. Стоимость такой доработки будет несравнима со стоимостью нового супер умного принтера/сканера с WIFI.
Купить микрокомпьютер легко - есть море разных моделей. Можно сэкономить и взять достаточно скромный по характеристикам. Лишь бы был USB порт, к которому можно подключить принтер.
Когда компьютер будет готов к использованию, на него можно установить дистрибутив linux. Скорее всего, будет только один рабочий вариант - операционная система "armbian" на основе дебиан. После её установки необходимо добавить некоторые программы. Рассмотрим на примере LaserJet M1005 MFP (это МФУ=принтер+сканер) от фирмы HP.
Устанавливаем программы и драйверы на микрокомпьютер:
apt install cups # управление принтером, удалённая печать
apt install foomatic-db # драйверы принтеров (мало для HP!)
apt install hplip # драйверы принтеров HP - проприетарные!
apt install mdns # нужно для приветствия по сети
apt install libnss-mdns # нужно для приветствия по сети
apt install avahi-daemon # нужно для приветствия по сети
После установки надо в файле /etc/nsswitch.conf в строке hosts добавить в конце "mdns4 mdns", вот так:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 mdns
Иначе avahi не будет правильно отдавать информацию всем в сети о том, что к серверу подключен принтер, который можно использовать по сети. Тогда придётся при добавлении принтера в систему любого ПК прописывать полный ip к принтеру, что утомительно. Да с телефона или планшета подключать принтер будет тяжелее...
Настроить сам принтер можно из командной строки, через утилту HP:
hp-setup -i
Но запускать её надо из-под простого пользователя, а не root! Для этого создайте пользователя:
adduser hp
Затем добавьте его в группы пользователей "scanner" и "plugdev" иначе он не будет видеть ни принтера, ни сканера. Обязательно перезагрузите систему, иначе изменения не применяется даже если разлогиниться и войти заново!
Затем необходимо настроить веб сервер для печати в файле /etc/cups/cupsd.conf. В нём надо поставить такие настройки:
Listen 0.0.0.0:631 # чтобы только ipv4 слушало
Browsing On
BrowseLocalProtocols dnssd
DefaultAuthType Basic
WebInterface Yes
<Location />
# разрешаем печать всем
Order allow,deny
Allow all
</Location>
<Location /admin>
# Разрешаем настраивать систему всем
# на время установки, потом уберём возможность.
Order allow,deny
Allow all
</Location>
После чего перезагрузить сервер:
systemctl restart cups
После чего заходим в сервер по адресу "ip_сервера:631" и в разделе "Администрирование" ставим галки в блоке "Сервер", в полях:
- Разрешить совместный доступ к принтерам, подключенным к этой системе
- Разрешить печать из интернет
Обе галки должны стоять.
Если принтер не добавился в систему через hp-setup, то можно добавить его через веб интерфейс.
Теперь можно пойти обратно в файл /etc/cups/cupsd.conf и убрать доступ к веб админ разделу:
<Location /admin>
AuthType Default
Require user @SYSTEM
</Location>
В файле /etc/avahi/avahi-daemon.conf можно отключить ipv6 так:
use-ipv6=no
Осталось перезагрузить сервисы и поставить их на автозагрузку:
systemctl enable avahi-daemon
systemctl enable cups
systemctl restart avahi-daemon
systemctl restart cups
Уже сейчас принтер должен появиться в сетевой окружении и можно делать тестовую печать. Но остаётся сканер. Для него надо сделать кое-что серьёзнее. Потребуется сайт, через который можно запускать сканирование и скачивать готовые файлы сканов. Готовое решение лежит у меня в репозитории:
Скачиваете, читаете инструкцию по установке, устанавливаете и настраиваете. Пользуетесь так:
- Подходите с мобильным телефоном или планшетом к сканеру.
- Открываете сайт сканера. Там жмете зелёную кнопку "Новое сканирование". Ждете.
- Скачиваете файл скана, который появится после завершения сканирования.
P.S.
Бонусом к статье правила iptables для принт сервера:
iptables -F
iptables -t mangle -F
iptables -X
iptables -Z
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --dport 67:68 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 5353 -j ACCEPT
iptables -A INPUT -p tcp --dport 67:68 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination :8080
iptables -A INPUT -p tcp --dport 631 -j ACCEPT
iptables -A INPUT -p icmp -m state --state NEW -j ACCEPT
iptables -t mangle -A PREROUTING -m state --state INVALID -j DROP
iptables -t mangle -A PREROUTING -p tcp ! --syn -m state --state NEW -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPTip6tables -P INPUT ACCEPT
ip6tables -F
ip6tables -t mangle -F
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP