Come posso consentire a un utente non predefinito di utilizzare il dispositivo seriale ttyUSB0?


35

Ho un sistema Ubuntu 11.10 con 2 utenti:

  • Il primo è stato creato durante l'installazione
  • Il secondo invece è stato creato dopo. Appartiene al gruppo sudoers.

Ora il problema è che quando il secondo tenta di utilizzare un dispositivo ttyUSB0viene restituito il seguente errore:

"Could not open serial port /dev/ttyUSB0"

Sono stato in grado di risolverlo utilizzando:

sudo chown :second_user /dev/ttyUSB0

Tuttavia, quando disconnetto il dispositivo e lo ricollego, il problema ritorna.

C'è un modo per consentire a diversi utenti di accedere ai dispositivi? Suppongo di dover aggiungere l'utente a un gruppo specifico. Attualmente il proprietario è roote il gruppo lo è dialout. Tuttavia, non sono sicuro del gruppo e non so come aggiungere l'utente.

Grazie!

Risposte:


48

Come hai notato, il /dev/ttyUSB0dispositivo ha il gruppo di dialout. Tutto quello che devi fare è aggiungere il secondo utente al dialoutgruppo:

sudo adduser second_user dialout

second_user dovrà disconnettersi e riconnettersi nuovamente affinché questo abbia effetto.


Grazie Jeremy! Funziona anche con accesso ssh? Perché quando accedo al PC tramite SSH vedo due utenti con lo stesso nome. Suppongo che uno sia l'utente locale e l'altro quello ssh. Come posso dare la proprietà all'utente ssh?
Maverik,

1
Ciò consentirà a second_user di accedere alla porta seriale da qualsiasi login, ssh o local. Non è necessario assegnare la proprietà a un accesso specifico di quell'utente.
Jeremy Kerr,

2
Si hai ragione. Ho dovuto disconnettermi e quindi accedere di nuovo per avere accesso a vis ssh.
Maverik,

Per le sessioni di un utente che ha effettuato l'accesso automaticamente, è necessario riavviare il computer, non solo per accedere nuovamente a X Window System. Osservato con Ubuntu 19.04.
tanius

12

Il modo semplice:

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

Salva questo testo:

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

Scollega il dispositivo e ricollegalo e dovrebbe essere letto / scritto da qualsiasi utente!


Funziona in 14.04 per dispositivi fatti in casa nella presa ttyACM. Grazie. +1
Modello non standard

Non è necessario farlo prima del rimpiazzo per ricaricare le regole? sudo udevadm control --reload?
Alexis Paques,

A seconda di quale filesystem memorizza il tuo / etc / udev e quale versione di udev hai, potresti dover ricaricare esplicitamente. Ma sulla maggior parte delle macchine che ho usato, udev sembra capirlo automaticamente (usando inotify).
Orion Lawlor,

Non è proprio così che dovrebbe essere fatto. I dispositivi seriali USB dovrebbero appartenere al gruppo di dialout o simili e l'utente dovrebbe essere aggiunto a quello. Ciò che stai proponendo avrebbe comunque senso per altri tipi di dispositivi USB
Chris Stratton,

7

Puoi usare UDEV. È un sistema che si attiva ogni volta che si collega o scollega un dispositivo (tra le altre cose). Con esso, si copiano varie cose che accadono, tra cui l'impostazione delle autorizzazioni.

Esegui sudoedit /etc/udev/rules.d/50-ttyusb.rulese attaccalo qui:

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

Salva, esci e ricollega e dovresti essere attivo e funzionante. L'impostazione dell'autorizzazione su 666 consente a chiunque di scrivere sul dispositivo.

Lo sto basando su questa pagina di qualche anno fa, ma qualcosa del genere dovrebbe funzionare se la soluzione di Jeremy non funziona.


1
Questo ha funzionato per me, cioè ho usato le regole udev, ma ho cambiato la sintassi per adattarmi al mio caso. linux.m2osw.com/sane-cannot-find-any-scanners - nota che se usi MODE = "0666" probabilmente non hai bisogno del GRUPPO. Solo l'uno o l'altro sarebbe utile.
Alexis Wilke,

5

Fantastico: la soluzione UDEV fornita qui è stata il biglietto per me.

Ho installato il programma CS-F3020_F5010_F5020 di Icom tramite Wine, ho creato il collegamento per la porta Com come segue:

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

Poi ho capito che dovevo cambiare le autorizzazioni su / dev / ttyUSB0 per consentirmi di accedervi. Funziona benissimo fino a quando non si scollega / ricollega l'USB, quindi è necessario modificare nuovamente le autorizzazioni.

Ho provato ad aggiungere il mio utente al gruppo dialout ma questo non ha risolto il problema per qualche motivo.

L'uso di UDEV risolve l'ultimo pezzo del puzzle. Ora posso programmare la mia radio Icom usando Linux, collegare e scollegare il dispositivo USB / seriale senza ulteriori problemi. Woohoo. Grazie.


3

Le regole di udev funzionano ma, come scritto, hanno il brutto effetto collaterale di rendere tutti i ttyUSB*dispositivi accessibili a tutti. Questo non va bene perché potrebbe essere un rischio per la sicurezza a seconda di cos'altro si trova sul sistema.

Utilizzare invece una regola udev più selettiva. Ad esempio, ho un dispositivo USB che gestisce una serie di interruttori. Da dmesg quando è collegato posso vedere l'ID del produttore e il codice del prodotto (più, anche, in questo caso, un numero di serie per il dispositivo). Posso aggiungere:

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

alle righe del kernel sopra e la regola si applica solo a quel dispositivo. Ancora meglio piuttosto che assegnare alla MODEsola variabile impostare anche il gruppo:

GROUP="whatever", MODE="0660"

quindi solo le persone nel gruppo ' whatever' avranno accesso in scrittura.

John Bowler

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.