¿Cómo permito que un usuario no predeterminado use el dispositivo serie ttyUSB0?

35

Tengo un sistema Ubuntu 11.10 con 2 usuarios:

  • El primero fue creado durante la instalación.
  • El segundo lugar fue creado después. Pertenece al grupo de los sudoers.

Ahora el problema es que cuando el segundo intenta usar un dispositivo, ttyUSB0se devuelve el siguiente error:

"Could not open serial port /dev/ttyUSB0"

Pude arreglarlo usando:

sudo chown :second_user /dev/ttyUSB0

Sin embargo, cuando desconecto el dispositivo y lo vuelvo a conectar, el problema vuelve.

¿Hay alguna manera de permitir que diferentes usuarios accedan a los dispositivos? Supongo que tengo que agregar al usuario a un grupo específico. Actualmente el propietario es rooty el grupo es dialout. Sin embargo, no estoy seguro sobre el grupo y no sé cómo agregar al usuario.

¡Gracias!

Maverik
fuente

Respuestas:

48

Como habrás notado, el /dev/ttyUSB0dispositivo tiene el grupo de dialout. Todo lo que necesita hacer es agregar el segundo usuario al dialoutgrupo:

sudo adduser second_user dialout

second_user deberá cerrar sesión y volver a iniciarla para que esto surta efecto.

Jeremy Kerr
fuente
Gracias Jeremy! ¿Esto funciona también para el acceso ssh? Porque cuando accedo a la PC a través de ssh Veo dos usuarios con el mismo nombre. Supongo que uno es el usuario local y el otro el ssh. ¿Cómo puedo dar el propietario al usuario ssh?
Maverik
1
Esto permitirá second_user para acceder al puerto serie desde cualquier entrada, ssh o local. No es necesario asignar la propiedad a una entrada particular de ese usuario.
Jeremy Kerr
2
Sí, tiene usted razón. Tuve que cerrar la sesión de inicio de sesión y luego de nuevo para tener el acceso vis SSH.
Maverik
Para las sesiones de un usuario que inició sesión automáticamente, debe reiniciar la computadora, no solo para volver a iniciar sesión en el sistema X Window. Observado con Ubuntu 19.04.
Tanius
12

La manera fácil:

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

Guarda este texto:

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

¡Desenchufe el dispositivo y vuelva a enchufarlo, y debería ser leído / escrito por cualquier usuario!

Orion Lawlor
fuente
Funciona en 14.04 para dispositivos caseros en zócalo ttyACM. Gracias. +1
Modelo no estándar
¿No necesita hacer esto antes del enchufe para volver a cargar las reglas? sudo udevadm control --reload?
Alexis Paques
Dependiendo de qué sistema de archivos almacena su / etc / udev, y qué versión de udev tiene, es posible que deba volver a cargarlo explícitamente. Pero en la mayoría de las máquinas que he usado, udev parece resolverlo automáticamente (usando inotify).
Orion Lawlor
Realmente no es así como se supone que debe hacerse. Los dispositivos seriales USB deben pertenecer al grupo de marcado o similar, y el usuario debe agregarse a eso. Sin embargo
Chris Stratton
7

Podrías usar UDEV. Es un sistema que se activa cada vez que conecta o desconecta un dispositivo (entre otras cosas). Con él, usted escribe varias cosas para que sucedan, incluida la configuración de permisos.

Corre sudoedit /etc/udev/rules.d/50-ttyusb.rulesy pega esto allí:

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

Guarde, salga y vuelva a enchufar, y debería estar en funcionamiento. Establecer el permiso en 666 permite que cualquiera pueda escribir en el dispositivo.

Estoy basando esto en esta página, que es de hace unos años, pero algo como esto debería funcionar si la solución de Jeremy no lo hace.

Oli
fuente
1
Esto funcionó para mí, es decir, usé las reglas de udev, pero cambié la sintaxis para que coincida con mi propio caso. linux.m2osw.com/sane-cannot-find-any-scanners - tenga en cuenta que si usa MODE = "0666", probablemente no necesite el GRUPO. Solo uno u otro sería útil.
Alexis Wilke
5

Fantástico: la solución UDEV dada aquí fue el boleto para mí.

Instalé el programa CS-F3020_F5010_F5020 de Icom a través de Wine, creé el enlace para el puerto Com de la siguiente manera:

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

Luego me di cuenta de que necesitaba cambiar los permisos en / dev / ttyUSB0 para permitirme acceder a él. Eso funciona muy bien hasta que desconecte / vuelva a conectar el USB, entonces necesita volver a cambiar los permisos.

Intenté agregar mi usuario al grupo de marcado pero esto no resolvió el problema por alguna razón.

El uso de UDEV resuelve la pieza final del rompecabezas. Ahora puedo programar mi radio Icom usando Linux, enchufar y desconectar el dispositivo USB / Serie sin más problemas. Woohoo Gracias.

Tom
fuente
3

Las reglas de udev funcionan, pero tal como están escritas tienen el efecto secundario muy desagradable de hacer que todos los ttyUSB*dispositivos sean accesibles para todos. Esto no es bueno porque puede ser un riesgo de seguridad dependiendo de qué más hay en el sistema.

En su lugar, use una regla udev más selectiva. Por ejemplo, tengo un dispositivo USB que opera un conjunto de interruptores. Desde dmesg cuando está enchufado puedo ver la identificación del fabricante y el código del producto (más, incluso, en este caso, un número de serie para el dispositivo). Puedo agregar:

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

a las líneas de kernel anteriores y la regla solo se aplicará a ese dispositivo. Incluso mejor en lugar de asignar solo a la MODEvariable, configura el grupo también:

GROUP="whatever", MODE="0660"

entonces solo las personas en el grupo ' whatever' tendrán acceso de escritura.

John Bowler

John Bowler
fuente