Серверная часть
Ставим пакет:
$ sudo apt-get install usbipДобавляем необходимые модули ядра в автозапуск:
$ sudo nano /etc/modules...
usbip
usbip_common_mod
...Добавляем демона в автозапуск:
$ sudo cp /etc/init.d/skeleton /etc/init.d/usbipd$ sudo nano /etc/init.d/usbipd...
DESC="USBIP daemon"
NAME=usbipd
...
DAEMON_ARGS="-D"
...
$ sudo chmod 755 /etc/init.d/usbipd$ sudo update-rc.d usbipd defaultsПерезагрузимся (хотя это и не обязательно, т.к. можно вручную запустить модули и демона)
$ sudo shutdown -r nowЧтобы посмотреть какие модули загружены в системе:
$ lsmodЧтобы посмотреть текущие процессы:
$ ps auxПодсоединяем наше устройство и смотрим какой у него Vendor/Device ID:
$ lsusbТеперь по этому Vendor/Device ID выясняем позицию на шине:
$ sudo usbip_bind_driver --listДаем доступ к устройству:
$ sudo usbip_bind_driver --usbip 3-1Клиентская часть (Windows)
Качаем клиента - http://sourceforge.net/projects/usbip/files/usbip_windows/
Распаковываем в удобное место. Устанавливаем вручную драйвер.
Смотрим какие устройства доступны на нашем сервере:
C:\usbip\usbip.exe -l <server_ip>Подключаем нужное устройство:
C:\usbip\usbip.exe -a <server_ip> <USB-ID>C:\>C:\RunAsService\runasservice.exe install "USBIPKey" "C:\USBIP\usbip.exe" "-a <server_ip> <USB-ID>"Та реализация была "неочень". Появилась идейка получше:
Для автоматизации подключения устройств в "Планировщике заданий" каждые 5 минут запускается скрипт, который проверяет запущены ли нужные соединения.
Для отправки команд на сервер понадобится plink.exe из состава PuTTY.
На сервере, чтобы
sudo не спрашивал пароль, нужно поправить файл sudoers:$ sudo visudo...
usbadmin ALL=NOPASSWD:/usr/sbin/usbip_bind_driverЗапись лучше добавлять в самый конец, т.к. приоритет у правил по порядку следования.
Сам скрипт на PowerShell:
#usbip client autoconnect script
#v 0.2.1
$usbipExePath = "C:\usbip\usbip.exe"
$plinkExePath = "C:\usbip\plink.exe"
$usbServerIp = "192.168.16.61"
$usbDevices = @("3-1")
$processes = Get-WmiObject Win32_Process -Filter "Name like '%usbip%'" | select-Object CommandLine
foreach ($device in $usbDevices) {
    $deviceIsConnected = $false
    foreach ($process in $processes) {
        if ($process -match " -a $usbServerIp $device") {
            $deviceIsConnected = $true
        }
    }
    if ($deviceIsConnected -eq $false) {
  #reexport device on USBIP-host
  [Diagnostics.Process]::Start("$plinkExePath","-ssh -pw pa$$w0rd usbadmin@$usbServerIp sudo usbip_bind_driver --other $device;sudo usbip_bind_driver --usbip $device")
  Start-Sleep -Seconds 10
  #reconnect device on USBIP-client
        [Diagnostics.Process]::Start("$usbipExePath","-a $usbServerIp $device") 
    }
} 
NAME=usbip
ОтветитьУдалитьзапускает клиентскую часть программы, для запуска серверной части должно быть
NAME=usbipd
А для ubuntu 13.04 можете написать ?
ОтветитьУдалить4-й день мучаюсь уже -(((