O programa conecta via USB somente se chamado com sudo

1

Eu fiz o download do pacote JLink e o descompactei para /home/mkru/ARM/JLink_Linux_V498a_x86_64 . Então eu adicionei este caminho para minha variável PATH. Quando tento executar o JLinkExe, recebo o seguinte erro:

Can not connect to J-Link via USB.

Quando tento executá-lo com o sudo, obtenho:

sudo: JLinkExe: command not found

A única maneira de executá-lo com sucesso é:

  1. para alterar o diretório com cd /home/mkru/ARM/JLink_Linux_V498a_x86_64
  2. execute sudo ./JLinkExe

Por que funciona assim e como posso mudar esse comportamento? Eu gostaria de usar JLinkExe sem sudo e sem a necessidade de estar neste diretório específico.

    
por Al Bundy 03.04.2015 / 14:05

2 respostas

2

Certos recursos exigem elevações de raiz. Interação USB de baixo nível é uma delas, eu experimentei o mesmo quando eu queria usar o meu robô LEGO NXT.

Primeiro de tudo, se o programa só funciona com sudo, mova-o para longe de sua casa. Sugiro movê-lo para /opt/jlink/ ou algo parecido

Para continuar a ter cd no diretório executável, adicione-o ao banho global em /etc/bash.bashrc , em vez de bashrc da sua casa. Além disso, defina um alias que execute automaticamente o programa com elevações de raiz. As adições ao arquivo podem ser assim:

export PATH=$PATH:/opt/jlink    #or wherever you moved it
alias JLinkExe='sudo /opt/jlink/JLinkExe'

Agora você pode executar o programa apenas digitando JLinkExe (você pode até atribuir um nome mais fácil de digitar no alias, por exemplo, simplesmente alias jlink='sudo /opt/jlink/JLinkExe' ).

No entanto, sua senha ainda será solicitada, pois o programa ainda exige a elevação da raiz. Para contornar isso, você pode criar uma entrada na sua configuração do sudo. Para isso, execute sudo visudo e adicione essa linha ao final do arquivo

mkru ALL=(ALL) NOPASSWD: /opt/jlink/JLinkExe

Depois de salvar isso, você (e somente você, ou seja, usuário mkru ), não deve ser solicitado a fornecer as elevações de raiz do programa mais. Lembre-se de que ainda estará sendo executado com privilégios elevados.

OBSERVAÇÃO: Se o programa tiver uma GUI, crie o alias como alias jlink='sudo gksudo /opt/jlink/JLinkExe' para evitar que atrapalhe as propriedades em seu diretório pessoal.

    
por s3lph 03.04.2015 / 14:50
1

Existe uma solução ligeiramente melhor. Basta copiar o arquivo 99-jlink.rules (parte do pacote baixado) para /etc/udev/rules.d/ e ele deve funcionar como um encanto.

    
por Thomas 20.03.2016 / 14:27