仅当使用 sudo 调用时,程序才通过 USB 连接

仅当使用 sudo 调用时,程序才通过 USB 连接

我已下载 JLink 包并将其解压到/home/mkru/ARM/JLink_Linux_V498a_x86_64。然后我已将此路径添加到我的 PATH 变量中。当我尝试执行 JLinkExe 时,出现以下错误:

Can not connect to J-Link via USB.

当我尝试使用 sudo 执行它时,我得到:

sudo: JLinkExe: command not found

成功执行的唯一方法是:

  1. 使用以下方法更改目录cd /home/mkru/ARM/JLink_Linux_V498a_x86_64
  2. 然后运行sudo ./JLinkExe

为什么它会这样工作?我该如何改变这种行为?我想使用JLinkExewithout sudo,并且不需要在这个特定的目录中。

答案1

某些功能需要 root 权限。低级 USB 交互就是其中之一,当我想使用 LEGO NXT 机器人时,我也遇到了同样的情况。

首先,如果该程序只能在 sudo 下运行,请将其移出你的家。我建议将其移至/opt/jlink/或类似的地方

要继续将 添加cd到可执行目录中,请将其添加到 中的全局 .bashrc 中/etc/bash.bashrc,而不是主 .bashrc 中。此外,定义一个别名,该别名会自动以 root 权限执行程序。添加到文件中的内容可能如下所示:

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

现在您只需输入即可执行该程序JLinkExe(您甚至可以在别名中指定一个更容易输入的名称,例如简单地alias jlink='sudo /opt/jlink/JLinkExe')。

但是,由于程序仍然需要 root 权限,因此仍会要求您输入密码。为了避免这种情况,您可以在 sudo 设置中创建一个条目。为此,请执行sudo visudo并将此行添加到文件末尾

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

保存后,您(且仅限您,即用户mkru)将不再被要求授予程序 root 权限。请记住,它仍将以提升的权限运行。


笔记:如果程序具有 GUI,请创建别名以alias jlink='sudo gksudo /opt/jlink/JLinkExe'防止它弄乱主目录中的所有权。

答案2

有一个稍微好一点的解决方案。只需将99-jlink.rules文件(下载包的一部分)复制到其中/etc/udev/rules.d/,它就会像魔法一样工作。

相关内容