Como permito que um usuário não padrão use o dispositivo serial ttyUSB0?

35

Eu tenho um sistema Ubuntu 11.10 com 2 usuários:

  • O primeiro foi criado durante a instalação
  • O segundo foi criado depois. Pertence ao grupo sudoers.

Agora, o problema é que, quando o segundo tenta usar um dispositivo, ttyUSB0o seguinte erro é retornado:

"Could not open serial port /dev/ttyUSB0"

Consegui corrigi-lo usando:

sudo chown :second_user /dev/ttyUSB0

No entanto, quando eu desconecto o dispositivo e reconecto o problema, o problema volta.

Existe uma maneira de permitir que diferentes usuários acessem os dispositivos? Suponho que tenho que adicionar o usuário a um grupo específico. Atualmente o proprietário é roote o grupo é dialout. No entanto, não tenho certeza sobre o grupo e não sei como adicionar o usuário.

Obrigado!

Maverik
fonte

Respostas:

48

Como você notou, o /dev/ttyUSB0dispositivo tem o grupo de dialout. Tudo que você precisa fazer é adicionar o segundo usuário ao dialoutgrupo:

sudo adduser second_user dialout

O second_user precisará sair e fazer login novamente para que isso entre em vigor.

Jeremy Kerr
fonte
Obrigado Jeremy! Isso funciona também para acesso ssh? Porque quando eu acesso o pc via ssh vejo dois usuários com o mesmo nome. Suponho que um seja o usuário local e o outro o ssh. Como posso dar a propriedade ao usuário ssh?
Maverik
11
Isso permitirá que o second_user acesse a porta serial a partir de qualquer login, ssh ou local. Você não precisa atribuir propriedade a um login específico desse usuário.
Jeremy Kerr
2
Sim você está certo. Eu tive que sair e depois entrar novamente para ter o acesso vis ssh.
Maverik
Para sessões de um usuário que efetuou login automaticamente, é necessário reiniciar o computador, não apenas para efetuar novamente o login no X Window System. Observado com o Ubuntu 19.04.
tanius
12

O caminho fácil:

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

Salve este texto:

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

Desconecte e reconecte o dispositivo, e ele deve ser lido / gravado por qualquer usuário!

Orion Lawlor
fonte
Funciona em 14.04 para dispositivos caseiros no soquete ttyACM. Obrigado. +1
NonStandardModel
Você não precisa fazer isso antes da recarga para recarregar as regras? sudo udevadm control --reload?
Alexis Paques
Dependendo de qual sistema de arquivos armazena seu / etc / udev e qual versão do udev você possui, pode ser necessário recarregar explicitamente. Mas na maioria das máquinas que usei, o udev parece descobrir isso automaticamente (usando o inotify).
Orion Lawlor
Realmente não é assim que deve ser feito. Os dispositivos seriais USB devem pertencer ao grupo de discagem ou similar e o usuário deve ser adicionado a ele. No entanto, o que você está propondo faria sentido para outros tipos de dispositivos USB
Chris Stratton
7

Você poderia usar o UDEV. É um sistema que dispara toda vez que um dispositivo é conectado ou desconectado (entre outras coisas). Com ele, você cria várias coisas para acontecer, incluindo a configuração de permissões.

Execute sudoedit /etc/udev/rules.d/50-ttyusb.rulese cole isso lá:

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

Salve, saia e reconecte e você deve estar em funcionamento. Definir a permissão para 666 permite que qualquer pessoa grave no dispositivo.

Estou baseando isso nesta página, que é de alguns anos atrás, mas algo assim deve funcionar se a solução de Jeremy não funcionar.

Oli
fonte
11
Isso funcionou para mim, ou seja, eu usei as regras do udev, mas alterei a sintaxe para corresponder ao meu próprio caso. linux.m2osw.com/sane-cannot-find-any-scanners - observe que se você usar MODE = "0666", provavelmente não precisará do GRUPO. Apenas um ou outro seria útil.
Alexis Wilke
5

Fantástico - a solução UDEV fornecida aqui foi o bilhete para mim.

Instalei o programa CS-F3020_F5010_F5020 da Icom via Wine, criei o link para a porta Com da seguinte maneira:

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

Então percebi que precisava alterar as permissões em / dev / ttyUSB0 para permitir acesso. Isso funciona muito bem até você desconectar / reconectar o USB, então você precisa alterar novamente as permissões.

Tentei adicionar meu usuário ao grupo de discagem, mas isso não resolveu o problema por algum motivo.

O uso do UDEV resolve a peça final do quebra-cabeça. Agora eu posso programar meu rádio Icom usando Linux, conectar e desconectar o dispositivo USB / Serial sem mais problemas. Woohoo. Obrigado.

Tom
fonte
3

As regras do udev funcionam, mas, como estão escritas, têm o efeito colateral bastante desagradável de tornar todos os ttyUSB*dispositivos acessíveis a todos. Isso não é bom porque pode ser um risco à segurança, dependendo do que mais existe no sistema.

Em vez disso, use uma regra udev mais seletiva. Por exemplo, eu tenho um dispositivo USB que opera um conjunto de comutadores. No dmesg, quando está conectado, posso ver o ID do fabricante e o código do produto (mais ainda, nesse caso, um número de série do dispositivo). Eu posso adicionar:

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

nas linhas do kernel acima e a regra se aplicará apenas a esse dispositivo. Ainda melhor, em vez de atribuir apenas a MODEvariável, defina o grupo também:

GROUP="whatever", MODE="0660"

somente as pessoas do grupo ' whatever' terão acesso de gravação.

John Bowler

John Bowler
fonte