Как разрешить пользователю, не являющемуся пользователем по умолчанию, использовать последовательное устройство ttyUSB0?

35

У меня есть система Ubuntu 11.10 с 2 пользователями:

  • Первый был создан во время установки
  • Второй вместо был создан после. Он принадлежит к группе sudoers.

Теперь проблема в том, что когда второй пытается использовать устройство, ttyUSB0возвращается следующая ошибка:

"Could not open serial port /dev/ttyUSB0"

Я смог исправить это с помощью:

sudo chown :second_user /dev/ttyUSB0

Однако, когда я отключаю устройство и снова подключаю его, проблема возвращается.

Есть ли способ разрешить различным пользователям доступ к устройствам? Я полагаю, я должен добавить пользователя в определенную группу. В настоящее время владелец rootи группа dialout. Однако я не уверен насчет группы и не знаю, как добавить пользователя.

Благодарность!

Maverik
источник

Ответы:

48

Как вы заметили, /dev/ttyUSB0устройство имеет группу dialout. Все, что вам нужно сделать, это добавить второго пользователя в dialoutгруппу:

sudo adduser second_user dialout

second_user должен выйти и снова войти в систему, чтобы это вступило в силу.

Джереми Керр
источник
Спасибо, Джереми! Это работает также для доступа SSH? Потому что когда я захожу на ПК через ssh, я вижу двух пользователей с одинаковыми именами. Я полагаю, что один локальный пользователь, а другой ssh. Как я могу передать право собственности пользователю ssh?
Маверик
1
Это позволит second_user получить доступ к последовательному порту через любой логин, ssh или локальный. Вам не нужно назначать право собственности на определенный логин этого пользователя.
Джереми Керр
2
Да ты прав. Я должен был выйти из системы, а затем войти снова, чтобы получить доступ к SSH.
Маверик
Для сеансов пользователя, который автоматически вошел в систему, вам необходимо перезагрузить компьютер, а не просто повторно войти в систему X Window. Замечено с Ubuntu 19.04.
Танус
12

Простой способ:

sudoedit /etc/udev/rules.d/50-myusb.rules

Сохранить этот текст:

KERNEL=="ttyUSB[0-9]*",MODE="0666"
KERNEL=="ttyACM[0-9]*",MODE="0666"

Отключите устройство и подключите его снова, и оно должно быть прочитано / записано любым пользователем!

Орион Лоулор
источник
Работает в 14.04 для самодельного устройства в разъеме ttyACM. Спасибо. +1
NonStandardModel
Вам не нужно делать это перед повторным подключением, чтобы перезагрузить правила? sudo udevadm control --reload?
Алексис Пакес
В зависимости от того, в какой файловой системе хранится ваш файл / etc / udev и какая у вас версия udev, вам может потребоваться перезагрузка явно. Но на большинстве машин, которые я использовал, udev, кажется, выясняет это автоматически (используя inotify).
Орион Лоулор
Это действительно не так, как это должно быть сделано. Последовательные USB-устройства должны принадлежать к группе удаленного доступа или аналогичной, и к ней следует добавить пользователя. Однако то, что вы предлагаете, имело бы смысл для других типов USB-устройств
Крис Страттон
7

Вы могли бы использовать UDEV. Это система, которая запускается каждый раз, когда подключается или отключается устройство (среди прочего). С его помощью вы пишете различные сценарии, в том числе задаете права доступа.

Запустите sudoedit /etc/udev/rules.d/50-ttyusb.rulesи вставьте это туда:

KERNEL=="ttyUSB[0-9]*",NAME="tts/USB%n",SYMLINK+="%k",GROUP="uucp",MODE="0666"

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

Я основываю это на этой странице, созданной несколько лет назад, но что-то подобное должно сработать, если решение Джереми не сработает .

Оли
источник
1
Это сработало для меня, то есть я использовал правила udev, но я изменил синтаксис в соответствии со своим собственным случаем. linux.m2osw.com/sane-cannot-find-any-scanners - обратите внимание, что если вы используете MODE = "0666", то вам, вероятно, не нужна ГРУППА. Только один или другой был бы полезен.
Алексис Уилке
5

Фантастика - решение UDEV, данное здесь, было билетом для меня.

Я установил программу Icom CS-F3020_F5010_F5020 через Wine, создал ссылку для Com-порта следующим образом:

ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1 but nothing. 

Затем я понял, что мне нужно изменить права доступа к / dev / ttyUSB0, чтобы я мог получить к нему доступ. Это прекрасно работает до тех пор, пока вы не отключите / снова не подключите USB, тогда вам необходимо изменить разрешения.

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

Использование UDEV решает последний кусок головоломки. Теперь я могу программировать свое радио Icom, используя Linux, подключая и отключая USB / Serial устройство без лишних хлопот. Woohoo. Спасибо.

Том
источник
3

Правила udev работают, но, как написано, у них есть очень неприятный побочный эффект - сделать все ttyUSB*устройства доступными для всех. Это не хорошо, потому что это может быть угрозой безопасности в зависимости от того, что еще находится в системе.

Вместо этого используйте более избирательное правило udev. Например, у меня есть USB-устройство, которое управляет набором переключателей. Из dmesg, когда он подключен, я вижу идентификатор производителя и код продукта (плюс, даже, в этом случае, серийный номер для устройства). Я могу добавить:

ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001"

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

GROUP="whatever", MODE="0660"

тогда только люди в группе whateverполучат доступ для записи.

Джон Боулер

Джон Боулер
источник