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

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

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

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

"Could not open serial port /dev/ttyUSB0"

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

sudo chown :second_user /dev/ttyUSB0

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

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

Спасибо!

7 ответов

Решение

Как вы заметили, /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/Serial устройство без лишних хлопот. Woohoo. Благодарю.

Правила 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'», но приложение без полномочий root по-прежнему не имело доступа к серийному номеру).

См. его связь ( -> /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.

      sudo usermod -a -G dialout $USER

Затем попросите этого пользователя выйти из системы и снова войти в нее. Командаgroupsсейчас покажетdialoutкак один из вариантов.

Теперь вы можете использовать последовательные терминалы, такие как (мой любимый), без sudo:

      picocom --baud 115200 /dev/ttyUSB0

Выходpicocomс Ctrl+ A, затем Ctrl+ X.

Использованная литература:

Изменено из моих личных заметок здесь: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_apps/serial_terminals_README.md#installation

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