首页 > 解决方案 > 从 QProcess 执行 /bin/login

问题描述

我正在研究运行 linux 的嵌入式系统(没有 X11 服务器)。我希望我的 Qt 应用程序以 root 权限启动,然后从 spawn new QProcess 中启动,它应该是“/bin/login user_name”,然后提供密码。问题是通常在控制台上打印的“密码:”(我假设它是标准输出)没有出现,并且 QProcess.write() 似乎根本不起作用。如果我以普通用户身份运行此 QProcess,我会在重定向的 stderr 处收到错误消息(通过 setStandardErrorFile)。我认为我在理解 /bin/login 方面存在一般性问题。

我尝试过了

echo "userPassword" > /proc/LOGIN_PID/fd/0 

从不同的控制台,但它也不起作用。

我用 c++ 写的函数是这样的:

void BashWrapper::bashEcho(QStringList t_echo){
    QString bash = "/bin/login";

    QStringList args(t_echo[0]);

    static QProcess *newProc = new QProcess();

    newProc->setStandardOutputFile("/dev/pts/2");
    newProc->setStandardErrorFile("/dev/pts/2");

    newProc->start(bash,args);

    if(newProc->waitForStarted()){
        qDebug() << newProc->state();
    }
    newProc->write(t_echo[1].toUtf8());

    if(!newProc->waitForFinished(10000)){
        qDebug() << "timeout";
    }
    else{
        qDebug() << "finished";
    }
}

t_echo 包含 ("user_name", "userPassword")

我想要做的是生成新程序(比如说/bin/myApp)作为用户名。我认为以该用户身份登录并将 .bash_profile 设置为运行 /bin/myApp 会很容易、无痛并且......安全吗?如果从应用程序使用 /bin/login 是不可能的,有什么简单的方法吗?最好的问候,米哈乌

标签: c++linuxqt

解决方案


好的,我在这里找到了答案: https ://www.thegeekstuff.com/2010/10/expect-examples/有一个执行 su 命令的示例脚本,只需将其更改为 /bin/login 即可让我传递密码通过一些额外的脚本。


推荐阅读