我正在使用Eclipse CDT编写应用程序。该应用程序使用第三部分API,它需要以sudo的身份运行,以便打开原始套接字等
在命令行中,我可以运行类似的程序
su
./program
但在Eclipse CDT环境中,如果我按Ctrl+F11(Run->Run Last Launched),它将不起作用,我想原因是我的Linux GUI登录不是su
我是否可以在EclipseCDT中以su身份(使用su密码)运行?
谢谢。
您拥有的一些选项:
-
以root用户身份运行Eclipse。(不是一个好主意,imho,但最简单的一个)
-
暂时允许用户使用该库。(可能很混乱)
-
创建一个新的运行配置,并制作一个脚本来运行可执行文件。(每次都必须输入密码)。
-
(@其他人,请随意添加更多内容。)
您可以创建一个运行配置,在该配置中使用sudo来运行应用程序。如果以这种方式启动终端,sudo
将无法访问终端,因此需要在启动配置中设置SUDO_ASKPASS
环境变量。步骤如下:
-
创建新的Run配置(为了完整性):
- 在eclipse中,右键单击可执行文件(即应用程序构建的结果)以打开上下文菜单
- 在上下文菜单中,转到Run as->Run configurations
- 在出现的"运行配置"窗口中,右键单击"C/C++应用程序",然后单击"新建"
-
修改运行配置
- 在运行配置的Main选项卡中,将C/C++应用程序字段替换为
/usr/bin/sudo
- 转到参数选项卡,并输入可执行文件的路径,例如
./bin/my-executable
。注意:sudo
的工作目录是eclipse项目,因此路径应该与之相对 - 如果可执行文件需要任何命令行参数,请添加这些参数,例如
./bin/my-executable arg1 arg2
- 在运行配置的Main选项卡中,将C/C++应用程序字段替换为
-
为
sudo
添加了一种询问密码的方式。- 这是最棘手的部分。由于
sudo
在从(eclipse)gui运行时没有终端(tty),我们需要为它提供一个可以获得密码的程序,即askpass程序。有关更多信息,请参阅此stackoverflow答案 - 在我的系统(Ubuntu 15.04)上,包
ssh-askpass-gnome
提供了一个askpass程序,正如我在运行dpkg --get-selections | grep askpass
时发现的那样。由于仍然没有给出可执行文件的名称,我通过运行
CCD_ 11。无论如何,如果没有安装这样的实用程序,请使用您最喜欢的软件包管理器进行搜索 - 一旦我们安装和/或定位了askpass程序,我们就可以继续在eclipse中创建我们的启动配置;从步骤2.3继续
- 在运行配置窗口中,选择环境选项卡,然后单击新建
- 在弹出的对话框中,输入
SUDO_ASKPASS
作为名称,输入askpass程序的完整路径作为值,例如/usr/bin/ssh-askpass
- 按应用保存我们的更改
- 这是最棘手的部分。由于
- 执行启动配置
- 在Run configurations窗口中,按Run以使用新创建的启动配置启动我们的可执行文件
- 将出现一个用于输入
sudo
密码的弹出窗口 - 成功输入密码后,我们的可执行文件将以root权限运行