Вопрос или проблема
Я использую устройство Raspberry Pi4. Мы подключили USB-хаб, к которому подключены 2 USB-устройства (контроллер давления Fluigent и контроллер на базе FTDI, сделанный вручную).
После загрузки я запускаю lsusb
, он отображает множество устройств (хабы, мышь, клавиатура…). Затем я подключаю свой USB-хаб. Теперь, когда я запускаю lsusb
, он отображает только одно устройство “Linux foundation 2.0 root hub”, все остальные устройства исчезли.
Если я запущу sudo lsusb
, все устройства видны.
Что может привести к этому? У пользователей без прав root должен быть доступ к перечислению USB.
Примечание: Изначально я столкнулся с этой проблемой, развернув некоторый C++ код с использованием библиотеки libusbp, и получил “libudev error -13”, сообщаемую libusbp
. Затем я понял, что использование sudo
работает и увидел, что lsusb
воспроизводит проблему вне моей программы. Возможно, этот код ошибки -13
может помочь.
Я столкнулся с этой проблемой вчера, и оказывается, она уже была зафиксирована (но не полностью решена): https://github.com/raspberrypi/linux/issues/3779. Это вызвано файлом 60-rpi.gpio-common.rules
с правилами udev, которые изменяют права доступа к узлу sysfs только для root, но случайно они изменяют USB-узел вместо GPIO-узла.
Короче говоря, варианты решения:
- удалить пакет “rpi.gpio-common” (
sudo apt remove rpi.gpio-common
, люди не сообщали о каких-либо негативных последствиях) - переподключить FTDI USB-UART преобразователь напрямую к RPi (это вызывает проблемы только при подключении к хабу)
- изменить/перекрыть ошибочное правило udev
Ответ или решение
Почему доступ к USB-устройствам может стать недоступным для непривилегированных пользователей
Введение
Ситуация с недоступностью USB-устройств для непривилегированных пользователей на устройствах Raspberry Pi 4 может возникать по нескольким причинам. В данном ответе мы исследуем основные факторы, которые могут привести к этой проблеме, касаясь специфических особенностей, связанных с использованием библиотеки libusbp и проблемами в системе udev.
1. Проблемы с правами доступа
Наиболее вероятной причиной, по которой вы столкнулись с проблемой доступа к USB-устройствам, является неправильное управление правами доступа. В системе Linux, в том числе на Raspberry Pi, существует система управления правами, которая ограничивает доступ к различным устройствам и ресурсам в зависимости от уровня привилегий пользователя.
Специфически в вашей ситуации, когда вы выполняете команду lsusb
без использования sudo
, вы получаете ограниченный доступ к USB-устройствам. Это может быть вызвано настройками udev, которые устанавливают права на доступ к устройствам в /dev
и /sys
. Если правила udev неправильно настроены, они могут запрещать непривилегированным пользователям доступ к USB-устройствам.
2. Ошибка конфигурации udev
Вы упомянули о файле правил 60-rpi.gpio-common.rules
, который вероятно содержит ошибочные настройки, изменяющие права доступа к узлам USB. Конкретно, если правила udev модифицируют права узлов USB, и в результате они становятся доступными только для пользователя root, тогда система не позволит доступны к устройствам для пользователей без соответствующих привилегий, что и подтвердил ваш опыт с полученной ошибкой libudev error -13
.
3. Подключение через USB-хаб
Технический аспект, который также стоит учитывать, заключается в том, что подключение USB-устройств через хаб может иметь свои особенности. В некоторых случаях, когда несколько USB-устройств подключены через хаб, может произойти конфликт или сбой в распознавании устройств, что приводит к неправильному отображению в lsusb
. Данная проблема может быть особенно актуальна в случае использования FTDI-преобразователей, как в вашем случае.
4. Решения и рекомендации
4.1 Удаление пакета rpi.gpio-common
Одно из простых решений — это удалить пакет rpi.gpio-common
, если его удаление не приведет к критическим сбоям в работе системы. Это устранит ошибочные правила udev, которые вызывают проблемы с правами доступа. Команда для удаления:
sudo apt remove rpi.gpio-common
4.2 Подключение FTDI напрямую к Raspberry Pi
Если проблема возникает только при использовании USB-хаба, попробуйте подключить FTDI USB-UART преобразователь напрямую к портам Raspberry Pi. Это может помочь избежать конфликтов устройств, которые возникают при использовании нескольких устройств через хаб.
4.3 Корректировка правил udev
Если вы хотите сохранить пакет rpi.gpio-common
, вы можете вручную исправить или переопределить правила udev, чтобы они корректно устанавливали права доступа к USB-устройствам. Для этого вам потребуется найти в файле 60-rpi.gpio-common.rules
строки, касающиеся доступа к USB-устройствам, и внести соответствующие изменения.
Заключение
Недоступность USB-устройств для непривилегированных пользователей может быть обусловлена ошибками в конфигурации системы и правилах udev. Изучив причины, вы сможете применить рекомендованные решения, чтобы восстановить доступ к USB-устройствам. Если проблема не решается, рекомендуется обратиться к сообществу Raspberry Pi или профессиональной поддержке для дальнейшей диагностики.