diff --git a/Resource.qrc b/Resource.qrc new file mode 100644 index 0000000..8c54a21 --- /dev/null +++ b/Resource.qrc @@ -0,0 +1,6 @@ + + + kernel-installer-template.sh + + + diff --git a/gxde-kernel-manager.pro b/gxde-kernel-manager.pro index 9c3c3ed..ab66745 100644 --- a/gxde-kernel-manager.pro +++ b/gxde-kernel-manager.pro @@ -28,3 +28,6 @@ qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target unix:!macx: LIBS += -lqtermwidget5 + +RESOURCES += \ + Resource.qrc diff --git a/kernel-installer-template.sh b/kernel-installer-template.sh new file mode 100644 index 0000000..e2f7ce3 --- /dev/null +++ b/kernel-installer-template.sh @@ -0,0 +1,3 @@ +#!/bin/bash +apt update +apt install ${KernelList} -y \ No newline at end of file diff --git a/kernelinstaller.cpp b/kernelinstaller.cpp index 3f309f8..467653a 100644 --- a/kernelinstaller.cpp +++ b/kernelinstaller.cpp @@ -6,7 +6,7 @@ #include #define MAX_TMP_NUM 1024 -#define MIN_TMP_NUM 1024 +#define MIN_TMP_NUM 0 KernelInstaller::KernelInstaller(QStringList kernelList, QWidget *parent) : QMainWindow(parent), @@ -16,20 +16,40 @@ KernelInstaller::KernelInstaller(QStringList kernelList, QWidget *parent) : 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("#/bin/bash") + 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() diff --git a/kernelinstaller.h b/kernelinstaller.h index 2b00cae..528a7c5 100644 --- a/kernelinstaller.h +++ b/kernelinstaller.h @@ -25,6 +25,7 @@ private: QString tempDir = "/tmp"; void StartInstaller(); + QString BuildKernelInstallerBash(QStringList kernelList, QString tempFilePath) const; }; #endif // KERNELINSTALLER_H