Группа разрешений dialout не применяется

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

Я использую приложение, которому нужно работать через usb-serial кабель, используя /dev/ttyUSB0.

Как /dev/ttyUSB0, так и пользователь, владеющий процессом, находятся в группе dialout, и права на порт установлены правильно (насколько я могу судить).

Тем не менее, моё приложение работает только в том случае, если я изменяю права на порт:
sudo chmod 666 /dev/ttyUSB0. Я не хочу делать это вручную каждый раз.

Приложение – Node-RED. Я использую его для обмена данными с PLC Mitsubishi (не с Arduino). getent group dialout действительно показывает правильного пользователя.

Другие вещи, которые я пробовал:
После перезагрузки связь не возобновляется автоматически.
Перезагрузка PLC не помогает. Однако, когда я перезапускаю процесс Node-RED (node-red-restart), связь волшебным образом восстанавливается. Я подозревал, что первый процесс node-red мог иметь другого владельца, но это не так, я проверил.

Я уже не уверен, что это проблема с правами, но проблема все еще существует …

$ /bin/ls -l $( type -p node-red )
lrwxrwxrwx 1 root root 35 17 авг 15:09 /usr/bin/node-red -> ../lib/node_modules/node-red/red.js
$ id
uid=1000(jw) gid=1000(jw) groups=1000(jw),4(adm),20(dialout),24(cdrom),27(sudo),30(dip),46(plugdev),4120(lpadmin),130(lxd),131(sambashare)
$ getent group dialout
dialout:x:20:jw
$ ls -la /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 26 сен 15:17 /dev/ttyUSB0
$ ps aux | grep node-red
jw          1383 10.1  6.2 896816 62012 ?        RNsl 25 сен  6:02 node-red
jw          2154  0.0  0.2   9040  2492 pts/0    S+   00:51   0:00 grep --color=auto node-red

Я предполагаю, что вы используете Arduino или какое-то подобное устройство. Вероятно, вам нужно, чтобы у вашего пользователя были права dialout, а не у вашего устройства. Дайте вашему пользователю права с помощью этой команды sudo usermod -a -G dialout $USER

Также вам может быть интересно узнать о Arduino Stack Exchange

Поскольку я не был уверен, является ли это проблемой Linux или проблемой Node-RED, я задал тот же вопрос на их форуме.
Моя проблема, оказывается, решается, если я немного задержу запуск node-red при загрузке.

Для описания следуйте по ссылке

Ответ или решение

Проблема с применением прав группы dialout в Node-RED для USB-serial связи

Когда вы сталкиваетесь с ситуацией, когда ваше приложение Node-RED не может установить соединение с устройством через USB-кабель, несмотря на то, что пользователь и устройство находятся в группе dialout, важно тщательно проанализировать несколько возможных причин этой проблемы. Давайте разберем вашу ситуацию более детально.

Состояние системы

Вы указали, что:

  • Устройство /dev/ttyUSB0 принадлежит группе dialout и имеет правильные права доступа: crw-rw----.
  • Ваш пользователь jw также является членом группы dialout (по команде getent group dialout).
  • Приложение работает только после изменения прав доступа к порту на 666, что непосредственно указывает на потенциальные проблемы с правами доступа.

Возможные причины проблемы

  1. Задержка старта Node-RED: Обнаружено, что ваше приложение восстанавливает связь при перезапуске процесса Node-RED. Это может указывать на то, что при автозагрузке вашего приложения Node-RED не распознает устройство, так как оно может еще не быть инициализировано системой. Вы можете решить эту проблему, добавив небольшую задержку перед стартом Node-RED, чтобы обеспечить завершение инициализации устройства.

  2. Управление правами доступа: Хотя ваш пользователь входит в группу dialout, есть вероятность, что членство в группе обновляется только при следующем входе в систему. Чтобы гарантировать, что права доступа используются корректно, вам стоит убедиться, что после добавления пользователя в группу dialout, вы или ваша сессия перезапускается. Запустите следующую команду для обновления членов групп:

    newgrp dialout
  3. Проблемы с правами подключения: Если USB-устройство подключается с изменяющимися правами доступа, это может быть проблемой udev правил. Проверьте, существуют ли специальные правила для вашего устройства в каталоге /etc/udev/rules.d/ или /lib/udev/rules.d/. Вы можете создать правило для установки правильных прав на ваш порт при его подключении. Например, создайте файл /etc/udev/rules.d/99-usb-serial.rules со следующим содержимым:

    KERNEL=="ttyUSB[0-9]*", MODE="0660", GROUP="dialout"
  4. Почтовая адресация /dev/ttyUSB0: Убедитесь, что Node-RED настроен для правильного использования порта. Проверьте конфигурацию узлов в Node-RED и убедитесь, что указано корректное имя устройства.

Рекомендации

  1. Добавьте паузу к запуску Node-RED: Вы можете использовать систему инициализации, чтобы добавить задержку в старте Node-RED. Например, если вы используете systemd, вы можете добавить ExecStartPre с командой ожидания:

    [Service]
    ExecStartPre=/bin/sleep 10
    ExecStart=/usr/bin/node-red
  2. Мониторинг и диагностика: Используйте утилиты для просмотра логов (journalctl -u node-red.service), чтобы получить информацию о том, что происходит при запуске Node-RED и инициализации оборудования.

  3. Регулярно проверяйте обновления приложения и зависимостей: Возможно, проблема исправлена в более поздних версиях Node-RED или пакетов, связанных с работой с последовательными портами.

Заключение

Проблемы с правами доступа и инициализацией оборудования часто могут быть решены через правильное управление группами и настройку запуска приложений. Убедитесь, что все настройки выполнены корректно, и используйте подходящие средства для диагностики, чтобы вам было легче находить первопричину проблемы. Если ваша проблема остается нерешенной, обратитесь к сообществу Node-RED или ресурсам, связанным с udev, для дальнейшей поддержки.

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

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