Jak zezwolić użytkownikom innym niż domyślny na używanie urządzenia szeregowego ttyUSB0?

35

Mam system Ubuntu 11.10 z 2 użytkownikami:

  • Pierwszy został stworzony podczas instalacji
  • Drugi natomiast powstał po. Należy do grupy sudoers.

Problem polega na tym, że gdy sekunda próbuje użyć urządzenia, ttyUSB0zwracany jest następujący błąd:

"Could not open serial port /dev/ttyUSB0"

Udało mi się to naprawić za pomocą:

sudo chown :second_user /dev/ttyUSB0

Jednak po odłączeniu urządzenia i ponownym podłączeniu problem powraca.

Czy istnieje sposób, aby umożliwić różnym użytkownikom dostęp do urządzeń? Przypuszczam, że muszę dodać użytkownika do określonej grupy. Obecnie właścicielem jest rooti grupa jest dialout. Nie jestem jednak pewien co do grupy i nie wiem, jak dodać użytkownika.

Dzięki!

Maverik
źródło

Odpowiedzi:

48

Jak zauważyłeś, /dev/ttyUSB0urządzenie ma grupę dialout. Wszystko, co musisz zrobić, to dodać drugiego użytkownika do dialoutgrupy:

sudo adduser second_user dialout

second_user będzie musiał się wylogować i zalogować ponownie, aby to zadziałało.

Jeremy Kerr
źródło
Dzięki Jeremy! Czy to działa również w przypadku dostępu ssh? Ponieważ kiedy uzyskuję dostęp do komputera przez ssh, widzę dwóch użytkowników o tej samej nazwie. Przypuszczam, że jeden jest użytkownikiem lokalnym, a drugi ssh. Jak mogę przekazać własność użytkownikowi ssh?
Maverik
1
Umożliwi to second_user dostęp do portu szeregowego z dowolnego loginu, ssh lub lokalnego. Nie musisz przypisywać własności do konkretnego loginu tego użytkownika.
Jeremy Kerr
2
Tak masz rację. Musiałem się wylogować, a następnie zalogować ponownie, aby uzyskać dostęp do ssh.
Maverik,
W przypadku sesji użytkownika, który był automatycznie zalogowany, musisz ponownie uruchomić komputer, a nie tylko ponownie zalogować się do X Window System. Obserwowane z Ubuntu 19.04.
tanius
12

Łatwa droga:

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

Zapisz ten tekst:

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

Odłącz urządzenie i podłącz je ponownie, i powinno być odczytywane / zapisywane przez dowolnego użytkownika!

Orion Lawlor
źródło
Działa w 14.04 dla domowego urządzenia w gnieździe ttyACM. Dzięki. +1
NonStandardModel
Czy nie musisz tego robić przed ponownym uruchomieniem, aby ponownie załadować reguły? sudo udevadm control --reload?
Alexis Paques,
W zależności od tego, który system plików przechowuje plik / etc / udev i którą wersję udev posiadasz, może być konieczne jawne przeładowanie. Ale na większości maszyn, z których korzystałem, udev wydaje się to automatycznie rozpoznawać (używając inotify).
Orion Lawlor
Tak naprawdę nie należy tego robić. Urządzenia szeregowe USB powinny należeć do grupy dialout lub podobnej, a użytkownik powinien być do tego dodany. To, co proponujesz, miałoby jednak sens w przypadku innych typów urządzeń USB
Chris Stratton,
7

Możesz użyć UDEV. Jest to system, który uruchamia się za każdym razem, gdy podłączasz lub odłączasz urządzenie (między innymi). Za jego pomocą możesz pisać różne rzeczy, w tym ustawiać uprawnienia.

Uruchom sudoedit /etc/udev/rules.d/50-ttyusb.rulesi wklej to tam:

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

Zapisz, zamknij i uruchom ponownie, a powinieneś być gotowy do pracy. Ustawienie uprawnienia na 666 pozwala każdemu pisać na urządzeniu.

Opieram to na tej stronie sprzed kilku lat, ale coś takiego powinno działać, jeśli rozwiązanie Jeremy'ego nie działa.

Oli
źródło
1
To działało dla mnie, tzn. Użyłem reguł udev, ale zmieniłem składnię, aby dopasować do własnego przypadku. linux.m2osw.com/sane-cannot-find-any-scanners - zauważ, że jeśli użyjesz MODE = "0666", prawdopodobnie nie potrzebujesz GRUPY. Przydałby się tylko jeden lub drugi.
Alexis Wilke,
5

Fantastycznie - podane tutaj rozwiązanie UDEV było dla mnie biletem.

Zainstalowałem program CS-F3020_F5010_F5020 firmy Icom za pośrednictwem Wine, utworzyłem łącze do portu Com w następujący sposób:

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

Potem zdałem sobie sprawę, że muszę zmienić uprawnienia na / dev / ttyUSB0, aby umożliwić mi dostęp do niego. Działa to świetnie, dopóki nie odłączysz / nie włączysz USB, a następnie musisz ponownie zmienić uprawnienia.

Próbowałem dodać mojego użytkownika do grupy połączeń, ale z jakiegoś powodu to nie rozwiązało problemu.

Korzystanie z UDEV rozwiązuje ostatni element układanki. Teraz mogę programować radio Icom za pomocą Linuksa, podłączać i odłączać urządzenie USB / szeregowe bez żadnych kłopotów. Woohoo. Dzięki.

Tomek
źródło
3

Reguły udev działają, ale jak napisano, mają bardzo nieprzyjemny efekt uboczny, czyniąc wszystkie ttyUSB*urządzenia dostępnymi dla wszystkich. Nie jest to dobre, ponieważ może to stanowić zagrożenie bezpieczeństwa w zależności od tego, co jeszcze jest w systemie.

Zamiast tego użyj bardziej selektywnej reguły udev. Na przykład mam urządzenie USB, które obsługuje zestaw przełączników. Z dmesg, gdy jest podłączony, widzę identyfikator producenta i kod produktu (a nawet, w tym przypadku, numer seryjny urządzenia). Mogę dodać:

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

do linii jądra powyżej, a reguła będzie miała zastosowanie tylko do tego urządzenia. Nawet lepiej niż przypisywanie samej MODEzmiennej ustaw także grupę:

GROUP="whatever", MODE="0660"

wtedy tylko ludzie w grupie ”whatever ” uzyskają dostęp do zapisu.

John Bowler

John Bowler
źródło