Команда cu в Linux возвращает строку, используемую в данный момент.

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

У меня есть 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" может возникать по нескольким причинам:

  1. Занятость устройства другим процессом: Если другое приложение или процесс уже использует последовательный порт, вы не сможете подключиться к этому порту до тех пор, пока он не будет освобожден.

  2. Неправильные права доступа: Хотя вы изменили права доступа для /dev/ttyUSB2 с помощью команды chmod 777 /dev/ttyUSB2, проблема может заключаться в том, что другой процесс уже захватил этот порт.

  3. Неявные процессы: Иногда процессы могут быть запущены в фоновом режиме или не отображаться при выполнении ps или lsof, если вы не запускаете их с необходимыми правами.

Шаги по диагностике и разрешению проблемы

  1. Проверка процессов, использующих порт: Как вы уже сделали, использование команды sudo lsof | grep tty позволяет увидеть все процессы, использующие последовательные порты. Убедитесь, что вы запускаете данную команду с правами суперпользователя для получения полной информации.

  2. Завершение процесса: Если вы обнаружили, что порт занят, вы можете завершить процесс с помощью команды sudo kill <PID>, где <PID> — это идентификатор процесса, который использует устройство.

  3. Использование других инструментов: В некоторых случаях, такие инструменты как fuser могут помочь определить использование порта более детально. Выполните команду:

    sudo fuser -v /dev/ttyUSB2

    Это даст вам идентификаторы процессов и дополнительную информацию о том, какие процессы могут блокировать ваш порт.

  4. Перезагрузка системы: Если все вышеперечисленные шаги не помогли, перезагрузка системы может устранить все зависшие процессы, которые могли блокировать устройство.

Заключение

Ваше решение проблемы путем использования lsof с правами суперпользователя для обнаружения активного процесса на /dev/ttyUSB2 — это именно тот подход, который необходим для диагностики подобных проблем. Правильное управление процессами и диагностика позволяют эффективно предотвращать такие ошибки в будущем.

Если вы продолжаете сталкиваться с проблемами, убедитесь, что используются последние версии драйверов для вашего устройства, и, возможно, проверьте наличие обновлений до более новых версий вашего дистрибутива Linux, что может улучшить совместимость с вашим модемом.

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

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