Runtu XFCE 16.04 c Huawei E3372H
Совсем недавно я перекочевал на старом компьютере в систему Runtu XFCE 16.04 x64
И мой модем Huawei E3372H с прошивкой Hilink отображался в системе как CD-ROM (в файловом менеджере и в lsusb).
Первое время спасался с помощью роутера с поддержкой усб модемов, втыкал туда и роутер уже передавал по лан кабелю данные в компьютер. Но мне этот способ не нравился, так как карта памяти вставленая в модем была доступна только в веб интерфейсе роутера, а там убогий файловый менеджер. Иногда модем в роутере не подключался, приходилось вытаскивать и втыкать модем.
Решил разобраться с этим неудобством.
Гугление выдало информацию что Hilink тоже можно переключить из режима CD-ROM в модемный.
Для этого нужно посмотреть в lsusb коды производителя и продукта, а также узнать в интернете какие коды производителя и продукта должны быть, когда модем переключен в модемный режим.
Эти коды можно прописать в /etc/usb_modeswitch.conf
DefaultVendor = 0x12d1
DefaultProduct = 0x1f01
TargetVendor= 0x12d1
TargetProduct= 0x14dс
После этого можно станет переключать устройство в режим модема этой командой
sudo usb_modeswitch -c /etc/usb_modeswitch.conf -J
Затем я решил автоматизировать эти действия, чтобы не вводить команду вручную после каждой вставки модема.
Запустил файловый менеджер с правами администратора, создал этот файл
/etc/udev/rules.d/40-huawei-e3372h.rules
В него написал такой текст
DRIVERS=="usb", SUBSYSTEMS=="usb", ATTRS{idProduct}=="1f01", ATTRS{idVendor}=="12d1", RUN+="/usr/sbin/usb_modeswitch --default-vendor 0x12d1 --default-product 0x1f01 --target-vendor 0x12d1 --target-product 0x14dс -J"
Сохранил.
Теперь модем сам переключается в нужный режим.
В Runtu XFCE 18.04 модем работает и без этих настроек.
======================
Хочу еще расписать что означают части команды
DRIVERS=="usb", SUBSYSTEMS=="usb", ATTRS{idProduct}=="1f01", ATTRS{idVendor}=="12d1", RUN+="/usr/sbin/usb_modeswitch --default-vendor 0x12d1 --default-product 0x1f01 --target-vendor 0x12d1 --target-product 0x14dс -J"
DRIVERS=="usb", SUBSYSTEMS=="usb", ATTRS{idProduct}=="1f01", ATTRS{idVendor}=="12d1"
Это указавает что устройство подключается по усб, указывает идентификаторы поизводителя и модели устройства
RUN+="...."
Это указывает выполнить команду прописанную в кавычках
Запятая и пробел после нее - это разделители для udev
/usr/sbin/usb_modeswitch --default-vendor 0x12d1 --default-product 0x1f01 --target-vendor 0x12d1 --target-product 0x14dс -J
Это команда которую нужно выполнить при обнаружении устройства
Запустить usb_modeswitch
Для устройства с идентификаторами default (изначальными) послать команду -J (как я понял это замена --message 123456789..., то есть команды модему для переключения режима, в man usb_modeswitch такие упрощенные ключи есть для многих производителей)
После выполнения команды udev должен получить идентификаторы target (измененные), возможно при неудаче осуществляется повторная попытка, если не указать - то должно посылать один раз. Но это предположение нужно проверять.
===============
Выполнил оптимизацию команды, укоротил для ускорения выполнения и уменьшил необходимую информацию о модеме.
DRIVERS=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1f01", RUN+="/usr/sbin/usb_modeswitch --default-vendor 0x12d1 --default-product 0x1f01 -J"
Теперь достаточно посмотреть lsusb и если у вас другое устройство - заменить в команде идентификаторы устройства.
И не забыть посмотреть в man usb_modeswitch ключ переключения режимов для вашего устройства (у меня указан -J), либо то же самое сделать длинной командой message.