Отказано в разрешении на загрузку с IDE 2

Решаю эту очень распространенную проблему в IDE v2.0.0., но не знаю почему.

Я должен быть в порядке в группе:

adm tty dialout cdrom sudo dip plugdev lpadmin lxd sambashare docker

Я также встречал многочисленные предложения изменить разрешения устройства напрямую с помощью chmod a+rw /dev/<device>. Это ужасный совет, но пока ничего не работает, поэтому я все равно попробовал. Это также не работает, так как в какой-то момент процесса загрузки устройство удаляется и создается заново, что приводит к сбросу разрешений.

изменить: я также убедился, что ModemManager не запущен и удален из системы.

Запуск IDE от имени пользователя root всегда завершается ошибкой, в том числе при передаче аргумента --no-sandbox.

Я использую загрузку AppImage в Ubuntu 22.04, но попробовал загрузку в формате zip с теми же результатами.

изменить: ранее в этом месте было примечание о том, что эта проблема не возникает в IDE v. 1.8. На самом деле это было не так — я просто тестировал плату, которая не удаляет и не создает заново устройство при загрузке. При использовании платы, на которой это происходит (в данном случае Arduino Micro), ошибка возникает и в версии 1.8.

Использование avrdude напрямую (в качестве моей обычной учетной записи пользователя) также работает нормально.

Дополнительное наблюдение: когда устройство воссоздается операционной системой после подключения платы Arduino, оно сначала создается с правами crw------- 1 root root и остается в этом состоянии. в течение очень короткого промежутка времени перед переключением на права crw-rw----+ 1 root dialout, после чего загрузка работает должным образом.

, 👍1

Обсуждение

С тех пор вы перезагрузились (или, по крайней мере, вышли из системы и снова вошли в систему), чтобы быть _уверенным_ в том, что любые шансы, которые вы сделали для членства в группе, были унаследованы всеми вовлеченными процессами?, @timemage

@timemage Я был членом этих групп буквально несколько лет, поэтому я абсолютно уверен, что все мои группы верны. Я не в первый раз сталкиваюсь с этим, но на этот раз ничего не получается. Опять же, 1.8 работает нормально., @x1a4

Ну, я немного использую IDE 2.0, но система, которой я сейчас не пользуюсь, не основана ни на Ubuntu, ни на Debian. Если никакой новой информации не появляется, я могу установить Ubuntu на виртуальную машину или USB-устройство и посмотреть, что произойдет, когда я попытаюсь там. Учитывая, что «использование avrdude напрямую... работает просто отлично», что именно создает это сообщение? avrdude только как запускаемый IDE 2.0? Когда вы тестировали avrdude, вы тестировали его с установленной системой или с avrdude из каталога .arduino15? Вы видите что-нибудь интересное в страйсе?, @timemage

Я вижу, что устройство /dev/ttyACM0 воссоздается ОС, когда я подключаю плату в режиме программирования, сначала с разрешениями crw------- 1 root root, но коротким спустя некоторое время (например, в течение секунды или около того) эти разрешения переключаются на ожидаемый crw-rw----+ 1 root dialout. Поскольку я запускаю avrdude сразу после того, как произошло это переключение, он работает, но по какой-то причине IDE 2.0 выглядит так, как будто он отправляет данные до того, как разрешения устройства установлены, что приводит к ошибке. Однако я не знаю, почему устройство проходит через два набора разрешений., @x1a4

Я не знаю, что он делает (я не уверен, почему), но можете ли вы убедиться, что ModemManager не включен. Это не то, что вы хотите запустить в любом случае., @timemage

Ах, забыл упомянуть об этом в исходном сообщении, но да, ModemManager уже удален из системы., @x1a4

Установил Ubuntu 22.04 на виртуальную машину, отключил ModemManger, добавил себя в дозвон, перезапустил, чтобы изменения вступили в силу, загрузил zip-файл IDE 2.0.0 без приложения. распаковал, запустил, замапил в UNO на USB, дважды скомпилировал/закачал блинк-скетч с разной скоростью мигания. Нет ошибок разрешения. Вы используете что-то вроде selinux, контейнеров, модифицированных возможностей posix, apparmor и т. д.?, @timemage

Я ничего не изменил в этой установке, о чем я знаю. Ваше USB-устройство удаляется и создается заново при каждой загрузке? В этом суть этой проблемы. Я просматриваю файл через watch -n 0.1 ls -l /dev/ttyACM0, затем запускаю загрузку. Это короткое окно прав доступа crw------- 1 root root сразу после создания устройства, которое, по-видимому, является проблемой здесь. Все в порядке, как только разрешения устанавливаются, но я не знаю, какой механизм вызывает это. Я предполагаю, что это в ОС, но _множество_ поисков ничего не дали., @x1a4

Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/139598/discussion-between-timemage-and-x1a4)., @timemage

Я думал, ты собираешься что-то опубликовать. Но, конечно, я могу. Это займет немного времени, но сначала я сделаю что-нибудь основное., @timemage

о, я могу сделать пост. Я просто хотел отдать должное, где это было связано, @x1a4

Причина, по которой я думаю, что вы этого хотите, заключается в том, что у вас будет больше свободы, чтобы решить вопрос. Мне было бы странно редактировать ваш вопрос до такой степени, к которой я был бы склонен, чтобы ответ точно соответствовал ему., @timemage

справедливо. я позабочусь об этом, @x1a4

Вы можете удалить все Edit: вещи. Так что нет никакой саги, чтобы следовать. Просто пусть это будет симптом, который люди, скорее всего, найдут с помощью поисковых запросов, а затем переместите весь материал ответа в ответ. Навскидку единственный вклад, который у меня есть в ответе, заключается в том, что он разрешим на разных уровнях. Один из них полностью удаляет пакет, а другой - конкретное редактирование., @timemage


1 ответ


Лучший ответ:

2

После длительного сеанса отладки в чате мы определили, что запись udev, установленная пакетом apt laptop-mode-tools, занимает много времени для запуска, что приводит к тому, что разрешения на USB-устройство не устанавливаются до тех пор, пока среда IDE не попытается выполнить загрузку.

Эта проблема возникает, даже если режим ноутбука не включен, например, из-за использования переменного тока. Вам не обязательно использовать ноутбук, чтобы возникла эта проблема, так как Laptop-Mode-Tools — это универсальный энергосберегающий пакет, который можно установить где угодно.

Рассматриваемое правило udev: ACTION=="add", SUBSYSTEM=="usb", RUN+="lmt-udev force" в файле /lib/ udev/rules.d/99-laptop-mode.rules.

Комментирование этого правила udev или изменение force на auto решает проблему для меня (без необходимости перезапуска udev или чего-либо еще).

Большие молотки, которые можно использовать для решения этой проблемы, включают настройку ENABLE_LAPTOP_MODE_TOOLS на 0 в /etc/laptop-mode/laptop-mode.conf или просто полностью удалить ноутбук-режим-инструменты из системы.

@timemage получает признание за это исправление.

,

Ага. У пользователя Arduino есть шанс найти это, избегая с этим проблем. Позже я могу добавить некоторые комментарии, которые вы можете интегрировать (или нет). Единственное, о чем я сейчас упомяну, это то, что эта проблема не будет особенно заметна для платы с выделенным последовательным приемопередатчиком, например, для плат UNO, NANO, Mega, ESP8266, потому что они не пересчитываются на USB. bus во время каждого сброса/загрузки. Как только разрешения становятся правильными (быстро или медленно), они остаются правильными до отключения., @timemage