Как может список USB стать недоступным для пользователей без прав администратора в какой-то момент?

Вопрос или проблема

Я использую устройство 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 или профессиональной поддержке для дальнейшей диагностики.

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

Капча загружается...