Команда sudo usermod -aG dialout: доступ к последовательному порту в Linux

Ошибка «Permission denied» при открытии /dev/ttyUSB0 или /dev/ttyACM0 в Arduino IDE, minicom или PuTTY почти всегда означает одно: ваш пользователь не входит в группу dialout, которой принадлежат файлы последовательных портов в Linux. Команда sudo usermod -aG dialout $USER решает эту проблему, добавляя текущего пользователя в нужную группу.

Ниже разберём, что именно делает эта команда, почему после её выполнения нужно перезайти в систему, как проверить результат и что делать, если доступ к порту так и не появился. Материал актуален для Ubuntu, Debian, Linux Mint и других систем, где последовательные порты управляются через группу dialout.

Что делает команда sudo usermod -aG dialout

Команда состоит из нескольких частей, и каждая из них важна. usermod — утилита для изменения параметров учётной записи пользователя. Ключ -a означает append, то есть добавление к существующим группам, а -G задаёт список дополнительных групп. Вместе -aG dialout добавляет пользователя в группу dialout, не удаляя его из остальных групп.

Группа dialout исторически отвечает за доступ к последовательным портам (COM-портам). В современных системах сюда попадают и USB-to-Serial адаптеры на чипах CH340, CP2102, FTDI, а также платы Arduino и ESP32, которые при подключении создают устройства вида /dev/ttyUSB0 или /dev/ttyACM0.

Посмотреть, какая группа владеет портом, можно так:

ls -l /dev/ttyUSB0

Типичный вывод выглядит как crw-rw---- 1 root dialout .... Это значит: читать и писать в порт может только root и члены группы dialout. Если вашего пользователя в этой группе нет — программа получит отказ в доступе.

Пошаговая инструкция по применению

Выполните команду, подставив своё имя пользователя или переменную окружения:

sudo usermod -aG dialout $USER

Переменная $USER автоматически подставляет имя текущего пользователя, поэтому команда универсальна. Если нужно добавить другого пользователя, укажите его имя явно: sudo usermod -aG dialout ivan.

⚠️ Внимание: никогда не выполняйте usermod -G dialout user без ключа -a. Без него команда заменит весь список дополнительных групп пользователя на одну dialout, и вы потеряете, например, членство в группе sudo — восстанавливать доступ придётся из-под другой учётной записи.

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

☑️ Добавление пользователя в группу dialout

Выполнено: 0 / 5

Проверка результата

Самый быстрый способ убедиться, что всё сработало, — команда groups. Она выведет список групп текущего пользователя, и среди них должна быть dialout.

Альтернативные способы проверки:

  • 🔍 id — покажет UID, основную и дополнительные группы пользователя;
  • 📋 getent group dialout — выведет всех членов группы dialout;
  • 🔌 ls -l /dev/ttyUSB0 — сверьте группу владельца порта с выводом предыдущих команд.

Если dialout в списке групп отсутствует, значит, вы не перезашли в систему после выполнения usermod. Это самая частая причина «неработающей» команды.

Типичные ошибки и их решения

Даже после добавления в группу доступ к порту иногда не появляется. Вот распространённые причины и способы диагностики.

СимптомВозможная причинаЧто проверить
Permission denied после usermodСессия не перезапущенаВывод команды groups
Порт /dev/ttyUSB0 не появляетсяНе загружен драйвер или кабель «только питание»Вывод dmesg после подключения
Порт занят другой программойМодем-менеджер или другой процесс держит портsudo lsof /dev/ttyUSB0
Группа порта не dialoutПравила udev назначают другую группуВывод ls -l на файл устройства
Ошибка «usermod: user does not exist»Опечатка в имени пользователяКоманда whoami

Отдельного упоминания заслуживает ModemManager: в некоторых дистрибутивах он автоматически захватывает новые последовательные порты, пытаясь определить модем. Для плат Arduino и ESP32 это мешает — программа прошивки не может открыть порт. Если lsof показывает, что порт занят именно ModemManager, и модемами вы не пользуетесь, службу можно остановить: sudo systemctl stop ModemManager.

⚠️ Внимание: запускать Arduino IDE, minicom или другие программы через sudo ради доступа к порту — плохая практика. Файлы проектов и настройки начнут создаваться от root, что позже вызовет новые конфликты прав. Правильное решение — именно группа dialout.
📊 Для какой задачи вам понадобилась группа dialout?
Прошивка Arduino / ESP32
Работа с модемом или роутером
Чтение данных с датчиков и устройств
Настройка 3D-принтера или ЧПУ

Другие полезные группы для работы с устройствами

Группа dialout — не единственная, которая может понадобиться при работе с оборудованием в Linux. В зависимости от задачи пользователя добавляют и в другие группы:

  • 💾 disk — низкоуровневый доступ к дискам (давать её обычному пользователю небезопасно);
  • 🔌 plugdev — работа со съёмными устройствами, часто используется для adb и программаторов;
  • 🖥️ tty — доступ к терминальным устройствам, требуется редко;
  • 🐳 docker — управление контейнерами без sudo.

Принцип везде одинаковый: sudo usermod -aG имя_группы имя_пользователя, затем повторный вход в систему. Ключ -a обязателен при любом добавлении в группу — без него вы затрёте все остальные группы пользователя.

Почему группа называется dialout

Название уходит корнями в эпоху телефонных модемов: dial-out — «исходящий звонок» через последовательный порт. Модемы давно ушли в прошлое, а имя группы осталось и теперь покрывает все последовательные интерфейсы, включая USB-UART переходники.

Как отозвать доступ и удалить пользователя из группы

Если доступ к последовательному порту больше не нужен — например, вы настраивали чужой компьютер или выдаёте права временно, — пользователя можно исключить из группы. Для этого используется утилита gpasswd:

sudo gpasswd -d ivan dialout

Как и при добавлении, изменение вступит в силу после нового входа пользователя в систему. Проверить результат можно командой getent group dialout — имени в списке быть не должно.

На серверах и общих машинах имеет смысл периодически просматривать состав группы: лишний пользователь с доступом к портам теоретически может читать данные, которые устройство передаёт через последовательный интерфейс.

Часто задаваемые вопросы

Чем отличается -aG от -G в команде usermod?

Ключ -G задаёт полный список дополнительных групп, заменяя старый. Ключ -a (append) вместе с -G добавляет группу к существующему списку. Для добавления в dialout всегда используйте связку -aG.

Команда выполнена, но Arduino IDE всё равно не видит порт. Что делать?

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

Нужно ли добавлять пользователя в dialout для /dev/ttyACM0?

Да, в большинстве дистрибутивов устройства /dev/ttyACM* (платы Arduino Uno, Leonardo и подобные) также принадлежат группе dialout. Проверить можно командой ls -l /dev/ttyACM0.

Можно ли обойтись без группы dialout?

Технически можно изменить права через правила udev или запускать программы от root, но оба способа хуже: первый требует написания конфигурации, второй небезопасен. Членство в группе — штатный и самый простой механизм.

Как узнать, в каких группах уже состоит пользователь?

Выполните groups имя_пользователя или просто id для текущей учётной записи. Обе команды выведут основную и все дополнительные группы.