From 3f6c4a47ffeb82065d2b878a8ce12744a82ec670 Mon Sep 17 00:00:00 2001 From: gfdgd_xi <3025613752@qq.com> Date: Sat, 11 Nov 2023 19:38:02 +0800 Subject: [PATCH] =?UTF-8?q?Qemu=E5=AE=89=E8=A3=85=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=89=E8=A3=85qemu-efi-aarch64?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- QemuSystemInstall.sh | 2 +- VM-source/mainwindow_ui.py | 349 +++++++++++++++++++++++++++++++++++++ 2 files changed, 350 insertions(+), 1 deletion(-) create mode 100644 VM-source/mainwindow_ui.py diff --git a/QemuSystemInstall.sh b/QemuSystemInstall.sh index 3760e0c..db49b46 100755 --- a/QemuSystemInstall.sh +++ b/QemuSystemInstall.sh @@ -1,6 +1,6 @@ #!/bin/bash sudo apt update -sudo apt install qemu-system qemu-user qemu-efi -y +sudo apt install qemu-system qemu-user qemu-efi qemu-efi-aarch64 -y sudo apt install qemu-user-static binfmt-support qemu-system-gui -y echo 安装完成!按回车键退出 read diff --git a/VM-source/mainwindow_ui.py b/VM-source/mainwindow_ui.py new file mode 100644 index 0000000..e9868de --- /dev/null +++ b/VM-source/mainwindow_ui.py @@ -0,0 +1,349 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/mainwindow.ui' +# +# Created by: PyQt5 UI code generator 5.15.6 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1058, 512) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + MainWindow.setWindowIcon(icon) + self.centralWidget = QtWidgets.QWidget(MainWindow) + self.centralWidget.setObjectName("centralWidget") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralWidget) + self.horizontalLayout.setContentsMargins(11, 11, 11, 11) + self.horizontalLayout.setSpacing(6) + self.horizontalLayout.setObjectName("horizontalLayout") + self.tabWidget = QtWidgets.QTabWidget(self.centralWidget) + self.tabWidget.setTabShape(QtWidgets.QTabWidget.Rounded) + self.tabWidget.setObjectName("tabWidget") + self.tab = QtWidgets.QWidget() + self.tab.setObjectName("tab") + self.verticalLayout = QtWidgets.QVBoxLayout(self.tab) + self.verticalLayout.setContentsMargins(11, 11, 11, 11) + self.verticalLayout.setSpacing(6) + self.verticalLayout.setObjectName("verticalLayout") + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setSpacing(6) + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.label = QtWidgets.QLabel(self.tab) + self.label.setObjectName("label") + self.horizontalLayout_2.addWidget(self.label) + self.isoPath = QtWidgets.QLineEdit(self.tab) + self.isoPath.setObjectName("isoPath") + self.horizontalLayout_2.addWidget(self.isoPath) + self.browser = QtWidgets.QPushButton(self.tab) + self.browser.setObjectName("browser") + self.horizontalLayout_2.addWidget(self.browser) + self.verticalLayout.addLayout(self.horizontalLayout_2) + self.horizontalLayout_3 = QtWidgets.QHBoxLayout() + self.horizontalLayout_3.setSpacing(6) + self.horizontalLayout_3.setObjectName("horizontalLayout_3") + self.label_2 = QtWidgets.QLabel(self.tab) + self.label_2.setObjectName("label_2") + self.horizontalLayout_3.addWidget(self.label_2) + self.systemVersion = QtWidgets.QComboBox(self.tab) + self.systemVersion.setObjectName("systemVersion") + self.systemVersion.addItem("") + self.systemVersion.addItem("") + self.systemVersion.addItem("") + self.systemVersion.addItem("") + self.systemVersion.addItem("") + self.systemVersion.addItem("") + self.systemVersion.addItem("") + self.systemVersion.addItem("") + self.systemVersion.addItem("") + self.systemVersion.addItem("") + self.horizontalLayout_3.addWidget(self.systemVersion) + self.horizontalLayout_3.setStretch(1, 1) + self.verticalLayout.addLayout(self.horizontalLayout_3) + self.horizontalLayout_7 = QtWidgets.QHBoxLayout() + self.horizontalLayout_7.setSpacing(6) + self.horizontalLayout_7.setObjectName("horizontalLayout_7") + self.label_4 = QtWidgets.QLabel(self.tab) + self.label_4.setObjectName("label_4") + self.horizontalLayout_7.addWidget(self.label_4) + self.vmChooser = QtWidgets.QComboBox(self.tab) + self.vmChooser.setDuplicatesEnabled(False) + self.vmChooser.setObjectName("vmChooser") + self.vmChooser.addItem("") + self.vmChooser.addItem("") + self.horizontalLayout_7.addWidget(self.vmChooser) + self.horizontalLayout_7.setStretch(1, 1) + self.verticalLayout.addLayout(self.horizontalLayout_7) + self.horizontalLayout_4 = QtWidgets.QHBoxLayout() + self.horizontalLayout_4.setSpacing(6) + self.horizontalLayout_4.setObjectName("horizontalLayout_4") + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_4.addItem(spacerItem) + self.getQemu = QtWidgets.QPushButton(self.tab) + self.getQemu.setObjectName("getQemu") + self.horizontalLayout_4.addWidget(self.getQemu) + self.kvmTest = QtWidgets.QPushButton(self.tab) + self.kvmTest.setObjectName("kvmTest") + self.horizontalLayout_4.addWidget(self.kvmTest) + self.qemuSetting = QtWidgets.QPushButton(self.tab) + self.qemuSetting.setObjectName("qemuSetting") + self.horizontalLayout_4.addWidget(self.qemuSetting) + self.addQemuDiskButton = QtWidgets.QPushButton(self.tab) + self.addQemuDiskButton.setObjectName("addQemuDiskButton") + self.horizontalLayout_4.addWidget(self.addQemuDiskButton) + self.saveQemuDiskButton = QtWidgets.QPushButton(self.tab) + self.saveQemuDiskButton.setObjectName("saveQemuDiskButton") + self.horizontalLayout_4.addWidget(self.saveQemuDiskButton) + self.delQemuDiskButton = QtWidgets.QPushButton(self.tab) + self.delQemuDiskButton.setObjectName("delQemuDiskButton") + self.horizontalLayout_4.addWidget(self.delQemuDiskButton) + self.getvbox = QtWidgets.QPushButton(self.tab) + self.getvbox.setObjectName("getvbox") + self.horizontalLayout_4.addWidget(self.getvbox) + self.install = QtWidgets.QPushButton(self.tab) + self.install.setObjectName("install") + self.horizontalLayout_4.addWidget(self.install) + self.verticalLayout.addLayout(self.horizontalLayout_4) + self.textBrowser_3 = QtWidgets.QTextBrowser(self.tab) + self.textBrowser_3.setOpenLinks(False) + self.textBrowser_3.setObjectName("textBrowser_3") + self.verticalLayout.addWidget(self.textBrowser_3) + self.tabWidget.addTab(self.tab, "") + self.tab_3 = QtWidgets.QWidget() + self.tab_3.setObjectName("tab_3") + self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.tab_3) + self.horizontalLayout_5.setContentsMargins(11, 11, 11, 11) + self.horizontalLayout_5.setSpacing(6) + self.horizontalLayout_5.setObjectName("horizontalLayout_5") + self.textBrowser = QtWidgets.QTextBrowser(self.tab_3) + self.textBrowser.setUndoRedoEnabled(False) + self.textBrowser.setOpenLinks(False) + self.textBrowser.setObjectName("textBrowser") + self.horizontalLayout_5.addWidget(self.textBrowser) + self.tabWidget.addTab(self.tab_3, "") + self.tab_2 = QtWidgets.QWidget() + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.tab_2.sizePolicy().hasHeightForWidth()) + self.tab_2.setSizePolicy(sizePolicy) + self.tab_2.setObjectName("tab_2") + self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.tab_2) + self.horizontalLayout_6.setContentsMargins(11, 11, 11, 11) + self.horizontalLayout_6.setSpacing(6) + self.horizontalLayout_6.setObjectName("horizontalLayout_6") + self.verticalLayout_3 = QtWidgets.QVBoxLayout() + self.verticalLayout_3.setSpacing(6) + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.label_3 = QtWidgets.QLabel(self.tab_2) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth()) + self.label_3.setSizePolicy(sizePolicy) + self.label_3.setMinimumSize(QtCore.QSize(200, 200)) + self.label_3.setMaximumSize(QtCore.QSize(200, 200)) + self.label_3.setStyleSheet("border-image: url(:/deepin-wine-runner.png);") + self.label_3.setText("") + self.label_3.setObjectName("label_3") + self.verticalLayout_3.addWidget(self.label_3) + spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_3.addItem(spacerItem1) + self.horizontalLayout_6.addLayout(self.verticalLayout_3) + self.textBrowser_2 = QtWidgets.QTextBrowser(self.tab_2) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.textBrowser_2.sizePolicy().hasHeightForWidth()) + self.textBrowser_2.setSizePolicy(sizePolicy) + self.textBrowser_2.setOpenLinks(False) + self.textBrowser_2.setObjectName("textBrowser_2") + self.horizontalLayout_6.addWidget(self.textBrowser_2) + self.tabWidget.addTab(self.tab_2, "") + self.horizontalLayout.addWidget(self.tabWidget) + MainWindow.setCentralWidget(self.centralWidget) + self.CPUValue = QtWidgets.QStatusBar(MainWindow) + self.CPUValue.setStatusTip("") + self.CPUValue.setObjectName("CPUValue") + MainWindow.setStatusBar(self.CPUValue) + self.menuBar = QtWidgets.QMenuBar(MainWindow) + self.menuBar.setGeometry(QtCore.QRect(0, 0, 1058, 23)) + self.menuBar.setObjectName("menuBar") + self.menuVM = QtWidgets.QMenu(self.menuBar) + self.menuVM.setObjectName("menuVM") + MainWindow.setMenuBar(self.menuBar) + self.action = QtWidgets.QAction(MainWindow) + self.action.setObjectName("action") + self.action_2 = QtWidgets.QAction(MainWindow) + self.action_2.setObjectName("action_2") + self.addQemuDisk = QtWidgets.QAction(MainWindow) + self.addQemuDisk.setObjectName("addQemuDisk") + self.delQemuDisk = QtWidgets.QAction(MainWindow) + self.delQemuDisk.setObjectName("delQemuDisk") + self.actionVMInstallLog = QtWidgets.QAction(MainWindow) + self.actionVMInstallLog.setObjectName("actionVMInstallLog") + self.actionVMRunlLog = QtWidgets.QAction(MainWindow) + self.actionVMRunlLog.setObjectName("actionVMRunlLog") + self.actionVMTest = QtWidgets.QAction(MainWindow) + self.actionVMTest.setObjectName("actionVMTest") + self.menuVM.addAction(self.actionVMInstallLog) + self.menuVM.addAction(self.actionVMRunlLog) + self.menuVM.addSeparator() + self.menuVM.addAction(self.actionVMTest) + self.menuBar.addAction(self.menuVM.menuAction()) + + self.retranslateUi(MainWindow) + self.tabWidget.setCurrentIndex(0) + self.vmChooser.setCurrentIndex(0) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "Windows 应用适配工具")) + self.label.setText(_translate("MainWindow", "镜像路径:")) + self.isoPath.setPlaceholderText(_translate("MainWindow", "请选择系统镜像")) + self.browser.setText(_translate("MainWindow", "浏览……")) + self.label_2.setText(_translate("MainWindow", "系统版本:")) + self.systemVersion.setCurrentText(_translate("MainWindow", "Windows 7 32 位(支持自动安装)")) + self.systemVersion.setItemText(0, _translate("MainWindow", "Windows 7 32 位(支持自动安装)")) + self.systemVersion.setItemText(1, _translate("MainWindow", "Windows 7 64 位(支持自动安装)")) + self.systemVersion.setItemText(2, _translate("MainWindow", "其它 Windows 系统(不支持自动安装,传统启动,推荐 Windows 7 及以下)")) + self.systemVersion.setItemText(3, _translate("MainWindow", "其他 Windows 系统(不支持自动安装,UEFI 启动,推荐 Windows 8 及以上)")) + self.systemVersion.setItemText(4, _translate("MainWindow", "安装 WIndows 11(不支持自动安装)")) + self.systemVersion.setItemText(5, _translate("MainWindow", "安装其他 Windows XP(支持自动安装,只支持 VirtualBox)")) + self.systemVersion.setItemText(6, _translate("MainWindow", "安装其他 Windows (支持自动安装,传统启动,只支持 VirtualBox)")) + self.systemVersion.setItemText(7, _translate("MainWindow", "安装其他 Windows(支持自动安装,UEFI 启动,只支持 VirtualBox)")) + self.systemVersion.setItemText(8, _translate("MainWindow", "安装 arm32 系统(只支持 Qemu)")) + self.systemVersion.setItemText(9, _translate("MainWindow", "安装 arm64 系统(只支持 Qemu)")) + self.label_4.setText(_translate("MainWindow", "虚拟机(建议默认):")) + self.vmChooser.setCurrentText(_translate("MainWindow", "qemu/kvm")) + self.vmChooser.setItemText(0, _translate("MainWindow", "qemu/kvm")) + self.vmChooser.setItemText(1, _translate("MainWindow", "VirtualBox")) + self.getQemu.setText(_translate("MainWindow", "安装 Qemu")) + self.kvmTest.setText(_translate("MainWindow", "kvm 测试")) + self.qemuSetting.setText(_translate("MainWindow", "Qemu虚拟机设置")) + self.addQemuDiskButton.setText(_translate("MainWindow", "添加/覆盖Qemu磁盘")) + self.saveQemuDiskButton.setText(_translate("MainWindow", "导出Qemu磁盘")) + self.delQemuDiskButton.setText(_translate("MainWindow", "移除Qemu磁盘")) + self.getvbox.setText(_translate("MainWindow", "获取VirtualBox")) + self.install.setText(_translate("MainWindow", "安装")) + self.textBrowser_3.setHtml(_translate("MainWindow", "\n" +"
\n" +"UOS 3a4000 用户在使用 Qemu 时可能会出现虚拟机无法正常开机的问题,需要安装/降级到以下链接的版本:
\n" +"蓝奏云:https://gfdgdxi.lanzoue.com/b01rk9wza 密码:6wvf
\n" +"诚通网盘:http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061 (访问密码: 2061)
\n" +"如何安装系统?使用迅雷或者网盘下载以下任意一个链接的 ISO 镜像然后在上面选择即可:
\n" +"123 网盘链接:https://www.123pan.com/s/pDSKVv-oypWv
\n" +"迅雷网盘:https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5 提取码:35e5
\n" +"百度网盘:https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y 提取码: me4y
\n" +"诚通网盘:http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061 (访问密码: 2061)
\n" +"(如果下载这个,系统版本选第一项,一般推荐这个)ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/
\n" +"(如果下载这个,系统版本选第二项)ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/
\n" +"常用 Windows 软件:
\n" +"百度网盘:链接: https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p 提取码: 7s2p
\n" +"诚通网盘:http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061 (访问密码: 2061)
\n" +"123网盘:https://www.123pan.com/s/pDSKVv-uCBWv.html
\n" +"给小白的一段话
\n" +"其实本质上跑完安装程序就没有然后了,顶多如果想要运行舒服一点点,可以安装加强功能,直接拉到最底下看就可以了,只限使用 VirtualBox
\n" +"如果你是用非 X86 PC,那暂时只能使用 qemu(没 kvm),且跨架构的性能损失很大,推荐使用 Windows XP 而非 Windows 7
\n" +"如果爱折腾的话,下面的都看看也无所谓的,想看往下翻就可以了
\n" +"(这里的帮助更新可能不会那么及时,更详细/新的帮助可以看:https://gitee.com/gfdgd-xi/deep-wine-runner/wikis 或 https://gitee.com/gfdgd-xi/wine-runner-wiki)
\n" +"(如果鼠标被锁定到里面了按下键盘右边的“Ctrl”键就可以了,qemu则是 Ctrl+Alt+G )
\n" +"VirtualBox 可以安装增强功能以优化体验,安装方法往下翻即可查询
\n" +"Qemu 可以安装 Virtio 以优化体验,下载链接:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
\n" +"安装是否需要人工进行操作?
\n" +"如果您下载的镜像本程序支持,则大部分不用,已经尽量省去了让新手头疼的虚拟机程序安装,创建、设置虚拟机,虚拟磁盘分区,寻找原版镜像文件等内容
\n" +"\n" +"但有些设置依旧需要人工自行设置,例如安装界面密钥的输入、系统的激活(涉及版权问题,不会考虑省略)、增强功能的安装、需要使用的软件等等
\n" +"\n" +"\n" +"什么样的镜像本程序(可能)不支持自动安装?
\n" +"非 Windows 7 镜像可能不支持自动安装(纯的 Windows 7 企业版镜像可能不支持自动安装),不保证系统能自动安装成功,例如 Windows XP、Windows 10、Deepin、Ubuntu 等等
\n" +"默认的虚拟机设置不习惯怎么改?
\n" +"1、打开启动器,打开 Oracle VM VirtualBox 程序
\n" +"2、选择名字为“Windows”的虚拟机,然后在右边点击设置
\n" +"\n" +"3、在这里修改即可
\n" +"\n" +"安装加强功能有什么好处?(只限使用 VirtualBox)
\n" +"1、支持鼠标自由从虚拟机和实体机切换
\n" +"2、支持虚拟机根据窗口大小自动设置分辨率
\n" +"3、支持文件共享、剪切板共享、文件拖放
\n" +"4、支持无缝模式
\n" +"\n" +"如何安装加强功能?
\n" +"1、点击“设备”=》“加强功能”
\n" +"\n" +"2、打开“计算机”,找到名为“VirtualBox Guest Additions”的光盘,双击进入,然后双击打开名为“VBoxWindowsAdditions”的程序
\n" +"\n" +"3、在弹出的界面点击“是”
\n" +"\n" +"4、一直点“Next”
\n" +"\n" +"\n" +"5、全部选择,然后点击“Install”进行安装
\n" +"\n" +"6、等待安装完毕后,选择“Reboot now”然后点击“Finish”重启此虚拟机即可安装成功(选择“Reboot now”并点“Finish”会自动重新启动)
\n" +"")) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "安装/使用帮助")) + self.textBrowser_2.setHtml(_translate("MainWindow", "\n" +"\n" +"此为 wine 运行器附属组件(虽然违背了“Wine Is Not An Emulator”<Wine 不是一个模拟器>的原意),旨在能更加完美、简单的运行 Windows 应用
\n" +"本程序基于 C++ Qt、Python 和 Virtualbox 制作,通过运行安装 Windows 操作系统的虚拟机实现在 Linux 运行 Windows exe 程序的功能。
\n" +"基于 GPL V3 协议开源
\n" +"项目地址:
\n" +"Gitee:https://gitee.com/gfdgd-xi/deep-wine-runner
\n" +"Github:https://github.com/gfdgd-xi/deep-wine-runner
\n" +"Gitlink:https://gitlink.org.cn/gfdgd_xi/deep-wine-runner
\n" +"此组件也有非常大的缺点,就是相比于 Wine,会需要占用大量的空间、安装需要大量的时间、某些情况下需要相比于 Wine 需要消耗更多的系统资源,但可以更加完美、流畅的运行 Windows 应用,会尽量减少因为缺少或未实现导致的 Windows exe 程序运行异常
\n" +"该组件制作者:gfdgd xi
\n" +"