Содержание статьи
Особенность Unix-подобной системы — относиться к любому из своих компонентов как к файлу — давно уже стала общим местом в разговорах о ее внутреннем устройстве. И бесчисленное количество статей о том же Linux тому свидетельство. Оборудование — не исключение. Видеокарта, аудиокарта, внешний девайс, подключенный через USB, в понимании Linux не что иное, как файл.
Оттого удивительно, что из всех операционных систем только Plan 9 (если не считать пары отпочковавшихся проектов со схожей судьбой), в котором подобный подход доведен до логического конца, способен без лишних телодвижений распознавать оборудование удаленного компьютера и управлять им, как своим собственным.
В Plan 9 за проброс оборудования отвечает RPC-протокол 9P. Он обеспечивает доступ вообще к любым файлам и устройствам, как локальным, так и сетевым. К сожалению, Linux похвастать таким универсальным инструментом не может. Зато здесь есть несколько инструментов (если не сказать — костылей), обеспечивающих доступ к оборудованию удаленной машины.
USB
Когда речь заходит о пробросе оборудования на другой компьютер, возможно, первое, что приходит на ум, — это веб-камера на домашнем ноутбуке или подключенный к нему смартфон, доступ к которым нужно обеспечить с удаленного десктопа. Например, из офиса на другом конце города (в другом городе, в другой стране).
В подобном случае выручить может утилита USB/IP. Развитием утилиты уже давненько никто не занимался, но на ее работоспособности это пока не сказалось — в репозиториях большинства популярных дистрибутивов такой пакет присутствует.
Первым делом пакет USB/IP следует установить на ту машину, доступ к устройствам которой необходимо получить извне. Далее загружаем необходимые модули:
$ sudo modprobe usbip-core
$ sudo modprobe usbip-host
Проверяем, все ли корректно загрузилось:
$ sudo lsmod | grep usbip
И запускаем сервер:
$ sudo usbipd -D
Поскольку USB/IP имеет собственную, независимую от встроенной систему адресации, поиск устройств выполняется командой
$ sudo usbip list -l
Она покажет список всех устройств, подключенных в данный момент в USB-шине.
Теперь можно приступить непосредственно к расшариванию девайса (допустим, это будет веб-камера с индексом 2-3 из полученного списка):
$ sudo usbip bind --busid=2-3
Очередная проверка правильности выполненных действий:
$ sudo usbip list -r localhost
С исходным компьютером покончено. Далее следует настроить тот, на котором будет использоваться периферия первого.
Итак, перейдя на клиентскую машину, устанавливаем на нее USB/IP и запускаем:
$ sudo modprobe usbip-core
$ sudo modprobe vhci-hcd
Проверяем доступность расшаренного оборудования на сервере по списку:
$ sudo usbip --list АДРЕС_СЕРВЕРА
И присоединяем нашу камеру:
$ sudo usbip --attach АДРЕС_СЕРВЕРА 2-3
Проверяем результат:
$ sudo usbip --port
Теперь удаленное USB-устройство должно появиться в списке локальных, и с ним можно будет работать, как с любым другим. Для проверки корректности подключения выполняем команду lsusb:
$ lsusb
INFO
Существует клиентская часть USB/IP для Windows. Однако из-за ошибки в версии протокола в ее исполняемом файле из коробки она работает некорректно. Требуются дополнительные телодвижения с подменой констант в исходниках.
RS232
Самым лаконичным решением взаимного расшаривания в Линуксе могут похвастаться COM-порты. Никакие дополнительные драйверы для этого не нужны. За все отвечает одна маленькая утилита remserial, доступная в исходниках. Подходит как для доступа из Линукса к оборудованию, подключенному через RS232 на удаленном компьютере, так и для связки двух девайсов с COM-портами, подключенных к разным машинам, связанным по сети.
Расшарить RS232, указав сетевой порт (-p), скорость, режим stty (-s) и имя порта (здесь /dev/ttyS0), можно так:
$ remserial -d -p 23000 -s "9600 raw" /dev/ttyS0 &
Подключиться к COM-девайсу, расположенному на удаленной машине (сервере), — так:
$ remserial -d -r адрес_сервера -p 23000 -s "9600 raw" /dev/ttyS0 &
Допустимо запускать несколько экземпляров программы с разными портами и адресами подключенных девайсов.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»