Linux,Eclipse CDT以su运行

时间:2012-03-21 20:09:13

标签: c++ eclipse

我正在使用Eclipse CDT编写应用程序。该应用程序使用第三方API,它需要以sudo身份运行,以便打开原始套接字等。

在命令行中,我可以运行类似

的程序
su
./program

但是在Eclipse CDT环境中,如果按Ctrl + F11(Run-> Run Last Launched),它将无效,我想原因是我的Linux GUI登录不是su。

无论如何我可以在Eclipse CDT中以su(su密码)运行吗?

感谢。

2 个答案:

答案 0 :(得分:3)

您拥有的一些选项:

  1. 以root身份运行Eclipse。 (不是一个很好的主意,imho,但最简单的一个)

  2. 暂时允许您的用户使用该库。 (可能很乱)

  3. 创建一个新的运行配置并创建一个脚本来运行您的可执行文件。(您每次都要输入密码)。

  4. (@ Others,随意添加更多内容。)

答案 1 :(得分:1)

您可以创建一个运行配置,在该配置中使用sudo来运行您的应用程序。由于sudo以这种方式启动终端无法访问终端,因此需要在启动配置中设置SUDO_ASKPASS环境变量。步骤如下:

  1. 创建新的运行配置(为了完整性):

    1. 在eclipse中,右键单击您的可执行文件(即构建应用程序的结果)以打开上下文菜单
    2. 在上下文菜单中,转到方式运行 - > 运行配置...
    3. 在显示的运行配置窗口中,右键单击 C / C ++应用程序,然后单击新建
  2. 修改运行配置

    1. 在运行配置的标签中,将 C / C ++应用程序字段替换为
      /usr/bin/sudo
    2. 转到 Arguments 标签,然后输入可执行文件的路径,例如
      ./bin/my-executable。注意:sudo的工作目录是eclipse项目,因此路径应该是相对的。
    3. 如果您的可执行文件需要任何命令行参数,请添加,例如
      ./bin/my-executable arg1 arg2
  3. sudo添加一种询问密码的方法。

    1. 这是最棘手的部分。由于sudo在从(eclipse)gui运行时没有终端(tty),我们需要为它提供一个可以获取密码的程序,即 askpass 程序。有关详细信息,请参阅this stackoverflow answer
    2. 在我的系统(Ubuntu 15.04)上,程序包ssh-askpass-gnome提供了一个askpass程序,正如我通过运行dpkg --get-selections | grep askpass找到的那样。因为那仍然没有给我可执行文件名,我通过运行强制搜索
      sudo find -name *askpass*。无论如何,如果没有安装这样的实用程序,请使用您最喜欢的软件包管理器进行搜索。
    3. 一旦我们安装和/或找到了一个askpass程序,我们就可以继续在eclipse中创建我们的启动配置;从步骤2.3继续。
    4. 在“运行配置”窗口中,选择环境选项卡,然后单击 new
    5. 在弹出的对话框中,输入SUDO_ASKPASS作为名称,输入askpass程序的完整路径作为值,例如: /usr/bin/ssh-askpass
    6. 应用保存更改。
  4. 执行启动配置
    1. 运行配置窗口中,按运行以使用新创建的启动配置启动我们的可执行文件。
    2. 将出现一个用于输入sudo密码的弹出窗口。
    3. 成功输入密码后,我们的可执行文件将以root权限运行。