Графической оболочки на сервере нет.
Любите ли Вы велосипеды так, как люблю их я? )) Тогда рекомендация прежняя. Вставляем модем. Смотрим выхлоп dmesg.
dmesg | grep attach #нас интересует куда был привязан модем в процессе инициализации в системе
Видим в ответ что-то такое:
[ 38.487334] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB4
Посмотрим на это устройство с точки зрения udev:
udevadm info -a -p $(udevadm info -q path -n ttyUSB4)
ответом будет
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/ttyUSB4/tty/ttyUSB4':
KERNEL=="ttyUSB4"
SUBSYSTEM=="tty"
DRIVER==""
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/ttyUSB4':
KERNELS=="ttyUSB4"
SUBSYSTEMS=="usb-serial"
DRIVERS=="option1"
ATTRS{port_number}=="0"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1':
KERNELS=="1-2:1.1"
SUBSYSTEMS=="usb"
DRIVERS=="option"
ATTRS{authorized}=="1"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bInterfaceNumber}=="01"
ATTRS{bInterfaceProtocol}=="12"
ATTRS{bInterfaceSubClass}=="02"
ATTRS{bNumEndpoints}=="02"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2':
KERNELS=="1-2"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{avoid_reset_quirk}=="1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{bMaxPower}=="500mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 5"
ATTRS{bcdDevice}=="0102"
ATTRS{bmAttributes}=="80"
ATTRS{busnum}=="1"
ATTRS{configuration}=="Huawei Configuration"
ATTRS{devnum}=="7"
ATTRS{devpath}=="2"
ATTRS{idProduct}=="1506"
ATTRS{idVendor}=="12d1"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="HUAWEI Technology"
ATTRS{maxchild}=="0"
ATTRS{product}=="HUAWEI Mobile"
ATTRS{quirks}=="0x10"
ATTRS{removable}=="removable"
ATTRS{speed}=="480"
ATTRS{urbnum}=="2177"
ATTRS{version}==" 2.00"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1':
KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{authorized_default}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceProtocol}=="01"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{bMaxPower}=="0mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0413"
ATTRS{bmAttributes}=="e0"
ATTRS{busnum}=="1"
ATTRS{configuration}==""
ATTRS{devnum}=="1"
ATTRS{devpath}=="0"
ATTRS{idProduct}=="0002"
ATTRS{idVendor}=="1d6b"
ATTRS{interface_authorized_default}=="1"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Linux 4.13.0-37-generic xhci-hcd"
ATTRS{maxchild}=="16"
ATTRS{product}=="xHCI Host Controller"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="unknown"
ATTRS{serial}=="0000:00:14.0"
ATTRS{speed}=="480"
ATTRS{urbnum}=="135"
ATTRS{version}==" 2.00"
looking at parent device '/devices/pci0000:00/0000:00:14.0':
KERNELS=="0000:00:14.0"
SUBSYSTEMS=="pci"
DRIVERS=="xhci_hcd"
ATTRS{broken_parity_status}=="0"
ATTRS{class}=="0x0c0330"
ATTRS{consistent_dma_mask_bits}=="64"
ATTRS{d3cold_allowed}=="1"
ATTRS{device}=="0xa12f"
ATTRS{dma_mask_bits}=="64"
ATTRS{driver_override}=="(null)"
ATTRS{enable}=="1"
ATTRS{irq}=="122"
ATTRS{local_cpulist}=="0-7"
ATTRS{local_cpus}=="ff"
ATTRS{msi_bus}=="1"
ATTRS{numa_node}=="-1"
ATTRS{revision}=="0x31"
ATTRS{subsystem_device}=="0x1501"
ATTRS{subsystem_vendor}=="0x1558"
ATTRS{vendor}=="0x8086"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
В данном случае нас интересует, по сути, сегмент с SUBSYSTEMS, так как прочее можно вытянуть и из выхлопа lsusb, но не важно. Исходя из сегмента:
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2':
...
SUBSYSTEMS=="usb"
...
ATTRS{idProduct}=="1506"
ATTRS{idVendor}=="12d1"
формулируем правило для идентификации с точки зрения udev добавления данного устройства:
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506"Создаем файл правила, полное имя которого в нашем случае: /etc/udev/rules.d/85-myUSBModem.rules. Его набиваем таким вот текстом:
# Вот такое правило для модема
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506", RUN+="/полный/путь/к/скрипту/Script.sh"
Сохраняем, закрываем.
Транслируем обновленный набор правил udev'у:
sudo udevadm control --reload-rules
Тестируем: применится ли наше правило для нашего текущего устройства:
udevadm test /sys/class/tty/ttyUSB4
В конце ответа команды видим такое:
TAGS=:systemd:
USEC_INITIALIZED=38500016
run: '/полный/путь/к/скрипту/Script.sh'
Unload module index
Unloaded link configuration context.
Если видим, то все хорошо. Если не видим, имеет смысл посмотреть в этом же логе выше по тексту... Там наверняка есть какая-нибудь бяка из серии:
Reading rules file: /etc/udev/rules.d/70-myUSBModem.rules
unknown key 'ID_MODEL' in /etc/udev/rules.d/85-myUSBModem.rules:4
invalid rule '/etc/udev/rules.d/85-myUSBModem.rules:4'
Остается создать этот самый /полный/путь/к/скрипту/Script.sh и набить его командами. Для начала сделаем простую запись в текстовый файл. Для этого набиваем Script.sh таким содержимым:
#!/bin/sh
echo 1 >> /home/ЮЗВЕРЬ/udev_runs.log
Сохраняем, даем права на исполнение:
sudo chmod + /полный/путь/к/скрипту/Script.sh
Тестируем полученный результат. Для этого вынимаем модем, и вставляем его обратно. После вставки мониторим состояние файла
cat /home/ЮЗВЕРЬ/udev_runs.log
если видим в выхлопе "1", а не ругань на отсутствие файла - то всё гут, правило применилось (если не применилось - попробовать перезагрузить машину, и снова проверить работоспособность правила - если не работает, то искать ошибку в своих действиях, а также проверить состояние модема через lsusb - он должен быть в режиме модема, а не в режиме Mass-storage, например). Если все хорошо - остается набить Script.sh нужной нам последовательностью команд, которая должна выполняться при вставке модема.
Для удаления правил, соответственно, достаточно будет сделать:
sudo rm /etc/udev/rules.d/85-myUSBModem.rules
sudo udevadm control --reload-rules
reboot #опционально, но лучше все-таки с перезагрузкой, - они не всегда корректно отрабатывают почему-то
По поводу правила для отключения модема - смотреть выхлоп команды
udevadm monitor --environment --udev (запустить команду, выдернуть модем, проанализировать выхлоп, добавить строку в созданное уже ранее правило 85-myUSBModem.rules, начинаться она будет скорее всего с
ACTION=="remove",...)