ITСooky

IT-рецепты съедобные и не очень!

Делаем не сетевой принтер-сканер — сетевым с USBIP для одного ПК на Ubuntu!

дата 27.07.2020

У меня принтер Kyocera FS-1125MFP нельзя сказать что он не сетевой, надо сказать что он хреновый сетевой принтер, и вообще не сетевой сканер(не выпендривайтесь покупайте всегда HP)! Ну что есть то есть, не покупать же каждый год новую модель принтера! Рядом с ним стоит старый ноутбук только ради сканирования, вот от него буду избавляться, чтобы по сети прокинуть USB порт с Kyocera FS-1125MFP на ПК с Ubuntu. Можно былобы и на Windows 10 сделать, тоже что и на Ubuntu — но Windows на столько не подходящая для этого ОС что даже пытаться не буду!


Отталкиваться буду от этой инструкции habr.com/ru/post/308860/ шикарно — понятно написано, думал это все что надо и не надо ничего дописывать мне, но как обычно всплывают нюансы!

Иду на свой домашний Linux сервер, им все еще работает Orange PI PC PLUS, и будет работать пока Raspberry не начнут ставить eMMC в себя!

На нем крутится Armbian

  ___  ____  _   ____   ____         
 / _ \|  _ \(_) |  _ \ / ___|    _   
| | | | |_) | | | |_) | |      _| |_ 
| |_| |  __/| | |  __/| |___  |_   _|
 \___/|_|   |_| |_|    \____|   |_|  
                                     
Welcome to Debian Stretch with Armbian Linux 4.19.62-sunxi
System load:   0.54 0.23 0.20  	Up time:       1:00 hour		
Memory usage:  24 % of 999MB  	IP:            192.168.1.209
CPU temp:      49°C           	
Usage of /:    43% of 7.1G 

Делаю
sudo apt-get update
sudo apt-get upgrade

И ставлю
sudo apt-get install usbip

Запускам
sudo modprobe usbip-core
sudo modprobe usbip-host
sudo usbipd -D

Смотрим что есть на USB, перед этим я подключил принтер к апельсинке по USB
sudo usbip list -l

- busid 4-1 (0482:0498)
   Kyocera Corp. : unknown product (0482:0498)

Есть! Теперь поделимся им
sudo usbip bind --busid=4-1

usbip: info: bind device on busid 4-1: complete

Смотрим что у нас повесилось на USBIP
usbip list -r localhost

Exportable USB devices
======================
 - localhost
        4-1: Kyocera Corp. : unknown product (0482:0498)
           : /sys/devices/platform/soc/1c1c000.usb/usb4/4-1
           : Miscellaneous Device / ? / Interface Association (ef/02/01)

То что надо было!

Чтобы нужные модули грузились сами добавляем в
vi /etc/modules
вот это

usbip-core
usbip-host

И добавляем в cron команду
sudo crontab -e
вот эту

@reboot  /usr/sbin/usbipd -D&&/usr/sbin/usbip bind --busid=4-1

Теперь сервер можно безболезненно перезагружать, а вот клиента…

Настраиваем USBIP на Ubuntu
Идем на клиентский Ubuntu и ставим
sudo apt install linux-tools-common
В этом сборнике есть USBIP, напрмяую однако не ставится, как на апельсинке

Активируем, тут нужен еще модуль vhci-hcd
sudo modprobe usbip-core
sudo modprobe usbip-host
sudo modprobe vhci-hcd
sudo usbipd -D

Подключаем
sudo usbip attach --remote=192.168.1.209 --busid=4-1

Смотрим что появилось
sudo usbip port

usbip: error: failed to open /usr/share/hwdata//usb.ids
Imported USB devices
====================
Port 00: <Port in Use> at High Speed(480Mbps)
       unknown vendor : unknown product (0482:0498)
       5-1 -> usbip://192.168.1.209:3240/4-1
           -> remote bus/dev 004/003

Оно! А тут вообще как родной по usb показывается!
lsusb

Bus 005 Device 003: ID 0482:0498 Kyocera Corp.

Принтер, кстати после attach сразу появился в Ubuntu, только драйвер неправильный, надо будет скачивать!

Вот тут качаю драйверы для Linux для FS-1125
http://www.kyoceradocumentsolutions.ae/index/contact_support/dlc.false.driver.FS1125MFP._.EN.html#

Принтер начинает печатать после того как даю ему правильный PPD файл. Причем если раньше по сети из под Ubuntu нельзя было напечатать файлы с названием на русском — теперь они стали печататься!!!

Драйверы для сканера устанавливаю кликом на kyocera-sane_1.1.0228_amd64.deb
После этого сканер начинает определятся
sudo scanimage -L

device `kyocera:libusb:005:003' is a Kyocera FS-1125 multi-functional device

Simple Scan все равно не видит принтер, перезагружаюсь!

И тут вскрылся нюанс! После перезагрузки клиента Ubuntu не могу подключиться к принтеру по USBIP, порт на сервере как бы занят как бы завис, чтобы его освободить на сервере надо пере подключить!
sudo usbip unbind --busid=4-1
sudo usbip bind --busid=4-1

На клиенте Ubuntu надо повторить все шаги выше, чтобы подсоединить USBIP!

И после этого Simple Scan начинает сканировать

Заставляем USBIP работать автоматом на Ubuntu
Надеемся что IP USBIP сервера меняться не будет, и USB там никто не будет передергивать! Поэтому надо решить одну проблему — чтобы Ubuntu клиент перед выключением или перезагрузкой, отключался от USBIP сервера и после загрузки подключался!

crontab не поможет, будем делать через systemd

Идем в свою папку у меня это /home/alexandr

Делаем скрипт
vi .usbip_script_start
с текстом

#!/bin/sh
sudo modprobe usbip-core
sudo modprobe usbip-host
sudo modprobe vhci-hcd
sudo usbipd -D
sudo usbip attach --remote=192.168.1.209 --busid=4-1

Делаем его исполняемым
sudo chmod +x .usbip_script_start

Еще делаем скрипт
vi .usbip_script_stop
С текстом

#!/bin/sh
port=`sudo usbip port | grep "Port in Use" | awk -F '[ ]|:' '{print $2}'`
sudo usbip detach --port=$port

Тут порт немного интерактивно определяем, но надеемся что одно всего у нас подключение USBIP
делаем его исполняемым
sudo chmod +x .usbip_script_stop

Теперь делаем вот тут
sudo vi /etc/systemd/system/usbip_start_and_stop.service
Скрипт с таким текстом с текстом

[Unit]
Description=Run Scripts at Start and Stop
Wants=network-online.target 
After=network-online.target 

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/alexandr/.usbip_script_start
ExecStop=/home/alexandr/.usbip_script_stop

[Install]
WantedBy=multi-user.target

Тут пишите свою папку, и тут есть указания на то чтобы network был жив когда скрипт запускается

Запускаем его
sudo systemctl start usbip_start_and_stop.service
и ставим на автозапуск
sudo systemctl enable usbip_start_and_stop.service

Теперь можно спокойно выключаться и перезагружаться, порт на USBIP сервере не будет блокироваться!


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *