从 QProcess 执行 /bin/login

Posted

技术标签:

【中文标题】从 QProcess 执行 /bin/login【英文标题】:Execute /bin/login from QProcess 【发布时间】:2019-07-24 13:57:51 【问题描述】:

我正在开发运行 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 是不可能的,有什么简单的方法吗? 最好的祝福, 米哈乌

【问题讨论】:

如果您有答案,请将其发布为答案而不是版本,并在 2 天内将其标记为正确。 好的!我马上去做! ; ) 谢谢 【参考方案1】:

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

【讨论】:

以上是关于从 QProcess 执行 /bin/login的主要内容,如果未能解决你的问题,请参考以下文章

QProcess 执行 python3 脚本无法正常工作

QProcess 无法执行简单的控制台程序

从 QThread 启动 QProcess [重复]

我怎么知道 QProcess 何时想要读取输入?

如何在 Linux unsing QProcess 下执行 shell 命令?

Qt:QProcess调用终端+脚本