From 07c164a11d9741cde4a706a80bc8b122f08d48d8 Mon Sep 17 00:00:00 2001 From: gfdgd_xi <3025613752@qq.com> Date: Tue, 23 Apr 2024 22:50:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=89=E8=A3=85=E5=86=85=E6=A0=B8=E7=9A=84?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Resource.qrc | 6 ++++++ gxde-kernel-manager.pro | 3 +++ kernel-installer-template.sh | 3 +++ kernelinstaller.cpp | 24 ++++++++++++++++++++++-- kernelinstaller.h | 1 + 5 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 Resource.qrc create mode 100644 kernel-installer-template.sh 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