У меня есть система Ubuntu 11.10 с двумя пользователями:
Теперь проблема в том, что когда второй пытается использовать устройство ttyUSB0
, возвращается следующая ошибка:
"Could not open serial port /dev/ttyUSB0"
Я смог исправить это с помощью:
[ 111]Однако, когда я отключаю устройство и снова подключаю его, проблема возвращается.
Есть ли способ разрешить различным пользователям доступ к устройствам? Я полагаю, я должен добавить пользователя в определенную группу. В настоящее время владельцем является root
, а группа - dialout
. Однако я не уверен насчет группы и не знаю, как добавить пользователя.
Спасибо!
Как вы заметили, устройство /dev/ttyUSB0
имеет группу dialout
. Все, что вам нужно сделать, это добавить второго пользователя в группу dialout
:
sudo adduser second_user dialout
second_user потребуется выйти из системы & amp; войдите снова, чтобы это вступило в силу.
Простой способ:
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 работают, но, как написано, они имеют очень неприятный побочный эффект - сделать все ttyUSB*
устройства доступными для всех. Это не хорошо, потому что это может быть угрозой безопасности в зависимости от того, что еще находится в системе.
Вместо этого используйте более избирательное правило udev. Например, у меня есть USB-устройство, которое управляет набором переключателей. Из dmesg, когда он подключен, я вижу идентификатор производителя и код продукта (плюс, даже, в этом случае, серийный номер для устройства). Я могу добавить:
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001"
к строкам ядра выше, и правило будет применяться только к этому устройству. Даже лучше, чем присваивать одну переменную MODE
, установить группу тоже:
GROUP="whatever", MODE="0660"
тогда только люди в группе 'whatever
' получат доступ на запись.
Джон Боулер
Фантастика - решение 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. Спасибо.
Вы также можете использовать 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
.