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

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

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

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

"Could not open serial port /dev/ttyUSB0"

Я смог исправить это, используя:

sudo chown :second_user /dev/ttyUSB0

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

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

Спасибо!

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

sudo adduser second_user dialout

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

Легкий способ:

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

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

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

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

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

Бежать sudoedit /etc/udev/rules.d/50-ttyusb.rules и засунь это туда:

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

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

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

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

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

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

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

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

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

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

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

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

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

GROUP="whatever", MODE="0660"

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

Джон Боулер

Вы также можете использовать chmod (Я сделал это на Raspberry linux).

В моем случае, sudo adduser pi dialout не сработало ("Пользователь "pi" уже является участником "dialout"", но некорневое приложение по-прежнему не имело доступа к serial).

Смотрите его связь (/dev/serial0 -> /dev/ttyS0):

pi@raspberrypi:~ $ ls -al /dev/serial*lrwxrwxrwx 1 root root 5 Dec 30 18:03 /dev/serial0 -> ttyS0lrwxrwxrwx 1 root root 7 Dec 30 18:03 /dev/serial1 -> ttyAMA0pi@raspberrypi:~ $ ls -al /dev/ttyS*crw--w---- 1 root tty 4, 64 Jan  7 16:07 /dev/ttyS0

И обновите разрешение на чтение / запись для всех пользователей:

pi@raspberrypi:~ $ sudo chmod ugo+rw /dev/ttyS0

Теперь пользовательский код (например, 'пи' пользователь dotnet core application) может получить доступ /dev/serial0.