Como usar a porta serial virtual sem privilégios de root?

0

Antecedentes: quero usar este adaptador Wifi-a-Serial controlar um telescópio via Stellarium rodando no Kubuntu 16.04 (64 Bits).

Eu criei uma porta COM virtual usando socat com esta linha de comando:

$ sudo socat pty,link=/dev/virtualcom0,raw tcp:10.0.0.1:4030

e vejo o novo dispositivo aqui:

$ ls -l /dev/virtualcom0 
lrwxrwxrwx 1 root root 10 2017-07-03 09:05 virtualcom0 -> /dev/pts/6
$ ls -l /dev/pts/6
crw--w---- 1 root tty 136, 6 2017-07-03 09:05 /dev/pts/6

Tentando usar /dev/virtualcom0 , por exemplo com picocomm funciona enquanto eu executar picosomm com privilégios de root. Mas quando tento usar a porta com privilégios de usuário padrão, recebo um erro:

$ picocom /dev/virtualcom0 --baud 9600 --imap lfcrlf
FATAL: cannot open /dev/virtualcom0: Permission denied

Alguma idéia de como tornar a porta virtual acessível com direitos de usuário padrão, talvez definindo uma regra especial do udev para isso?

Editar:

Seguindo a abordagem preferida da resposta do dirkt, estou usando agora:

$ socat pty,link=/tmp/virtualcom0,raw tcp:10.0.0.1:4030

Note que isso também funciona bem no macOS (depois de instalado o socat via homebrew).

    
por Joe 03.07.2017 / 09:32

1 resposta

2

Eu não entendo completamente porque você precisa de uma porta serial virtual. O que acontece se você apenas telnet 10.0.0.1 4030 ?

A próxima etapa é executar socat sem sudo como usuário normal e escolher um caminho acessível, por exemplo, /tmp/vcom0 (ou qualquer outro).

Se isso não funcionar por algum motivo e você puder fazer sudo , tente alterar o proprietário

sudo chown your_username /dev/virtualcom0

ou permissões

sudo chmod o+rw /dev/virtualcom0

Editar

Não tente criar regras udev para um determinado pseudo tty. Primeiro, você não sabe de antemão qual pseudo-tty ele é, segundo, pseudo-tty's são usados em todo o lugar, e outros programas falharão se eles criarem essa pseudo-tty para outro usuário.

A solução mais limpa é usar variante (1) ( /tmp/vcom0 ).

Se você insistir nas outras variantes, faça um script curto que contenha o socat e o chmod / chown e execute esse script com sudo . Você pode seguir os links de símbolo com readlink , se necessário.

Outra alternativa é escrever um script curto que chame ambos socat como usuário normal e stellarium com o link que criou, e que mate socat quando estiver pronto. Use esse script para iniciar stellarium .

    
por 03.07.2017 / 11:45