#include "kernelinstaller.h" #include "ui_kernelinstaller.h" #include <ctime> #include <cstdlib> #include <QFile> #define MAX_TMP_NUM 1024 #define MIN_TMP_NUM 0 KernelInstaller::KernelInstaller(QStringList kernelList, QWidget *parent) : QMainWindow(parent), ui(new Ui::KernelInstaller) { ui->setupUi(this); this->kernelList = kernelList; terminal = new QTermWidget(0); terminal->setColorScheme("DarkPastels"); terminal->setAutoClose(true); ui->verticalLayout->addWidget(terminal); StartInstaller(); } void KernelInstaller::StartInstaller() { terminal->setShellProgram("/usr/bin/pkexec"); // 随机生成目录 srand(time(0)); int randomNumber = (rand() % (MAX_TMP_NUM - MIN_TMP_NUM)) + 1; // 左闭右闭 QString tempPath = tempDir + "/gxde-kernel-manager-installer-" + QString::number(randomNumber) + ".sh"; QFile file(tempPath); file.open(QFile::WriteOnly); file.write(BuildKernelInstallerBash(this->kernelList, tempPath).toUtf8()); file.close(); terminal->setArgs(QStringList() << "bash" << tempPath); terminal->startShellProgram(); } QString KernelInstaller::BuildKernelInstallerBash(QStringList kernelList, QString tempFilePath) const { // 转换数据 QString kernel = ""; foreach (QString name, kernelList) { kernel += name + " "; } QFile file(":/shell/kernel-installer-template.sh"); file.open(QFile::ReadOnly); QString data = file.readAll(); data = data.replace("${KernelList}", kernel); data += "\nrm -v '" + tempFilePath + "'"; file.close(); return data; } KernelInstaller::~KernelInstaller() { delete ui; }