Вопрос или проблема
У меня есть GSM-доходник Huawei K3765, подключенный к USB-порту на моем ноутбуке с Ubuntu 18.04 LTS, и я пытаюсь отправлять и получать текстовые сообщения на Python.
Я знаю, что доходник подключен к ttyUSB0
, ttyUSB1
и ttyUSB2
, так как это сообщает команда dmesg | grep tty
.
ttyUSB0
кажется, работает идеально, если я запускаю cu -l /dev/ttyUSB0
, выводом будет Connected.
, и я могу выполнять команды. Это имеет смысл, потому что /dev/ttyUSB0
также работает в программе на Python.
Я изменил права доступа для /dev/ttyUSB2
с помощью команды chmod 777 /dev/ttyUSB2
. ttyUSB1
и ttyUSB2
, кажется, не работают, если я запускаю ту же команду cu -l /dev/ttyUSB2
, выводом будет
cu: /dev/ttyUSB2: Линия занята
Как возможно, что cu
говорит, что линия занята, но как ps
, так и lsof
не возвращают ничего с использованием этой линии?
Я решил проблему, запустив sudo lsof | grep tty
. Оттуда я увидел, что процесс работает на /dev/ttyUSB2
, как только я убил этот процесс sudo kill <PID>
, я смог подключиться к /dev/ttyUSB2
.
В первый раз я не запускал lsof
от имени суперпользователя, поэтому не видел все работающие процессы.
Ответ или решение
Решение проблемы: ошибка "Line in use" при использовании команды cu
в Linux
При работе с USB-модемами и последовательными устройствами в Linux, пользователи иногда сталкиваются с ошибкой "Line in use", когда пытаются подключиться к устройству с помощью команды cu
. В данном случае, вы использовали модем Huawei K3765, подключенный к вашему ноутбуку с Ubuntu 18.04 LTS, и обнаружили, что команда cu -l /dev/ttyUSB2
возвращает ошибку.
Причины ошибки "Line in use"
Ошибка "Line in use" может возникать по нескольким причинам:
-
Занятость устройства другим процессом: Если другое приложение или процесс уже использует последовательный порт, вы не сможете подключиться к этому порту до тех пор, пока он не будет освобожден.
-
Неправильные права доступа: Хотя вы изменили права доступа для
/dev/ttyUSB2
с помощью командыchmod 777 /dev/ttyUSB2
, проблема может заключаться в том, что другой процесс уже захватил этот порт. -
Неявные процессы: Иногда процессы могут быть запущены в фоновом режиме или не отображаться при выполнении
ps
илиlsof
, если вы не запускаете их с необходимыми правами.
Шаги по диагностике и разрешению проблемы
-
Проверка процессов, использующих порт: Как вы уже сделали, использование команды
sudo lsof | grep tty
позволяет увидеть все процессы, использующие последовательные порты. Убедитесь, что вы запускаете данную команду с правами суперпользователя для получения полной информации. -
Завершение процесса: Если вы обнаружили, что порт занят, вы можете завершить процесс с помощью команды
sudo kill <PID>
, где<PID>
— это идентификатор процесса, который использует устройство. -
Использование других инструментов: В некоторых случаях, такие инструменты как
fuser
могут помочь определить использование порта более детально. Выполните команду:sudo fuser -v /dev/ttyUSB2
Это даст вам идентификаторы процессов и дополнительную информацию о том, какие процессы могут блокировать ваш порт.
-
Перезагрузка системы: Если все вышеперечисленные шаги не помогли, перезагрузка системы может устранить все зависшие процессы, которые могли блокировать устройство.
Заключение
Ваше решение проблемы путем использования lsof
с правами суперпользователя для обнаружения активного процесса на /dev/ttyUSB2
— это именно тот подход, который необходим для диагностики подобных проблем. Правильное управление процессами и диагностика позволяют эффективно предотвращать такие ошибки в будущем.
Если вы продолжаете сталкиваться с проблемами, убедитесь, что используются последние версии драйверов для вашего устройства, и, возможно, проверьте наличие обновлений до более новых версий вашего дистрибутива Linux, что может улучшить совместимость с вашим модемом.