c++ - 从 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 是不可能的,有什么简单的方法吗?最好的问候,米哈乌
解决方案
好的,我在这里找到了答案: https ://www.thegeekstuff.com/2010/10/expect-examples/有一个执行 su 命令的示例脚本,只需将其更改为 /bin/login 即可让我传递密码通过一些额外的脚本。
推荐阅读
- eclipse - Eclipse 图标许可证信息
- javascript - Apps 脚本 | 如何根据列中的值归档特定行
- sql - 我可以创建一个表,其列的名称类似于另一个表的字段值,由 SELECT 语句返回
- c# - 如何使用 c# 对以下文本进行模式匹配?
- excel - Excel 动态数据验证 + 命名范围 + 无效类型数据——损坏或从未工作过?
- c# - 如何在不同节点中实现最大值的 linq 表达式?
- python - 遍历目录中的txt文件,保存文件名
- javascript - 传单映射 AJAX - 未捕获的类型错误:无法读取属性“0”
- java - 无法向 Prometheus 公开 Flink 指标
- python - DBus 信号接收器从不被调用