Як дозволити користувачеві, який не використовується за замовчуванням, використовувати серійний пристрій ttyUSB0?


35

У мене система Ubuntu 11.10 з двома користувачами:

  • Перший був створений під час встановлення
  • Другий натомість був створений після. Належить до групи судерів.

Тепер проблема полягає в тому, що коли друга намагається використовувати пристрій ttyUSB0, повертається така помилка:

"Could not open serial port /dev/ttyUSB0"

Я зміг виправити це за допомогою:

sudo chown :second_user /dev/ttyUSB0

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

Чи є спосіб дозволити різним користувачам отримати доступ до пристроїв? Я припускаю, що я повинен додати користувача до певної групи. В даний час власник є, rootа група є dialout. Однак я не впевнений у групі, і не знаю, як додати користувача.

Спасибі!

Відповіді:


48

Як ви вже помітили, /dev/ttyUSB0пристрій має групу dialout. Все, що вам потрібно зробити - це додати другого користувача до dialoutгрупи:

sudo adduser second_user dialout

Друге_користувач повинен буде вийти з системи та знову увійти, щоб це набуло чинності.


Спасибі Джеремі! Чи працює це також для доступу до ssh? Тому що, коли я отримую доступ до ПК через ssh, я бачу двох користувачів з однаковою назвою. Я припускаю, що один - локальний користувач, а інший - ssh. Як я можу надати право власності на користувача ssh?
Маверик

1
Це дозволить second_user отримати доступ до послідовного порту з будь-якого входу, ssh або локального. Вам не потрібно призначати право власності на певний логін цього користувача.
Джеремі Керр

2
Так, ти правий. Мені довелося вийти, а потім знову увійти, щоб мати доступ до ssh.
Маверик

Для сеансів користувача, який автоматично входив у систему, вам потрібно перезавантажити комп'ютер, а не просто повторно входити в систему X Window System. Спостерігав за 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).
Orion Lawlor

Це дійсно не так, як це слід робити. 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, яке було дано тут, було для мене квитком.

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

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

Тоді я зрозумів, що потрібно змінити дозволи на / dev / ttyUSB0, щоб дозволити мені отримати доступ до нього. Це чудово працює, поки ви не відключите / відключите USB-роз'єм, тоді вам потрібно повторно змінити дозволи.

Я спробував додати свого користувача до діалогової групи, але це чомусь не вирішило проблему.

Використання UDEV вирішує заключний фрагмент пазла. Тепер я можу програмувати своє радіо Icom за допомогою Linux, підключати та відключати USB / послідовний пристрій без зайвої суєти. Woohoo. Спасибі.


3

Правила udev працюють, але як написано, вони мають дуже неприємний побічний ефект - зробити всі ttyUSB*пристрої доступними для всіх. Це не добре, оскільки це може бути ризиком для безпеки залежно від того, що ще є в системі.

Замість цього використовуйте більш вибіркове правило udev. Наприклад, у мене є USB-пристрій, який працює набором комутаторів. З dmesg, коли він підключений, я бачу ідентифікатор виробника та код товару (плюс навіть у цьому випадку серійний номер пристрою). Я можу додати:

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

до рядків ядра вище, і правило стосується лише цього пристрою. Навіть краще, ніж замість присвоєння MODEзмінної, встановлюйте групу також:

GROUP="whatever", MODE="0660"

тоді лише люди в групі ' whatever' отримають доступ до запису.

Джон Боулер

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.