Автоопределение USB-устройств в Linux Mint 18.3 (udev,udisks, или что?)
По причине описанной в другой ветке этого форума, у меня возник более конкретный вопрос, который я вынес сюда как более общую тему:
- Как в системе Linux Mint 18.3 реализовано автоопределение usb-устройств сейчас в 2018 году?
Проблема в том, что почти вся информация, которая находится по подобным поисковым запросам датируется 2011-2015 годами и ссылается на настройку утилиты udev путём добавления в каталог /etc/udev/rules.d/ файлов с описаниями правил монтирования.
Но беда в том, что в моей системе этот каталог изначально пуст и все описанные в инструкциях действия не дают никакого результата.
Каталог /etc/udisks2/ тоже пуст.
Я нашёл упоминание о рolkit, но как это может быть связано с моей задачей я не очень понимаю.
udev актуален. Правила в rules.d пусты, так как в этом каталоге правила, что создает сам пользователь, а не умолчания в системе.
в моей системе этот каталог изначально пуст
В /etc/udev/rules.d/ пишет только админ (локалхоста), если конечно дистр не упоротый. Обычно правила, поставляемые с пакетом, живут в /usr/lib/udev/rules.d/ и/или в /lib/udev/rules.d/ .
действия не дают никакого результата
- Убедись, что правило описано правильно и хандлит нужное тебе устройство.
- udevadm control —reload делал?
Туда лучше не лезь, если не знаешь, что делать. Проще добавить пользователя в соответствующую группу (GID и название группы в разных дистрах могут отличаться, потому тут не подскажу) и перелогиниться (при этом, чтобы изменения вступили в силу, пользователь должен завершить все активные сессии, потому, если не сработало, лучше перезагрузить компьютер).
Спасибо, значит буду пытаться копать в сторону udev.
Убедись, что правило описано правильно и хандлит нужное тебе устройство.
Ну, опишу всё по порядку, может я где-то ступил.
Вначале, я использовал dmesg для сбора информации. Я сделал два файла с выводами этой утилиты до и после подключения NXT-устройства:
В статьях 2011-2012 годов по подключению NXT, как раз упоминалось, что у устройства долженsы быть idVendor=0694 и idProduct=0002.
Дальше, разница выводов lsusb до и после подключения устройства была:
Причём, это всё работало ещё до того как я стал прописывать настройки в пустой по умолчанию каталог /etc/udev/rules.d/, но такое поведение было описано и в тех статьях, которые я читал.
Что касается udev, то у меня в системе установлена по умолчанию версия 229-4ubuntu21.4, что бы это ни значило.
Дальше, в разных статьях по настройке рекомендовалось следующее:
1) Создать файл /etc/udev/rules.d/80-nxt.rules с текстом:
2) Или создать тот же файл но с текстом (предполагается, что это разные вариации для разных версий udev, но какой для чего я не в курсе):
3) В другом источнике, предлагалось создать файл /etc/udev/rules.d/45-legonxt.rules с текстом:
4) Ещё предлагался вариант файла /etc/udev/rules.d/70-nxt.rules с текстом:
В принципе, названия файлов, по всей видимости не важны, просто я привожу примеры из разных источников и опробовал я эти варианты по отдельности.
После создания конфигурационного файла, предполагалось выполнить команду:
Но ни эта команда, ни перезагрузка, ни
Честно говоря, я не очень представляю, как можно проверить автораспознание NXT-устройства, подключенного к usb, но выполняя инструкции по установке софта (компиляторов nxc и nbc) предполагалось, что при запуске компиляторов с определёнными опциями, компиляторы должны загрузить бинарные файлы в подключенное и автоматически расшаренное NXT-устройство. Этого не происходит.
что за шиза? Компилируй и отправляй, через scp там или чем, как тебе уже надо.
что за шиза? Компилируй и отправляй, через scp там или чем, как тебе уже надо.
Вообще, мне нужно хоть как-то расшарить доступ к устройству, чтобы загружать на него программы любым из возможных способов!
Сами программы компилируются нормально. Я проверял как это работает в винде, где проблем с распознаванием NXT нет (но даже в винде, NXT-устройство не отображается как внешний диск).
Ну, и просто в примере компилятора nbc для системы NXT по умолчанию приводятся варианты типа:
You can then compile this up using
then upload your HelloWorld program
You can then run the program using the buttons on the NXT
Тут речь была о загрузке ранее скомпилированного компилятором nbc файла из исходника HelloWorld.nxc в бинарник HelloWorld с помощью специального питоновского скрипта nxt_push
Another final option is to use the the built in download feature of nbc, you can do something like this when you compile:
This will automatically download a successful build to the NXT brick, there is also a -r option to download and run.
А тут, компиляция и загрузка того же исходника осуществляется самим компилятором nbc
Ну, а сам nbc -help выдаёт в первых строчках описания своих опций:
использовал dmesg для сбора информации
А следовало бы использовать udevadm monitor , оттуда можно копировать данные (почти) как есть.
Показывай написанное тобой правило.
Зачем? Используй udevadm control —reload .
В общем, давай написанное правило и выхлоп udevadm monitor (вытаскиваешь девайс, запускаешь монитор, втыкаешь девайс, ждёшь получения информации (её будет много)).
В общем, я решил сделать все действия сначала (И кажется заработало):
1) я создал один файл рулесов с немного изменёнными параметрами:
Тут, насколько я понимаю, проверяются 4 первых параметра на соответствие, потом создаётся символьная ссылка с именем «nxt» и задаются (для этой ссылки?) права доступа «666».
2) После этого я выполнил команду: udevadm control —reload
3) Потом выключил NXT-устройство и снова его включил.
4) Набрал lsusb для просмотра устройств и получил:
5) Потом я набрал команду: ls -l /dev/bus/usb/002/
Вроде тут видно, что устройство 009 было подключено, но права доступа к нему «crw-rw—-»
6) Потом я набрал: ls -l /dev/nxt
Во! Вот это мне понравилось!
Как я понял, при подключении NXT была создана символьная ссылка на устройство /dev/nxt и права на эту ссылку были определены уже по максимуму: «lrwxrwxrwx».
При отключенном устройстве, эта символьная ссылка недоступна.
7) Вывод udevadm monitor (отключил девайс, запустил монитор, включил девайс):
Тут всего 4 строчки, но они мне как-то ничего не говорят.
В итоге, после проведения всех этих телодвижений, оказалось, что я могу уже загружать программы с помощью компилятора nbc:
Но загрузка данных с помощью питоновского скрипта nxt_push пока не работает.
Также, всё ещё не видит подключенного по usb устройства и запущенная под Wine система BricXX.
Честно говоря, я пока не понял до конца, в чём проблема.
Может быть нужно как-то менять права доступа к самому устройству, а не только к символьной ссылке?
Может нужно что-то городить с группами и групповыми правами?
Все симлинки имеют такие права доступа. MODE в правиле udev задает пермиссии не для симлинка а для самого девайс нода (в данном случае для /dev/bus/usb/002/009.
У тебя права получились другие — 0660, root:plugdev. Значит открыть этот девайс нод сможет только пользователь группы plugdev (ну и конечно root).
Почему получились другие права — видимо правило, которое ты добавил, перекрыто каким-то другим правилом. Порядок правил зависит от порядка, в котором udevd читает файлы с правилами, а читает он их в порядке лексиграфического возрастания имен. Поэтому файлам с правилами дают имена с числовыми префиксами. Попробуй назвать свой файл правил с префиксом 99-, может быть тогда твое правило станет последним.
Можно также попробовать запустить nbc -d с правами рута. Рут однозначно имеет право открывать любые девайс ноды. Если и с правами рута nbc -d не может загрузить программу на устройство, значит дело не в правах, и правилами udev ты ситуацию не поправишь.
И я бы не надеялся, что устройство «увидят» виндовые приложения, запущенные под вайном. https://www.winehq.org/wwn/331#USB Support in Wine
Порядок правил зависит от порядка, в котором udevd читает файлы с правилами, а читает он их в порядке лексиграфического возрастания имен. Поэтому файлам с правилами дают имена с числовыми префиксами. Попробуй назвать свой файл правил с префиксом 99-, может быть тогда твое правило станет последним.
Да, вот только что сам тоже обратил на это внимание!
Настроил всё то же самое на ноуте, с той лишь разницей, что на ноуте файл рулесов прописал с большим числом в начале и результаты вывода на ноуте отличались по правам доступа.
Сейчас исправил и на первом компе. Всё пучком стало с отображаемыми правами.
Можно также попробовать запустить nbc -d с правами рута.
Да, по факту, так оно сейчас и работало. Просто при установке компилятора прописывался конфиг через sudo visudo
с заменой имени пользователя, конечно.
Т.е. насколько я понимаю, тут nbc запускается с админскими правами без запроса пароля.
проверяются 4 первых параметра на соответствие
потом создаётся символьная ссылка с именем «nxt»
Не потом, а при условии соответствия условиям.
задаются (для этой ссылки?) права доступа «666»
symlink всегда имеет lrwxrwxrwx (ибо ему пофиг, он прозрачно перенаправляет туда, куда ссылается, и права будут те, что у реального файла/устройства/директории), права доступа присваиваются девайсу. Я представления не имею, что за девайс, но я бы назначил хотя бы группу, и разрешил доступ только этой группе.
устройство 009 было подключено, но права доступа к нему «crw-rw—-»
Попробуй вначале назначить права доступа, и только потом создать симлинк.
и права на эту ссылку были определены уже по максимуму
Но загрузка данных с помощью питоновского скрипта nxt_push пока не работает.
А права-то на запись есть?
Если от юзера, то нет.
Также, всё ещё не видит подключенного по usb устройства и запущенная под Wine система BricXX.
Тут ничем не помогу.
Может быть нужно как-то менять права доступа к самому устройству, а не только к символьной ссылке?
Права, назначенные на symlink (кроме прав на чтение), менять смысла нет, читай выше. Про изменение прав я уже написал выше — измени порядок правила (смести создание ссылки в конец строки).
Может нужно что-то городить с группами и групповыми правами?
Я бы сделал, разграничив права. Но учитывая, что тебе нужен доступ из Wine… не заморачивайся.
Так и не понял, загружает ли у тебя nbc -d программу в устройство под пользователем, или только под рутом, или вообще никак не загружает.
только пользователь группы plugdev
С этим разобрался, но подумал, что может быть поможет включение в рулесы описания новой группы типа GROUP=»nxt» с последующим добавлением нужному пользователю этой группы.
Сделал, проверил, но отличий не увидел, т.к. изначально nbc всё равно имел админские права и не обращал внимания на все ограничения, а во-вторых, права всё равно выставляются в 666, и наличие дополнительной группы вроде как и не нужно вообще (в отличие от прав 660).
Но, на всякий случай, я добавил группу, что называется, на вырост.
Так и не понял, загружает ли у тебя nbc -d программу в устройство под пользователем, или только по рутом, или вообще никак не загружает.
Сейчас nbc -d работает. По факту, он работает с админскими правами, но учитывая мои теперешние настройки, видимо, должен был бы работать и без админских прав.
Я пока не разобрался с другими способами загрузки программ, кроме как nbc -d. Но, это, вероятней всего, уже совсем другой вопрос.
Судя по всей этой писанине, nbc -d работал изначально. Под рутом или под пользователем входящим в группу plugdev.
Да, я понял некоторые свои косяки, и теперь изменил кое что в настройках.
1) Я создал единственный файл рулесов в начинающийся с большого номера (поскольку файлов с другими номерами в этом каталоге не было, то я изначально решил, что номер моего файла не очень важен, и это было ошибкой). Итак файл 80-legonxt.rules :
== — сравнение, = — присвоение.
Не потом, а при условии соответствия условиям.
Да, я знаю, просто не точно выразился.
В данном конфиге я оставил права «666» и добавил группу «nxt», на будущее, и чтобы не забыть.
2) После этого, я выполнил udevadm control —reload
3) Включил NXT и получил следующие выводы:
ls -l /dev/bus/usb/002/ :
Теперь все настройки более корректны, добавлена группа nxt и права доступа к устройству настроены на 666, как и было задумано.
Судя по всей этой писанине, nbc -d работал изначально.
В теории, видимо должен был. Но мне почему-то казалось, что он не работал. Я экспериментировал с разными программами, и много всего перепробовал с разными настройками.
Попробую потом на новом компе с нуля поставить только один nbc и поиграюсь с ним без настройки прав.
Группу создать не забыл? (%
добавлена группа nxt и права доступа к устройству настроены на 666
С одной стороны ты создаёшь группу и присваиваешь владение файлом устройства ей, с другой оставляешь доступ на запись всем остальным. Если тебе нужен доступ для всех, то выделять группу — просто лишняя трата времени.
Да, я написал, что соответствующую группу присвоил пользователю.
Если конкретно, то:
выделять группу — просто лишняя трата времени
Да, понятно. Просто я решил заранее выделить, чтобы потом не забыть.
Сейчас мне важно разобраться с другими аспектами работы с устройством, и я решил по максимуму открыть права доступа, чтобы не ломать голову.
Но потом, я планирую перенести всё в компьютерный класс, и там, возможно, ограничу права доступа по групповому принципу, прикрыв права до 660.
Источник