вторник, 13 марта 2012 г.

Serial port и групповая политика

Нередко при программировании устройств приходится иметь дело с com-портом. Если вы пользователь Windows, система беззаботно дает вам возможность читать и писать в это устройство. Естественно, в Linux всё не так. Запуск простейшей программы чтения строки из порта вызовет  "Permission denied", если вы не суперпользователь. Некоторые, конечно, будут писать sudo ./имя_программы после каждой компиляции, но это не наилучшее решение, на мой взгляд. И если вы компилируете свою программу в консоли, это будет не так заметно, но вот при разработке, скажем, в Qt Creator постоянный запуск будет надоедать.
Первое решение "в лоб" - программировать под суперпользователем. Однако, оно небезопасно - зачем предоставлять доступ ко всем частям системы, если нужен-то один файл, да и есть ещё один аспект. Если вдруг понадобится изменить свои исходники во время обычной работы, система вежливо отправит нас за получением прав - в начале процесса программирования мы создали файлы под root и, значит, их владелец - root. Изменение обычным пользователем невозможно.
Для того, чтобы избавится от всех этих проблем, мы можем воспользоваться функциями администрирования операционной системы Linux, настроив доступ так, как нам нужно.

Известно, что для каждого файла (и папки) можно настроить права доступа. В основном, они определяются:

  • правами на чтение
  • правами на запись
  • правами на исполнение (для исполняемых файлов)

Кроме того, Линукс, как многопользовательская система, разграничивает доступ в зависимости от пользователя и группы. Под группой в данном случае понимается набор пользователей, объединенных под каким-либо именем.В результате мы можем задавать вышеуказанные атрибуты для:

  • владельца файла
  • группы
  • всех остальных (пользователей, не являющихся владельцем и не входящих в указанную группу)
Конечно, для любого файла можно сменить пользователя или группу (chown, chgrp), однако для одного заданного com-порта это будет неудобно - сделав себя "хозяином" одного порта, установив необходимые атрибуты, мы можем записывать и читать только в него, а не в com-порты в целом. Как же сделать так, чтобы при подключении ещё одного устройства нам не приходилось всё время изменять его права?
Для этого придуманы стандартные пользовательские группы. Став их членом, пользователь получает доступ к определенному классу задач.
Теперь узнаем, к какой группы принадлежит файл-порт ttyUSB0.
Заходим в /dev. Выполняем " ls -l ". Напротив, нужного файла видим группу dialout. Она-то нам и нужна. 
В операционной системе OpenSuse самый простой способ изменить принадлежность пользователя к группам - Yast/Управление пользователями и группами. Добавляем себя в группу dialout. Всё! Настройка завершена!
З.Ы. Сразу после добавления в группу доступ к файлу может и не появится - сделайте logout и войдите снова.






Комментариев нет:

Отправить комментарий