我已下载 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
成功执行的唯一方法是:
- 使用以下方法更改目录
cd /home/mkru/ARM/JLink_Linux_V498a_x86_64
- 然后运行
sudo ./JLinkExe
为什么它会这样工作?我该如何改变这种行为?我想使用JLinkExe
without 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/
,它就会像魔法一样工作。