Вопрос или проблема
У меня есть устройство-лупер, которое можно подключить к ПК в качестве устройства массового хранения. Я знаю это, потому что Windows предлагает мне выбрать, как я хочу его подключить. Однако Linux не подключает его как устройство массового хранения.
Я следовал рекомендациям здесь: модифицировал и скопировал 69-libmtp.rules, чтобы пропустить подключение устройства MTP, а также создал свой собственный файл правил (/etc/udev/rules.d/12-ownrules.rules), как описано там:
# /etc/udev/rules.d/12-ownrules.rules
SUBSYSTEMS=="usb", ENV{MODALIAS}=="usb:4353:4b4d", ENV{MODALIAS}="usb-storage"
Тем не менее, (на Ubuntu 22.04, но также и на Debian) udev пытается подключить его как звуковую карту.
Syslog:
kernel: [259420.947630] usb 3-1: Новое USB-устройство найдено, idVendor=4353, idProduct=4b4d, bcdDevice= 1.00
kernel: [259420.947644] usb 3-1: Новые строки USB-устройства: Mfr=1, Product=2, SerialNumber=3
kernel: [259420.947648] usb 3-1: Продукт: SINCO
kernel: [259420.947651] usb 3-1: Производитель: Jieli Technology
kernel: [259420.947654] usb 3-1: SerialNumber: 433039343033362E
kernel: [259420.953224] usb 3-1: Quirk or no altset; falling back to MIDI 1.0
systemd-udevd[956644]: controlC3: Процесс '/usr/sbin/alsactl -E HOME=/run/alsa -E XDG_RUNTIME_DIR=/run/alsa/runtime restore 3' завершился с кодом выхода 99.
pulseaudio[5540]: Не удалось найти рабочий профиль.
pulseaudio[5540]: Не удалось загрузить модуль "module-alsa-card" (аргумент: "device_id="3" name="usb-Jieli_Technology_SINCO_433039343033362E-00" card_name="alsa_card.usb-Jieli_Technology_SINCO_433039343033362E-00" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1""): инициализация не удалась.
Что не так? Где указано обнаружение звуковой карты ALSA и как это переопределить? Согласно документации, мои собственные правила в /etc/udev/rules.d должны иметь приоритет, так почему оно не подключается как устройство массового хранения?
Я недавно игрался с ALSA, PulseAudio и некоторыми другими гаджетами… Давайте попробуем это.
Описание должно указывать на поддержку аудио/MIDI функций, поэтому ALSA берет на себя управление, это вполне понятно.
Ваше пользовательское правило udev не работает, потому что ENV(MODALIAS)
– это не правильный способ заставить ядро распознать устройство как устройство массового хранения. MODALIAS
нельзя изменить таким образом. ALSA, вероятно, привязывается раньше, чем это правило может быть применено.
Вам нужно переопределить обнаружение ALSA для лупера и заставить его распознать как устройство массового хранения.
Попробуйте создать это правило udev, чтобы игнорировать обнаружение ALSA:
#/etc/udev/rules.d/12-ownrules.rules
# Отключаем обнаружение ALSA для лупера
ATTR{idVendor}=="4353", ATTR{idProduct}=="4b4d", ENV{SND_HINT}="ignore"
# Принудительное переключение в режим массового хранения
ATTR{idVendor}=="4353", ATTR{idProduct}=="4b4d", ENV{ID_USB_DRIVER}="usb-storage", RUN+="/sbin/modprobe usb-storage"
Попробуйте также заблокировать драйвер для лупера:
#/etc/modprobe.d/blacklist.conf
blacklist snd_usb_audio
Перезагрузите udev и отключите/подключите лупер снова.
Ответ или решение
Как убедиться, что USB-устройство смонтировано как носитель с помощью udev
Введение
При подключении USB-устройств к операционным системам на базе Linux, такие как Ubuntu или Debian, может возникнуть проблема с определением типа устройства. Например, ваше устройство типа "Looper" может быть распознано как аудиокарта, в то время как вы ожидаете, что оно будет смонтировано как накопитель. В этой статье мы рассмотрим, как можно настроить правила udev для корректного монтирования вашего устройства.
Проблема
Ваше устройство имеет идентификаторы:
- Vendor ID: 4353
- Product ID: 4b4d
В то время как система ошибочно определяет его как аудиоустройство, вам необходимо принудительно указать ему работать в режиме массового хранения. Для этого следует настроить правила udev и, возможно, откатить некоторые конфигурации ALSA, которые влияют на процесс.
Шаги для решения проблемы
-
Создание правил udev
Создайте файл правил udev, который будет игнорировать попытки ALSA определить ваше устройство как аудиокарту и будет настраивать его как устройство массового хранения.
Создайте файл
/etc/udev/rules.d/12-ownrules.rules
и добавьте следующие строки:# Игнорирование обнаружения ALSA для Looper ATTR{idVendor}=="4353", ATTR{idProduct}=="4b4d", ENV{SND_HINT}="ignore" # Принудительное указание режима хранения ATTR{idVendor}=="4353", ATTR{idProduct}=="4b4d", ENV{ID_USB_DRIVER}="usb-storage", RUN+="/sbin/modprobe usb-storage"
Эти правила конфигурируют udev игнорировать устройство для ALSA и настраивают правильный драйвер для модуля хранения данных.
-
Блокировка ALSA для устройства
Также удобно заблокировать драйвер ALSA для вашего устройства, чтобы избежать любых конфликтов. Для этого откройте файл
/etc/modprobe.d/blacklist.conf
и добавьте следующую строку:blacklist snd_usb_audio
Это предотвратит загрузку аудиодрайвера для вашего устройства и даст возможность udev правильно его распознать.
-
Перезагрузка udev и переподключение устройства
После внесенных изменений вам будет необходимо перезагрузить правила udev. Выполните следующую команду:
sudo udevadm control --reload-rules
Затем физически отключите и снова подключите ваше USB-устройство.
Проверка корректного монтирования
После выполнения всех указанных шагов проверьте, правильно ли распознано ваше устройство. Вы можете использовать команду lsblk
или dmesg
для проверки того, как система сейчас идентифицирует подключенное устройство.
Если все выполнено правильно, ваше устройство должно быть смонтировано как массовый носитель, и вы сможете к нему получить доступ через файловую систему.
Заключение
Надеюсь, что эти действия помогут вам настроить ваше USB-устройство для корректного монтирования как накопителя на базе Linux. Если проблема все еще сохраняется, возможно, стоит протестировать устройство на другом компьютере или обратиться к документации к конкретному устройству, так как иногда это может быть связано с аппаратными конфигурациями.