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

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

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

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

"Could not open serial port /dev/ttyUSB0"

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

[ 111]

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

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

Спасибо!

34
задан 10 November 2017 в 08:18

6 ответов

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

sudo adduser second_user dialout

second_user потребуется выйти из системы & amp; войдите снова, чтобы это вступило в силу.

0
ответ дан 10 November 2017 в 08:18

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

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

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

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

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

0
ответ дан 10 November 2017 в 08:18

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

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

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

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

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

0
ответ дан 10 November 2017 в 08:18

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

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

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

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

GROUP="whatever", MODE="0660"

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

Джон Боулер

0
ответ дан 10 November 2017 в 08:18

Фантастика - решение 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. Спасибо.

0
ответ дан 10 November 2017 в 08:18

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

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

Посмотрите его привязку (/dev/serial0 -> /dev/ttyS0):

pi@raspberrypi:~ $ ls -al /dev/serial*
lrwxrwxrwx 1 root root 5 Dec 30 18:03 /dev/serial0 -> ttyS0
lrwxrwxrwx 1 root root 7 Dec 30 18:03 /dev/serial1 -> ttyAMA0
pi@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 pi) может получить доступ к /dev/serial0.

0
ответ дан 7 January 2021 в 16:30

Другие вопросы по тегам:

Похожие вопросы: