diff --git a/StartVM.sh b/StartVM.sh index fce2c53..035a4f3 100755 --- a/StartVM.sh +++ b/StartVM.sh @@ -22,6 +22,17 @@ if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then python3 ./VM/StartQemu.py exit fi + if [[ -f $HOME/.config/deepin-wine-runner/QEMU-EFI ]]; then + echo 使用 UEFI 启动 + if [[ -f /usr/share/qemu/OVMF.fd ]]; then + qemuUEFI="--bios /usr/share/qemu/OVMF.fd" + else + if [[ -f `dirname $0`/VM/OVMF.fd ]]; then + qemuUEFI="--bios `dirname $0`/VM/OVMF.fd" + fi + fi + echo $qemuUEFI + fi # 查看CPU个数 CpuSocketNum=`cat /proc/cpuinfo | grep "cpu cores" | uniq | wc -l` # 查看CPU核心数 @@ -34,11 +45,11 @@ if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then use=$(echo "scale=4; $MemTotal / 3" | bc) if [[ `arch` == "x86_64" ]]; then echo X86 架构,使用 kvm 加速 - kvm -cpu host --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 + kvm -cpu host --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI exit fi echo 非 X86 架构,不使用 kvm 加速 - qemu-system-x86_64 --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 + qemu-system-x86_64 --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI exit fi zenity --question --no-wrap --text="检查到您未创建所指定的虚拟机,是否创建虚拟机并继续?\n如果不创建将无法使用" diff --git a/VM-source/.qtc_clangd/compile_commands.json b/VM-source/.qtc_clangd/compile_commands.json index 3292efd..458bd83 100644 --- a/VM-source/.qtc_clangd/compile_commands.json +++ b/VM-source/.qtc_clangd/compile_commands.json @@ -7,7 +7,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -77,7 +77,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -147,7 +147,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -217,7 +217,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -287,7 +287,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -357,7 +357,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -427,7 +427,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -497,7 +497,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -567,7 +567,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -637,7 +637,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -707,7 +707,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -777,7 +777,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -847,7 +847,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -917,7 +917,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -987,7 +987,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -1057,77 +1057,7 @@ "-I", "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", - "-nostdinc", - "-nostdinc++", - "-pipe", - "-std=gnu++11", - "-Wall", - "-Wextra", - "-D_REENTRANT", - "-fPIC", - "-fsyntax-only", - "-m64", - "--target=x86_64-linux-gnu", - "-DQ_CREATOR_RUN", - "-DQT_DEPRECATED_WARNINGS", - "-DQT_NO_DEBUG", - "-DQT_WIDGETS_LIB", - "-DQT_GUI_LIB", - "-DQT_NETWORK_LIB", - "-DQT_CORE_LIB", - "-I", - "/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source", - "-I", - "/usr/include/x86_64-linux-gnu/qt5", - "-I", - "/usr/include/x86_64-linux-gnu/qt5/QtWidgets", - "-I", - "/usr/include/x86_64-linux-gnu/qt5/QtGui", - "-I", - "/usr/include/x86_64-linux-gnu/qt5/QtNetwork", - "-I", - "/usr/include/x86_64-linux-gnu/qt5/QtCore", - "-I", - "/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++", - "-isystem", - "/usr/include/c++/11", - "-isystem", - "/usr/include/x86_64-linux-gnu/c++/11", - "-isystem", - "/usr/include/c++/11/backward", - "-isystem", - "/usr/local/include", - "-isystem", - "/usr/lib/llvm-13/lib/clang/13.0.1/include", - "-isystem", - "/usr/include/x86_64-linux-gnu", - "-isystem", - "/usr/include", - "-fmessage-length=0", - "-fdiagnostics-show-note-include-stack", - "-fretain-comments-from-system-headers", - "-fmacro-backtrace-limit=0", - "-ferror-limit=1000", - "-x", - "c++-header", - "-Wno-unknown-pragmas", - "-Wno-unknown-warning-option", - "-Wno-documentation-unknown-command", - "/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/ui_qemusetting.h" - ], - "directory": "/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/.qtc_clangd", - "file": "/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/ui_qemusetting.h" -}, -{ - "arguments": [ - "clang", - "-I", - "/usr/share/qtcreator/cplusplus/wrappedQtHeaders", - "-I", - "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", - "-I", - "/tmp/QtCreator-xhHVIb/clang-uiheader-riAtqg", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", "-nostdinc", "-nostdinc++", "-pipe", @@ -1188,5 +1118,75 @@ ], "directory": "/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/.qtc_clangd", "file": "/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/ui_mainwindow.h" +}, +{ + "arguments": [ + "clang", + "-I", + "/usr/share/qtcreator/cplusplus/wrappedQtHeaders", + "-I", + "/usr/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore", + "-I", + "/tmp/QtCreator-qyPOGG/clang-uiheader-fvNAaR", + "-nostdinc", + "-nostdinc++", + "-pipe", + "-std=gnu++11", + "-Wall", + "-Wextra", + "-D_REENTRANT", + "-fPIC", + "-fsyntax-only", + "-m64", + "--target=x86_64-linux-gnu", + "-DQ_CREATOR_RUN", + "-DQT_DEPRECATED_WARNINGS", + "-DQT_NO_DEBUG", + "-DQT_WIDGETS_LIB", + "-DQT_GUI_LIB", + "-DQT_NETWORK_LIB", + "-DQT_CORE_LIB", + "-I", + "/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source", + "-I", + "/usr/include/x86_64-linux-gnu/qt5", + "-I", + "/usr/include/x86_64-linux-gnu/qt5/QtWidgets", + "-I", + "/usr/include/x86_64-linux-gnu/qt5/QtGui", + "-I", + "/usr/include/x86_64-linux-gnu/qt5/QtNetwork", + "-I", + "/usr/include/x86_64-linux-gnu/qt5/QtCore", + "-I", + "/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++", + "-isystem", + "/usr/include/c++/11", + "-isystem", + "/usr/include/x86_64-linux-gnu/c++/11", + "-isystem", + "/usr/include/c++/11/backward", + "-isystem", + "/usr/local/include", + "-isystem", + "/usr/lib/llvm-13/lib/clang/13.0.1/include", + "-isystem", + "/usr/include/x86_64-linux-gnu", + "-isystem", + "/usr/include", + "-fmessage-length=0", + "-fdiagnostics-show-note-include-stack", + "-fretain-comments-from-system-headers", + "-fmacro-backtrace-limit=0", + "-ferror-limit=1000", + "-x", + "c++-header", + "-Wno-unknown-pragmas", + "-Wno-unknown-warning-option", + "-Wno-documentation-unknown-command", + "/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/ui_qemusetting.h" + ], + "directory": "/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/.qtc_clangd", + "file": "/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/ui_qemusetting.h" } ] \ No newline at end of file diff --git a/VM-source/mainwindow.cpp b/VM-source/mainwindow.cpp index 23d72fd..be4eeea 100755 --- a/VM-source/mainwindow.cpp +++ b/VM-source/mainwindow.cpp @@ -177,13 +177,29 @@ void MainWindow::on_install_clicked() } break; } + QFile file(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI"); + QDir dir(QDir::homePath() + "/.config/deepin-wine-runner"); switch (ui->systemVersion->currentIndex()) { case 3: - if(QFile::exists("/usr/share/qemu/OVMF.fd")){ + if(!QFile::exists("/usr/share/qemu/OVMF.fd") && !QFile::exists(QCoreApplication::applicationDirPath() + "/OVMF.fd") && ui->vmChooser->currentIndex() == 0){ if(QMessageBox::question(this, "提示", "似乎无法找到 UEFI 固件,是否继续创建虚拟机?\nQemu 固件可以在“安装 Qemu”处安装") == QMessageBox::No){ return; } } + if(!dir.exists()){ + dir.mkpath(QDir::homePath() + "/.config/deepin-wine-runner"); + } + if(!QFile::exists(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI")){ + // 写入用于识别的空文件 + file.open(QIODevice::WriteOnly); + file.write("1"); + file.close(); + } + break; + default: + if(ui->vmChooser->currentIndex() == 0 && QFile::exists(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI")){ + QFile::remove(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI"); + } } buildvbox(ui->isoPath->text(), ui->systemVersion->currentIndex(), ui->vmChooser->currentIndex()); return; diff --git a/VM-source/mainwindow.ui b/VM-source/mainwindow.ui index ed51ff9..1adc960 100755 --- a/VM-source/mainwindow.ui +++ b/VM-source/mainwindow.ui @@ -86,12 +86,12 @@ </item> <item> <property name="text"> - <string>其它 Windows 系统(不支持自动安装,传统启动)</string> + <string>其它 Windows 系统(不支持自动安装,传统启动,推荐 Windows 7 及以下)</string> </property> </item> <item> <property name="text"> - <string>其他 Windows 系统(不支持自动安装,UEFI 启动)</string> + <string>其他 Windows 系统(不支持自动安装,UEFI 启动,推荐 Windows 8 及以上)</string> </property> </item> </widget> diff --git a/VM-source/qemu.cpp b/VM-source/qemu.cpp index aba4d13..8a903e2 100644 --- a/VM-source/qemu.cpp +++ b/VM-source/qemu.cpp @@ -120,8 +120,16 @@ int qemu::OpenUSB(){ return 0; } int qemu::EnabledUEFI(bool status){ - if(status){ - commandOption += "--bios /usr/share/qemu/OVMF.fd "; + if(!status){ + return 0; } - return 0; + if(QFile::exists("/usr/share/qemu/OVMF.fd")){ + commandOption += "--bios /usr/share/qemu/OVMF.fd "; + return 0; + } + if(QFile::exists(QCoreApplication::applicationDirPath() + "/OVMF.fd")){ + commandOption += "--bios '" + QCoreApplication::applicationDirPath() + "/OVMF.fd' "; + return 0; + } + return 1; } diff --git a/VM/StartQemu.py b/VM/StartQemu.py index a6a2d81..85676a2 100644 --- a/VM/StartQemu.py +++ b/VM/StartQemu.py @@ -13,7 +13,7 @@ def ReadTXT(file: str): command = "qemu-system-x86_64" #if "--kvm" in sys.argv: # command = "kvm" - +programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string homePath = os.path.expanduser('~') try: setting = json.loads(ReadTXT(f"{homePath}/.config/deepin-wine-runner/QemuSetting.json")) @@ -30,4 +30,9 @@ if setting["EnableVNC"]: option += f"-display gtk -display vnc=:{setting['VNC']} " if setting["EnableSound"]: option += "-soundhw all " +if os.path.exists(f"{homePath}/.config/deepin-wine-runner/QEMU-EFI"): + if os.path.exists("/usr/share/qemu/OVMF.fd"): + option += "--bios /usr/share/qemu/OVMF.fd " + elif os.path.exists(f"{programPath}/OVMF.fd"): + option += f"--bios {programPath}/OVMF.fd " os.system(f"{command} {option}")