Compare commits

..

111 Commits

Author SHA1 Message Date
81ac91b180 3.5.0 2023-11-17 19:42:36 +08:00
e477b94cda loongarch64 2023-11-15 23:06:15 +08:00
57db5a2630 调整测试机制 2023-11-12 12:18:36 +08:00
4812a9a872 虚拟机工具支持强制关闭 VirtualBox/Qemu,并增加了对 Windows 7 安装脚本的检测 2023-11-12 11:13:42 +08:00
ff15b60e4c github action新增ace构建 2023-11-12 10:22:20 +08:00
9b82a3818b github action新增ace构建 2023-11-12 10:21:06 +08:00
275379e4ba 修改makefile bug 2023-11-12 10:20:11 +08:00
9e7ad17ea2 将kgithub源修改为githubfast源 2023-11-12 09:57:06 +08:00
03942892fd ace包支持 2023-11-11 23:12:30 +08:00
370bde5e63 生态适配脚本打包器支持正确根据打包结果显示打包成功/失败 https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I7D83Z 2023-11-11 22:37:57 +08:00
c6e722de60 生态适配脚本打包器设置使用 xz 格式打包 deb 2023-11-11 22:30:18 +08:00
de76733f3f 修复简易打包器无法打开的问题 https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I85F9M 2023-11-11 22:24:15 +08:00
37ad313a66 修改程序标题 2023-11-11 22:18:20 +08:00
d62ec78926 qemu-system检测 2023-11-11 22:10:49 +08:00
7d1d121c01 缺少return 0; 2023-11-11 21:52:13 +08:00
f20565af53 调整 2023-11-11 21:41:46 +08:00
8b0d0f1018 修复虚拟机工具在系统版本选择第 5 项及以后出现不会挂载 ISO 的问题(使用 Qemu 的情况下) 2023-11-11 21:37:49 +08:00
e7cbbc62b9 设置第一启动项为CD/DVD 2023-11-11 21:29:51 +08:00
844f709480 移除端口转发 2023-11-11 21:26:53 +08:00
7571a6aafc 启动器虚拟机快捷方式支持启动arm32、arm64架构系统 2023-11-11 21:24:13 +08:00
47bdde1eb3 支持使用Qemu运行armhf、aarch64系统 2023-11-11 20:53:27 +08:00
f5b2a3fd93 新增arm32、arm64 uefi固件 2023-11-11 19:54:24 +08:00
bc0c9039fd 微调 2023-11-11 19:44:28 +08:00
3f6c4a47ff Qemu安装功能新增安装qemu-efi-aarch64 2023-11-11 19:38:02 +08:00
bab6115348 新增新的系统选项 2023-11-11 18:54:02 +08:00
5f8387e14e 新增lat安装功能 2023-11-11 15:00:12 +08:00
1a786145fb 优化安装量检测 2023-11-11 10:04:00 +08:00
0c2f37c187 新增虚拟机测试;测试系统支持多行文本 2023-11-07 21:00:32 +08:00
134fff9f17 新增虚拟机日志输出和读取功能(不使用安装器) 2023-11-07 19:34:28 +08:00
4853cafb67 新增虚拟机日志输出和读取功能 2023-11-07 19:26:33 +08:00
0300f8e599 在主界面点击“安装”按钮后自动切换至帮助页面 2023-11-07 18:47:21 +08:00
97b761067b 新增kvm检测 2023-11-05 14:36:43 +08:00
d93e7475ff 修改安装器文本提示 2023-11-05 13:56:43 +08:00
b031667887 修改Windows安装器提示文本
Signed-off-by: gfdgd xi <3025613752@qq.com>
2023-11-01 08:22:51 +00:00
3fde8e01bc 漏改版本号 2023-09-30 13:04:32 +08:00
09a95ebac4 3.4.1 2023-09-30 13:00:22 +08:00
2dc251fcb5 支持识别deepin-wine6-vannila 2023-09-30 10:52:13 +08:00
b873d3e8ab 移除debian文件夹 2023-09-30 10:21:38 +08:00
61ea114669 调整自动构建 2023-09-30 10:17:59 +08:00
96f02440ca 回滚 2023-09-30 10:15:15 +08:00
6a2bb2e9ca 调整错误 2023-09-30 10:09:04 +08:00
e617c24bd1 修改readme 2023-09-30 10:05:53 +08:00
858617a3ae 调整自动构建 2023-09-30 10:03:12 +08:00
30e4c9d8bb 调整架构 2023-09-30 09:52:17 +08:00
361f3cf859 优化wine打入deb包的run.sh 2023-09-30 09:50:18 +08:00
368a9d218a 调整Makefile 2023-09-29 14:38:27 +08:00
dc7cb37d7f makefile忘记创建文件夹 2023-09-29 14:04:08 +08:00
036639d830 调整ICON 2023-09-29 14:03:15 +08:00
07f56b820d makefile调整 2023-09-29 14:01:25 +08:00
0bef686aa6 debian文件 2023-09-29 13:58:42 +08:00
982521b0c3 修改makefile 2023-09-29 13:42:21 +08:00
87a54b8d72 修改makefile 2023-09-29 13:41:48 +08:00
ac12c24afd 支持识别spark-wine8-wow 2023-09-18 22:01:35 +08:00
0f96e1d91a 修改box86安装器至使用自建源 2023-09-10 09:07:45 +08:00
6689a5edb1 英语README雏形 2023-09-06 22:32:37 +08:00
b4ef46ee38 新增wine应用架构批量转换脚本 2023-09-03 11:48:17 +08:00
a83e0bb2b6 新增交流群入口 2023-09-02 10:16:48 +08:00
9fdc39446e 修复部分机器无法输入密码安装box86的问题 2023-09-01 13:52:32 +08:00
9892ff71a2 Change README 2023-08-27 22:16:12 +08:00
2bfa809caf 新增QQ群号 2023-08-19 12:38:41 +08:00
e54a424f81 调一下更新内容 2023-08-18 18:19:15 +08:00
fbe795b6f8 3.4.0.1(没有加虚拟机自动安装的commit) 2023-08-18 18:16:47 +08:00
aa756b218c 修改README 2023-08-17 14:00:46 +08:00
e625bf97ad 支持跟进vbox安装功能 2023-08-16 09:53:59 +08:00
83f49a8c7e 算了 2023-08-13 22:15:27 +08:00
dcabe5b2cf 模板 2023-08-13 22:14:38 +08:00
37c0cbf252 gitee模板 2023-08-13 22:13:07 +08:00
98f2beb994 目录错误 2023-08-13 22:08:13 +08:00
3515e3f44f ISSCUE模板 2023-08-13 22:06:44 +08:00
cb0cd776a4 更多组件支持设置字体大小 2023-08-13 21:50:29 +08:00
ef8c115df2 主窗口支持小字体 2023-08-13 21:30:15 +08:00
5fb2bdf5f9 修复问题 dpkg在打包时候包时报 无效的压缩参数 z 16 https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I7SMTJ 2023-08-13 21:10:04 +08:00
a1b2915e3a 新增安装Windows11功能(只限VirtualBox) 2023-08-13 21:05:18 +08:00
a2424e08ba 3.4.0 2023-08-11 11:22:06 +08:00
2cf1266190 修改control 2023-08-11 10:13:34 +08:00
8a709ce7e2 虚拟机安装工具提供LoongArch新世界版本 2023-08-11 09:36:22 +08:00
82b13b585d 修复控件问题 2023-08-10 18:38:07 +08:00
db622c93ba 启动器图标支持启动UEFI 2023-08-10 14:36:41 +08:00
e642d17828 新增UEFI固件 2023-08-09 23:08:19 +08:00
f2d766d0f9 支持UEFI启动 2023-08-09 22:57:14 +08:00
01fe3ed3ab 更新更新内容 2023-08-09 22:35:17 +08:00
c05371b856 修复核心数和线程数识别问题 2023-08-09 22:25:54 +08:00
afefb854b6 优化虚拟机(kvm)性能 2023-08-09 22:19:56 +08:00
acff44eb2d 修复选择vbox- 2023-08-09 20:19:05 +08:00
8699f74087 部分错误 2023-08-09 19:59:15 +08:00
1a78a98d8e 修改apt源 2023-08-09 19:57:00 +08:00
7794df8170 修复虚拟机工具在检测到 Qemu 磁盘但没有安装 Qemu 时无法启动的问题 2023-08-09 14:54:53 +08:00
226db3dfd6 新增视频教程地址 2023-08-09 14:44:52 +08:00
0124c4a304 写一下新版本更新内容 2023-08-09 10:51:00 +08:00
bbf47b8120 修复ubuntu23安装问题? 2023-08-08 21:07:16 +08:00
1942299850 修改简易打包器打包策略 2023-08-08 20:53:32 +08:00
47cffa0637 修复简易打包器识别wine错误的问题 2023-08-08 20:44:39 +08:00
96fa417b3b 完整打包器支持导入/导出配置文件 2023-08-08 17:32:30 +08:00
3fd2b14a2a 修复在调用运行库的情况下无法正常使用 winetricks 2023-08-08 14:32:26 +08:00
8bdb45a87f 打包器支持为不同的.desktop设置不同的MimeType 2023-08-08 13:20:14 +08:00
fd36c84d74 高级打包器支持小字 2023-08-07 18:48:54 +08:00
34a5ae629e 修复简易打包器无法打开的问题 2023-08-07 16:03:41 +08:00
0dda0870c0 云沙箱新增cloud.vdnel.cn 2023-08-06 15:58:59 +08:00
2689bc1cfb 打包器新增Game和System这两个常用分类 2023-08-05 23:02:18 +08:00
8607de0fb0 初步支持在deepin23调用winetricks 2023-08-05 22:30:35 +08:00
0d2e59b9fe dcm/bcm包支持 2023-08-05 08:57:55 +08:00
8ba8953aef 修复apt源没libc6:armhf时box86安装错误的问题 2023-08-04 16:31:05 +08:00
b665842e89 Merge branch 'main' of https://gitee.com/gfdgd-xi/deep-wine-runner 2023-07-29 14:12:55 +08:00
ddd65bbf5f 修复星火wine配置调用解释器错误的问题 2023-07-29 14:12:46 +08:00
Bail
6768cf9e7b 修复updatekiller的pid路径
Signed-off-by: Bail <2915289604@qq.com>
2023-07-28 09:31:38 +00:00
0de3547af0 路径错误 2023-07-26 22:55:37 +08:00
6fb473f5d1 deb打包支持多线程 2023-07-26 22:16:28 +08:00
c5e63f3699 支持调用spark-wine 2023-07-26 15:32:09 +08:00
878e7f6b2a 初步支持 spark dwine helper 2.4.0 特性:https://bbs.deepin.org/post/259455 2023-07-26 15:29:21 +08:00
caa73c3bde 跟进https://gitee.com/deepin-community-store/spark-wine/blob/master/spark-dwine-launch/run-template_v1.sh 2023-07-26 14:50:02 +08:00
3c6bb5042f 修复问题:https://gitee.com/gfdgd-xi/uengine-runner/issues/I6ZRZX 2023-07-26 10:09:07 +08:00
107 changed files with 28609 additions and 564 deletions

69
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,69 @@
---
name: 程序bug
about: 反馈程序的故障
---
需要把下面的替换成自己的信息,下面为例子
# 故障表现(最好带图、日志)
按右上角叉叉可以关闭运行器
![图片.png](https://storage.deepin.org/thread/202308132203366743_图片.png)
## 日志(终端输入 `deepin-wine-runner` 输出的内容)
```
gfdgd_xi@gfdgdxi-PC:~$ deepin-wine-runner
/usr/bin/deepin-terminal
/usr/bin/deepin-wine6-stable
/usr/bin/deepin-wine
/usr/bin/qemu-i386-static
/usr/bin/qemu-i386
/usr/bin/qemu-x86_64
['', '']
/usr/bin/qemu-i386
/usr/bin/qemu-x86_64
['', '']
{'基于 UOS box86 的 deepin-wine6-stable': "WINEPREDLL='/opt/apps/deepin-wine-runner/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ", '基于 UOS exagear 的 deepin-wine6-stable': "WINEPREDLL='/opt/apps/deepin-wine-runner/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix /home/gfdgd_xi/.deepinwine/debian-buster --utmp-paths-list /home/gfdgd_xi/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list /home/gfdgd_xi/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list /home/gfdgd_xi/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ", '使用 Flatpak 安装的 Wine': 'flatpak run org.winehq.Wine', 'deepin-wine6 stable': 'deepin-wine6-stable', 'deepin-wine5 stable': 'deepin-wine5-stable', 'spark-wine': 'spark-wine', 'spark-wine7-devel': 'spark-wine7-devel', 'spark-wine8': 'spark-wine8', 'deepin-wine': 'deepin-wine', 'deepin-wine5': 'deepin-wine5', 'wine': 'wine', 'wine64': 'wine64', 'ukylin-wine': 'ukylin-wine', 'mono这不是 wine但可以实现初步调用运行 .net 应用)': 'mono', '基于 linglong 的 deepin-wine6-stable不推荐': "ll-cli run '' --exec '/bin/deepin-wine6-stable'", '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-amd64/bin/wine': '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-amd64/bin/wine', '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-amd64/bin/wine-aarch64': '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-amd64/bin/wine-aarch64', '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine': '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine', '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine-i386': '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine-i386', '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine-aarch64': '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine-aarch64', '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine-x86_64': '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine-x86_64', '/home/gfdgd_xi/.deepinwine/wine-ce-8.13-amd64/bin/wine': '/home/gfdgd_xi/.deepinwine/wine-ce-8.13-amd64/bin/wine'}
[['cmd', 'cmd'], ['cmd', 'cmd.exe'], ['cmd', 'wineBottonPath/drive_c/windows/system32/cmd.exe'], ['Internet Explorer', 'iexplore'], ['Internet Explorer', 'iexplore.exe'], ['Internet Explorer', 'wineBottonPath/drive_c/Program Files/Internet Explorer/iexplore.exe'], ['Internet Explorer', 'wineBottonPath/drive_c/Program Files (x86)/Internet Explorer/iexplore.exe'], ['微信', 'wineBottonPath/drive_c/Program Files/Tencent/WeChat/WeChat.exe'], ['微信', 'wineBottonPath/drive_c/Program Files (x86)/Tencent/WeChat/WeChat.exe'], ['UltraISO', 'wineBottonPath/drive_c/Program Files/UltraISO/UltraISO.exe'], ['UltraISO', 'wineBottonPath/drive_c/Program Files (x86)/UltraISO/UltraISO.exe'], ['迅雷', 'wineBottonPath/drive_c/Program Files/Thunder Network/MiniThunder/Bin/ThunderMini.exe'], ['迅雷', 'wineBottonPath/drive_c/Program Files (x86)/Thunder Network/MiniThunder/Bin/ThunderMini.exe'], ['Microsoft Office Word', 'wineBottonPath/drive_c/Program Files/Microsoft Office/Office12/WINWORD.EXE'], ['Microsoft Office Word', 'wineBottonPath/drive_c/Program Files (x86)/Microsoft Office/Office12/WINWORD.EXE'], ['腾讯会议', 'wineBottonPath/drive_c/Program Files/Tencent/WeMeet/wemeetapp.exe'], ['腾讯会议', 'wineBottonPath/drive_c/Program Files (x86)/Tencent/WeMeet/wemeetapp.exe'], ['腾讯课堂', 'wineBottonPath/drive_c/Program Files/Tencent/EDU/bin/TXEDU.exe'], ['腾讯课堂', 'wineBottonPath/drive_c/Program Files (x86)/Tencent/EDU/bin/TXEDU.exe'], ['QQ', 'wineBottonPath/drive_c/Program Files/Tencent/QQ/Bin/QQ.exe'], ['QQ', 'wineBottonPath/drive_c/Program Files (x86)/Tencent/QQ/Bin/QQ.exe'], ['TIM', 'wineBottonPath/drive_c/Program Files/Tencent/TIM/Bin/TIM.exe'], ['TIM', 'wineBottonPath/drive_c/Program Files (x86)/Tencent/TIM/Bin/TIM.exe']]
lock
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
create icon [font] engine failed.[theme:bloom-dark] nonCache[theme].size[0] (No such file or directory)
create icon [floppy_unmount] engine failed.[theme:bloom-dark] nonCache[theme].size[1] (No such file or directory)
create icon [3floppy_unmount] engine failed.[theme:bloom-dark] nonCache[theme].size[2] (No such file or directory)
检测到库 riscv64
检测到库 arm64
检测到库 armhf
检测到库 i386
检测到库 s390x
检测到库 mips64el
检测到库 ppc64el
检测到库 amd64
版本号为3.4.0
普通版本
qt.qpa.xcb: QXcbConnection: XCB error: 5 (BadAtom), sequence: 390, resource id: 0, major code: 20 (GetProperty), minor code: 0
```
# 系统版本
- 系统Deepin 23
- 硬件:
![图片.png](https://storage.deepin.org/thread/202308132200482953_图片.png)
- 其他补充信息
# 之前做过什么操作
在终端里输入了内容
```bash
sudo apt upgrade
```
更新了系统
# 复现步骤
1. 打开运行器,然后点击右上角叉叉可以关闭
# 推测故障原因(可选)
Qt 默认有一套配置好的退出事件
# 联系方式(可选)

68
.github/ISSUE_TEMPLATE/ISSCUE_BUG.md vendored Normal file
View File

@@ -0,0 +1,68 @@
---
name: 程序bug
about: 反馈程序的故障
---
需要把下面的替换成自己的信息,下面为例子
# 故障表现(最好带图、日志)
按右上角叉叉可以关闭运行器
![图片.png](https://storage.deepin.org/thread/202308132203366743_图片.png)
## 日志(终端输入 `deepin-wine-runner` 输出的内容)
```
gfdgd_xi@gfdgdxi-PC:~$ deepin-wine-runner
/usr/bin/deepin-terminal
/usr/bin/deepin-wine6-stable
/usr/bin/deepin-wine
/usr/bin/qemu-i386-static
/usr/bin/qemu-i386
/usr/bin/qemu-x86_64
['', '']
/usr/bin/qemu-i386
/usr/bin/qemu-x86_64
['', '']
{'基于 UOS box86 的 deepin-wine6-stable': "WINEPREDLL='/opt/apps/deepin-wine-runner/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ", '基于 UOS exagear 的 deepin-wine6-stable': "WINEPREDLL='/opt/apps/deepin-wine-runner/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix /home/gfdgd_xi/.deepinwine/debian-buster --utmp-paths-list /home/gfdgd_xi/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list /home/gfdgd_xi/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list /home/gfdgd_xi/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ", '使用 Flatpak 安装的 Wine': 'flatpak run org.winehq.Wine', 'deepin-wine6 stable': 'deepin-wine6-stable', 'deepin-wine5 stable': 'deepin-wine5-stable', 'spark-wine': 'spark-wine', 'spark-wine7-devel': 'spark-wine7-devel', 'spark-wine8': 'spark-wine8', 'deepin-wine': 'deepin-wine', 'deepin-wine5': 'deepin-wine5', 'wine': 'wine', 'wine64': 'wine64', 'ukylin-wine': 'ukylin-wine', 'mono这不是 wine但可以实现初步调用运行 .net 应用)': 'mono', '基于 linglong 的 deepin-wine6-stable不推荐': "ll-cli run '' --exec '/bin/deepin-wine6-stable'", '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-amd64/bin/wine': '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-amd64/bin/wine', '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-amd64/bin/wine-aarch64': '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-amd64/bin/wine-aarch64', '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine': '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine', '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine-i386': '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine-i386', '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine-aarch64': '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine-aarch64', '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine-x86_64': '/opt/apps/deepin-wine-runner/wine/wine-ce-8.13-riscv64/bin/wine-x86_64', '/home/gfdgd_xi/.deepinwine/wine-ce-8.13-amd64/bin/wine': '/home/gfdgd_xi/.deepinwine/wine-ce-8.13-amd64/bin/wine'}
[['cmd', 'cmd'], ['cmd', 'cmd.exe'], ['cmd', 'wineBottonPath/drive_c/windows/system32/cmd.exe'], ['Internet Explorer', 'iexplore'], ['Internet Explorer', 'iexplore.exe'], ['Internet Explorer', 'wineBottonPath/drive_c/Program Files/Internet Explorer/iexplore.exe'], ['Internet Explorer', 'wineBottonPath/drive_c/Program Files (x86)/Internet Explorer/iexplore.exe'], ['微信', 'wineBottonPath/drive_c/Program Files/Tencent/WeChat/WeChat.exe'], ['微信', 'wineBottonPath/drive_c/Program Files (x86)/Tencent/WeChat/WeChat.exe'], ['UltraISO', 'wineBottonPath/drive_c/Program Files/UltraISO/UltraISO.exe'], ['UltraISO', 'wineBottonPath/drive_c/Program Files (x86)/UltraISO/UltraISO.exe'], ['迅雷', 'wineBottonPath/drive_c/Program Files/Thunder Network/MiniThunder/Bin/ThunderMini.exe'], ['迅雷', 'wineBottonPath/drive_c/Program Files (x86)/Thunder Network/MiniThunder/Bin/ThunderMini.exe'], ['Microsoft Office Word', 'wineBottonPath/drive_c/Program Files/Microsoft Office/Office12/WINWORD.EXE'], ['Microsoft Office Word', 'wineBottonPath/drive_c/Program Files (x86)/Microsoft Office/Office12/WINWORD.EXE'], ['腾讯会议', 'wineBottonPath/drive_c/Program Files/Tencent/WeMeet/wemeetapp.exe'], ['腾讯会议', 'wineBottonPath/drive_c/Program Files (x86)/Tencent/WeMeet/wemeetapp.exe'], ['腾讯课堂', 'wineBottonPath/drive_c/Program Files/Tencent/EDU/bin/TXEDU.exe'], ['腾讯课堂', 'wineBottonPath/drive_c/Program Files (x86)/Tencent/EDU/bin/TXEDU.exe'], ['QQ', 'wineBottonPath/drive_c/Program Files/Tencent/QQ/Bin/QQ.exe'], ['QQ', 'wineBottonPath/drive_c/Program Files (x86)/Tencent/QQ/Bin/QQ.exe'], ['TIM', 'wineBottonPath/drive_c/Program Files/Tencent/TIM/Bin/TIM.exe'], ['TIM', 'wineBottonPath/drive_c/Program Files (x86)/Tencent/TIM/Bin/TIM.exe']]
lock
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
create icon [font] engine failed.[theme:bloom-dark] nonCache[theme].size[0] (No such file or directory)
create icon [floppy_unmount] engine failed.[theme:bloom-dark] nonCache[theme].size[1] (No such file or directory)
create icon [3floppy_unmount] engine failed.[theme:bloom-dark] nonCache[theme].size[2] (No such file or directory)
检测到库 riscv64
检测到库 arm64
检测到库 armhf
检测到库 i386
检测到库 s390x
检测到库 mips64el
检测到库 ppc64el
检测到库 amd64
版本号为3.4.0
普通版本
qt.qpa.xcb: QXcbConnection: XCB error: 5 (BadAtom), sequence: 390, resource id: 0, major code: 20 (GetProperty), minor code: 0
```
# 系统版本
- 系统Deepin 23
- 硬件:
![图片.png](https://storage.deepin.org/thread/202308132200482953_图片.png)
- 其他补充信息
# 之前做过什么操作
在终端里输入了内容
```bash
sudo apt upgrade
```
更新了系统
# 复现步骤
1. 打开运行器,然后点击右上角叉叉可以关闭
# 推测故障原因(可选)
Qt 默认有一套配置好的退出事件

View File

@@ -20,11 +20,16 @@ jobs:
cd deep-wine-runner cd deep-wine-runner
make build make build
mv spark-deepin-wine-runner.deb ~ mv spark-deepin-wine-runner.deb ~
mv spark-deepin-wine-runner-ace.deb ~
- name: upload result - name: upload result
uses: actions/upload-artifact@v1 uses: actions/upload-artifact@v1
with: with:
name: spark-deepin-wine-runner.deb name: spark-deepin-wine-runner.deb
path: /home/runner/spark-deepin-wine-runner.deb path: /home/runner/spark-deepin-wine-runner.deb
- name: upload result
uses: actions/upload-artifact@v1
with:
name: spark-deepin-wine-runner-ace.deb
path: /home/runner/spark-deepin-wine-runner-ace.deb

View File

@@ -0,0 +1,87 @@
{
"Package": [
"L",
"com.7zip.demo"
],
"Version": [
"L",
"23.01spark0"
],
"Description": [
"L",
"7Zip For Deepin Wine6 Stable"
],
"Maintainer": [
"L",
"gfdgd xi<3025613752@qq.com>"
],
"BottleName": [
"L",
"Spark-7zip"
],
"BottlePath": [
"L",
"/home/gfdgd_xi/.deepinwine/Spark-7zip"
],
"WineVersion": [
"Co",
5
],
"DebSavePath": [
"L",
"/home/gfdgd_xi/Desktop/com.7zip.demo_23.01spark0_all.deb"
],
"Desktop": [
"List-Desktop",
[
[
"c:/Program Files/7-Zip/7zFM.exe",
11,
"",
"7Zip",
"/home/gfdgd_xi/Desktop/Icon_0001.png",
""
]
]
],
"UseInstallWineArch": [
"Co",
0
],
"RemoveBash": [
"Ch",
true
],
"CleanBottleByUOS": [
"Ch",
true
],
"ChooseWineHelperValue": [
"Ch",
true
],
"DisabledMono": [
"Ch",
true
],
"DebDepends": [
"L",
"deepin-wine6-stable | deepin-wine6-stable-bcm | deepin-wine6-stable-dcm, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei"
],
"DebRecommend": [
"L",
""
],
"DebFirstArch": [
"Co",
0
],
"DebArch": [
"Co",
0
],
"SparkHelperConfigPath": [
"Str-SparkHelperConfigPath",
null
]
}

53
DefaultSetting.py Normal file
View File

@@ -0,0 +1,53 @@
#!/usr/bin/env python3
# 读取设置单独用一个 py 文件
import os
import json
import PyQt5.QtGui as QtGui
# 获取用户主目录
def get_home():
return os.path.expanduser('~')
# 读取文本文档
def readtxt(path):
f = open(path, "r") # 设置文件对象
str = f.read() # 获取内容
f.close() # 关闭文本对象
return str # 返回结果
defultProgramList = {
"Architecture": "Auto",
"Debug": True,
"DefultWine": "deepin-wine6 stable",
"DefultBotton" : get_home() + "/.wine",
"TerminalOpen": False,
"WineOption": "",
"WineBottonDifferent": False,
"CenterWindow": False,
"Theme": "",
"MonoGeckoInstaller": False,
"AutoWine": True,
"RuntimeCache": True,
"MustRead": False,
"BuildByBottleName": False,
"AutoPath": False,
"QemuUnMountHome": False,
"Chinese": True,
"FontSize": 1
}
def SetFont(app):
defaultFont = app.font()
size = setting["FontSize"]
font = QtGui.QFont(defaultFont)
if size == 1:
app.setFont(defaultFont)
return
font.setPixelSize(int(defaultFont.pixelSize() / size))
font.setPointSize(int(defaultFont.pointSize() / size))
app.setFont(font)
try:
setting = json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/WineSetting.json"))
except:
setting = defultProgramList

View File

@@ -0,0 +1,12 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=/usr/bin/deepin-wine-package-builder "~/.wine" %F
Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg
Name=Wine Package Builder
Name[zh]=Wine 打包器
Terminal=false
StartupNotify=true
NoDisplay=true
Keywords=exe;scr;
MimeType=application/x-ms-dos-executable;application/x-msi;application/x-ms-shortcut;

View File

@@ -0,0 +1,12 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=/usr/bin/deepin-wine-packager-easy-builder %F
Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg
Name=Wine Package Builder
Name[zh]=Wine 简易打包器
Terminal=false
StartupNotify=true
NoDisplay=true
Keywords=exe;scr;
MimeType=application/x-ms-dos-executable;application/x-msi;application/x-ms-shortcut;

View File

@@ -0,0 +1,10 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=/usr/bin/deepin-wine-packager-with-script
Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg
Name=Wine Package Builder For UOS
NoDisplay=true
Name[zh]=Wine 打包器(基于活动脚本)
Terminal=false
StartupNotify=true

View File

@@ -0,0 +1,10 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=/opt/apps/deepin-wine-runner/RunVM.sh %F
Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg
Name=Setting VirtualMachine
Name[zh]=设置 Windows 虚拟机
NoDisplay=true
Terminal=false
StartupNotify=true

View File

@@ -0,0 +1,9 @@
[Desktop Entry]
Type=Application
X-Categories=System;
Exec=/opt/apps/deepin-wine-runner/StartVM.sh %F
Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg
Name=Start Windows VirtualMachine
Name[zh]=开启 Windows 虚拟机
Terminal=false
StartupNotify=true

View File

@@ -0,0 +1,11 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=/usr/bin/deepin-wine-runner %F
Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg
Name=Wine Runner
Name[zh]=Wine 运行器
Terminal=false
StartupNotify=true
Keywords=exe;scr;
MimeType=application/x-ms-dos-executable;application/x-msi;application/x-ms-shortcut;

View File

@@ -1,5 +1,11 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
import sys import sys
import json
import base64 import base64
import requests import requests
print(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9JbnN0YWxsLnBocD9WZXJzaW9uPQ==").decode("utf-8") + sys.argv[1]).text) # 读取版本号
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
with open(f"{programPath}/information.json") as file:
version = json.loads(file.read())["Version"]
print(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9JbnN0YWxsLnBocD9WZXJzaW9uPQ==").decode("utf-8") + version).text)

10
GetProgramVersion.py Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/env python3
# 读取程序版本号
import os
import json
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
try:
with open(f"{programPath}/information.json") as file:
print(json.loads(file.read())["Version"])
except:
print("1.0.0")

View File

@@ -21,26 +21,27 @@ if [[ $? == 0 ]]; then
fi fi
echo 使用国内源 echo 使用国内源
#sudo wget https://ryanfortner.github.io/box86-debs/box86.list -O /etc/apt/sources.list.d/box86.list #sudo wget https://ryanfortner.github.io/box86-debs/box86.list -O /etc/apt/sources.list.d/box86.list
sudo bash -c "echo deb http://jihulab.com/gfdgd-xi/box86-debs/-/raw/master/debian ./ > /etc/apt/sources.list.d/box86.list" sudo bash -c "echo deb http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box86-debs/debian ./ > /etc/apt/sources.list.d/box86.list"
wget -qO- http://jihulab.com/gfdgd-xi/box86-debs/-/raw/master/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box86-debs-archive-keyring.gpg wget -qO- http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box86-debs/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box86-debs-archive-keyring.gpg
echo "adding key..." echo "adding key..."
installBox=box86-generic-arm installBox=box86-generic-arm
if [[ $PCArch == "arm64" ]]; then if [[ $PCArch == "arm64" ]]; then
sudo bash -c "echo deb http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box64-debs/debian ./ > /etc/apt/sources.list.d/box64.list" sudo bash -c "echo deb http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box64-debs/debian ./ > /etc/apt/sources.list.d/box64.list"
wget -qO- http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box64-debs/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box64-debs-archive-keyring.gpg wget -qO- http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box64-debs/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box64-debs-archive-keyring.gpg
installBox="box86-generic-arm box64-generic-arm libc6:armhf" installBox="box86-generic-arm box64-generic-arm"
sudo dpkg --add-architecture armhf sudo dpkg --add-architecture armhf
fi fi
echo " + sudo apt update" echo " + sudo apt update"
sudo apt update sudo apt update
sudo apt install binfmt-support -y sudo apt install binfmt-support -y
sudo apt install libc6:armhf -y
echo apt 源添加完毕!按回车键继续安装 Box86/Box64若想要停止安装则请按 Ctrl+C 或按终端右上角 ×(叉叉)退出 echo apt 源添加完毕!按回车键继续安装 Box86/Box64若想要停止安装则请按 Ctrl+C 或按终端右上角 ×(叉叉)退出
echo 按回车键后将会自动安装包名为 box86-generic-arm、box64-generic-armbox64 要在 aarch64 系统才可安装)的 Box86/Box64 包(适用于通用 ARM 系统) echo 按回车键后将会自动安装包名为 box86-generic-arm、box64-generic-armbox64 要在 aarch64 系统才可安装)的 Box86/Box64 包(适用于通用 ARM 系统)
echo 其他特殊版本及其包名可见如下链接(如适用于 rk3399 的版本): echo 其他特殊版本及其包名可见如下链接(如适用于 rk3399 的版本):
echo " - Box64https://github.com/ryanfortner/box64-debs/" echo " - Box64https://github.com/ryanfortner/box64-debs/"
echo " - Box86https://github.com/ryanfortner/box86-debs/" echo " - Box86https://github.com/ryanfortner/box86-debs/"
echo " - Box64国内镜像https://jihulab.com/gfdgd-xi/box64-debs" echo " - Box64国内镜像http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box64-debs"
echo " - Box64国内镜像https://jihulab.com/gfdgd-xi/box86-debs" echo " - Box64国内镜像http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box86-debs"
read read
sudo apt install -y $installBox sudo apt install -y $installBox
echo 安装完成!按回车键退出 echo 安装完成!按回车键退出

31
InstallBox86-own.sh Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/bash
if [[ `whoami` != root ]]; then
echo 请以 root 权限运行
echo 按任意键退出
read
exit 1
fi
PCArch=`dpkg --print-architecture`
echo 使用国内源
#sudo wget https://ryanfortner.github.io/box86-debs/box86.list -O /etc/apt/sources.list.d/box86.list
#sudo bash -c "echo deb http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box86-debs/debian ./ > /etc/apt/sources.list.d/box86.list"
#wget -qO- http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box86-debs/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box86-debs-archive-keyring.gpg
#echo "adding key..."
#installBox=box86-generic-arm
#if [[ $PCArch == "arm64" ]]; then
# sudo bash -c "echo deb http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box64-debs/debian ./ > /etc/apt/sources.list.d/box64.list"
# wget -qO- http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box64-debs/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box64-debs-archive-keyring.gpg
# installBox="box86-generic-arm box64-generic-arm"
# sudo dpkg --add-architecture armhf
#fi
wget http://deb.box86.wine-runner.gfdgdxi.top/sources/github.sh
bash github.sh
rm github.sh
echo " + sudo apt update"
sudo apt update
sudo apt install binfmt-support -y
sudo apt install libc6:armhf -y
sudo apt install -y box86
sudo apt install -y box64
echo 安装完成!按回车键退出
read

6
InstallLat.sh Executable file
View File

@@ -0,0 +1,6 @@
#!/bin/bash
echo lat只能在loongarch架构安装
sudo apt update
sudo apt install lat
echo 按回车键退出
read

View File

@@ -19,6 +19,8 @@ package:
cp -rv VM-source/deepin-wine-runner.svg VM cp -rv VM-source/deepin-wine-runner.svg VM
cp -rv VM-source/Windows7X64Auto.iso VM cp -rv VM-source/Windows7X64Auto.iso VM
cp -rv VM-source/Windows7X86Auto.iso VM cp -rv VM-source/Windows7X86Auto.iso VM
cp -rv VM-source/test.qcow2 VM
cp -rv VM-source/*.fd VM
cp -rv wine/ deb/opt/apps/deepin-wine-runner/ cp -rv wine/ deb/opt/apps/deepin-wine-runner/
cp -rv Test/ deb/opt/apps/deepin-wine-runner/ cp -rv Test/ deb/opt/apps/deepin-wine-runner/
cp -rv information.json package-script cp -rv information.json package-script
@@ -30,6 +32,7 @@ package:
cp -rv AllInstall.py deb/opt/apps/deepin-wine-runner cp -rv AllInstall.py deb/opt/apps/deepin-wine-runner
cp -rv ShellList deb/opt/apps/deepin-wine-runner cp -rv ShellList deb/opt/apps/deepin-wine-runner
cp -rv QemuDownload.py deb/opt/apps/deepin-wine-runner cp -rv QemuDownload.py deb/opt/apps/deepin-wine-runner
cp -rv DefaultSetting.py deb/opt/apps/deepin-wine-runner
cp -rv QemuRun.py deb/opt/apps/deepin-wine-runner cp -rv QemuRun.py deb/opt/apps/deepin-wine-runner
cp -rv kill.sh deb/opt/apps/deepin-wine-runner cp -rv kill.sh deb/opt/apps/deepin-wine-runner
cp -rv updatekiller.py deb/opt/apps/deepin-wine-runner cp -rv updatekiller.py deb/opt/apps/deepin-wine-runner
@@ -50,6 +53,7 @@ package:
rm -rfv deb/opt/apps/deepin-wine-runner/wine/winelist.json rm -rfv deb/opt/apps/deepin-wine-runner/wine/winelist.json
cp -rv req deb/opt/apps/deepin-wine-runner cp -rv req deb/opt/apps/deepin-wine-runner
cp -rv pardus-chroot deb/opt/apps/deepin-wine-runner cp -rv pardus-chroot deb/opt/apps/deepin-wine-runner
cp -rv winetricks deb/opt/apps/deepin-wine-runner
cp -rv WineLib deb/opt/apps/deepin-wine-runner cp -rv WineLib deb/opt/apps/deepin-wine-runner
cp -rv InstallFoxpro.py deb/opt/apps/deepin-wine-runner cp -rv InstallFoxpro.py deb/opt/apps/deepin-wine-runner
cp -rv BuildDesktop.py deb/opt/apps/deepin-wine-runner cp -rv BuildDesktop.py deb/opt/apps/deepin-wine-runner
@@ -145,10 +149,17 @@ package:
ln -s /opt/apps/deepin-wine-runner/InstallNetFramework.py /tmp/spark-deepin-wine-runner-builder/usr/bin/deepin-wine-runner-wine-netframework-installer ln -s /opt/apps/deepin-wine-runner/InstallNetFramework.py /tmp/spark-deepin-wine-runner-builder/usr/bin/deepin-wine-runner-wine-netframework-installer
ln -s /opt/apps/deepin-wine-runner/InstallVisualCPlusPlus.py /tmp/spark-deepin-wine-runner-builder/usr/bin/deepin-wine-runner-wine-vscppruntime-installer ln -s /opt/apps/deepin-wine-runner/InstallVisualCPlusPlus.py /tmp/spark-deepin-wine-runner-builder/usr/bin/deepin-wine-runner-wine-vscppruntime-installer
ln -s /opt/apps/deepin-wine-runner/deepin-wine-venturi-setter.py /tmp/spark-deepin-wine-runner-builder/usr/bin/deepin-wine-venturi-setter ln -s /opt/apps/deepin-wine-runner/deepin-wine-venturi-setter.py /tmp/spark-deepin-wine-runner-builder/usr/bin/deepin-wine-venturi-setter
bash builddeb/ChangeDebVersion.sh
sudo chown -R root:root /tmp/spark-deepin-wine-runner-builder sudo chown -R root:root /tmp/spark-deepin-wine-runner-builder
dpkg-deb -Z xz -b /tmp/spark-deepin-wine-runner-builder spark-deepin-wine-runner.deb dpkg-deb -Z xz -z 9 -b /tmp/spark-deepin-wine-runner-builder spark-deepin-wine-runner.deb
sudo rm -rfv /tmp/spark-deepin-wine-runner-builder
# 构建 ace 包
cp -rv deb-ace /tmp/spark-deepin-wine-runner-builder
cp -rv spark-deepin-wine-runner.deb /tmp/spark-deepin-wine-runner-builder/opt/apps/spark-deepin-wine-runner-ace
bash builddeb/ChangeDebVersion.sh
sudo chown -R root:root /tmp/spark-deepin-wine-runner-builder
dpkg-deb -Z xz -z 9 -b /tmp/spark-deepin-wine-runner-builder spark-deepin-wine-runner-ace.deb
sudo rm -rfv /tmp/spark-deepin-wine-runner-builder sudo rm -rfv /tmp/spark-deepin-wine-runner-builder
install: install:

View File

@@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
pkexec apt update sudo apt update
pkexec apt install qemu-system qemu-user qemu-user-static -y sudo apt install qemu-system qemu-user qemu-efi qemu-efi-aarch64 qemu-efi-arm -y
sudo apt install qemu-user-static binfmt-support qemu-system-gui -y
echo 安装完成!按回车键退出 echo 安装完成!按回车键退出
read read

110
README.md
View File

@@ -1,45 +1,27 @@
<p width=100px align="center"><img src="https://storage.deepin.org/thread/202208031419283599_deepin-wine-runner.png"></p> <p width=100px align="center"><img src="https://storage.deepin.org/thread/202208031419283599_deepin-wine-runner.png"></p>
<h1 align="center">Wine 运行器 3.3.0.1</h1> <h1 align="center">Wine 运行器 3.5.0</h1>
<hr> <hr>
<a href='https://gitee.com/gfdgd-xi/deep-wine-runner/stargazers'><img src='https://gitee.com/gfdgd-xi/deep-wine-runner/badge/star.svg?theme=dark' alt='star'></img></a>
<a href='https://gitee.com/gfdgd-xi/deep-wine-runner/members'><img src='https://gitee.com/gfdgd-xi/deep-wine-runner/badge/fork.svg?theme=dark' alt='fork'></img></a>
## 介绍 ## 介绍
Wine运行器是一个能让Linux用户更加方便地运行Windows应用的程序内置了对Wine图形化的支持、各种Wine工具、自制的Wine程序打包器运行库安装工具等。 Wine运行器是一个能让Linux用户更加方便地运行Windows应用的程序。原版的 Wine 只能使用命令操作且安装过程较为繁琐对小白不友好。于是该运行器为了解决该痛点内置了对Wine图形化的支持、Wine 安装器、微型应用商店、各种Wine工具、自制的Wine程序打包器运行库安装工具等。
它同时还内置了基于Qemu/VirtualBox制作的、专供小白使用的Windows虚拟机安装工具可以做到只需下载系统镜像并点击安装即可无需考虑虚拟机的安装、创建、分区等操作也能在非 X86 架构安装 X86 架构的 Windows 操作系统(但是效率较低)。 它同时还内置了基于Qemu/VirtualBox制作的、专供小白使用的Windows虚拟机安装工具可以做到只需下载系统镜像并点击安装即可无需考虑虚拟机的安装、创建、分区等操作也能在非 X86 架构安装 X86 架构的 Windows 操作系统(但是效率较低,可以运行些老系统)。
此外它还简化了如下命令让你可以更简便地使用Wine 而且对于部分 Wine 应用适配者来说,提供了图形化的打包工具,以及提供了一些常用工具以及运行库的安装方式,以及能安装多种不同的 Wine 以测试效果,能极大提升适配效率。
```bash 且对于 Deepin23 用户做了特别优化,以便能在缺少 i386 运行库的情况下运行 Wine32。同时也为非 X86 架构用户提供了 Box86/64、Qemu User 的安装方式
env WINEPREFIX=容器路径 winewine的路径 可执行文件路径
```
让你可以简易方便的使用 wine ![截图_选择区域_20221002221112.png](https://storage.deepin.org/thread/202210022215217037_截图_选择区域_20221002221112.png)
是使用 Python3 的 PyQt5 构建的
测试平台deepin 20.8UOS 家庭版 22Ubuntu 22.04Ubuntu 20.04Ubuntu 23.04UOS 专业版 1050openkylincuteosyoyo os
![截图_选择区域_20221002221112.png](https://storage.deepin.org/thread/202210022215217037_截图_选择区域_20221002221112.png)
而打包器可以方便的把您的 wine 容器打包成 deb 包供他人使用,程序创建的 deb 构建临时文件夹目录树如下:
```bash
/XXX
├── DEBIAN
│ └── control
│ └── postrm可选
└── opt
└── apps
└── XXX
├── entries
│ ├── applications
│ │ └── XXX.desktop
│ └── icons
│ └── hicolor
│ └── scalable
│ └── apps
│ └── XXX.pngXXX.svg
├── files
│ ├── files.7z
│ └── run.sh
└── info
11 directories, 6 files
```
[![star](https://gitee.com/gfdgd-xi/deep-wine-runner/badge/star.svg?theme=dark)](https://gitee.com/gfdgd-xi/deep-wine-runner/stargazers) [![star](https://gitee.com/gfdgd-xi/deep-wine-runner/badge/star.svg?theme=dark)](https://gitee.com/gfdgd-xi/deep-wine-runner/stargazers)
最后感谢 [@鹤舞白沙](https://bbs.deepin.org/user/227203) 编写的《Wine运行器和Wine打包器傻瓜式使用教程小白专用链接https://bbs.deepin.org/post/246837 最后感谢 [@鹤舞白沙](https://bbs.deepin.org/user/227203) 编写的《Wine运行器和Wine打包器傻瓜式使用教程小白专用链接https://bbs.deepin.org/post/246837
打包器视频教程https://www.bilibili.com/video/BV1Bh4y1Q7nT/
Wine 运行器 QQ 交流群762985460
### 注
spark-deepin-wine-runner 是普通包spark-deepin-wine-runner-ace 是使用 ace 兼容环境运行的运行器
## 软件架构 ## 软件架构
理论上支持全架构,如果 Python 能运行的话 理论上支持全架构,如果 Python 能运行的话
非 X86 架构会利用到 `box86``exagear``qemu` 等技术 非 X86 架构会利用到 `box86``exagear``qemu` 等技术
@@ -136,6 +118,65 @@ desktop文件中StartupWMClass字段。用于让桌面组件将窗口类名与de
![image.png](https://storage.deepin.org/thread/202207190822204627_image.png) ![image.png](https://storage.deepin.org/thread/202207190822204627_image.png)
## 更新日志 ## 更新日志
### 3.5.02023年11月17日
**※1、虚拟机工具支持 kvm 检测**
**※2、修改虚拟机工具提示文本新增对 UOS 3a4000 用户无法正常使用 Qemu 的解决方案**
**※3、在主界面点击“安装”按钮后自动切换至帮助页面**
**※4、新增虚拟机日志输出和读取功能**
**※5、新增Qemu测试测试功能**
**※6、虚拟机工具支持安装/运行 arm32、arm64 架构的系统**
**※7、修复虚拟机工具在系统版本选择第 5 项及以后出现不会挂载 ISO 的问题(使用 Qemu 的情况下)**
**※8、修复简易打包器无法打开的问题 https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I85F9M**
**※9、生态适配脚本打包器支持正确根据打包结果显示打包成功/失败 https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I7D83Z**
10、生态适配脚本打包器设置使用 xz 格式打包 deb
11、新增 ace 包
12、虚拟机工具支持强制关闭 VirtualBox/Qemu并增加了对 Windows 7 安装脚本的检测
13、新增 lat 翻译器安装选项
![图片.png](https://storage.deepin.org/thread/20231117194051562_图片.png)
### 3.4.12023年09月30日
**※1、支持识别 spark-wine8-wow 且打包时可以使用该 wine**
**※2、替换安装 Box86 的 pkexec 为 sudo**
**※3、Wine 下载工具新增更多 Wine**
![图片.png](https://storage.deepin.org/thread/202309301259131162_图片.png)
### 3.4.0.12023年08月18日
**※1、修复部分高性能机器打包器提示“无效的压缩参数”https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I7SMTJ**
**※2、支持设置程序字体大小https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I7SAYE**
### 3.4.02023年08月11日
**※1、修复简易打包器无法打开的问题以及 Wine 识别错误的问题**
**※2、高级打包器支持多 .desktop 分别设置不同的 MimeType**
**※3、修复运行器在 Ubuntu 23 的安装问题**
**※4、高级打包器支持导出/导入填写信息**
**※5、Deepin 23 支持使用 Winetricks**
**※6、新增视频教程**
**※7、修复虚拟机工具在检测到 Qemu 磁盘但没有安装 Qemu 时无法启动的问题**
**※8、修复虚拟机工具的一些问题并调整部分设置**
**※9、虚拟机工具支持设置 UEFI 启动**
**※10、虚拟机安装工具提供 LoongArch 新世界版本**
11、高级打包器支持隐藏输入框以及使用小字体
12、打包器提供 bcm 和 dcm wine 支持
13、修复星火 wine 配置错误问题
14、打包器支持多线程打包
15、修复升级工具问题https://gitee.com/gfdgd-xi/uengine-runner/issues/I6ZRZX
16、跟进打包器 run.sh 模板
17、云沙箱新增 cloud.vdnel.cn
18、打包器新增分类 Game、System、AudioVideo
19、修复安装 Box64 时源里没有 libc6:armhf 导致无法安装的问题
![图片.png](https://storage.deepin.org/thread/2023081111212518_图片.png)
### 3.3.0.12023年07月25日 ### 3.3.0.12023年07月25日
**※1、修复运行器打开主界面不进行任何操作但 CPU 占用率过高的问题** **※1、修复运行器打开主界面不进行任何操作但 CPU 占用率过高的问题**
**※2、修复运行器运行器局部无法正常移除的问题** **※2、修复运行器运行器局部无法正常移除的问题**
@@ -158,6 +199,7 @@ desktop文件中StartupWMClass字段。用于让桌面组件将窗口类名与de
15、修复部分组件没完全换源的问题部分组件支持自动换可用源 15、修复部分组件没完全换源的问题部分组件支持自动换可用源
![图片.png](https://storage.deepin.org/thread/202307121216143835_图片.png) ![图片.png](https://storage.deepin.org/thread/202307121216143835_图片.png)
![图片.png](https://storage.deepin.org/thread/202307121221299140_图片.png) ![图片.png](https://storage.deepin.org/thread/202307121221299140_图片.png)
### 3.2.22023年05月12日 ### 3.2.22023年05月12日
**※1. 修改源地址(迁出 Gitlink** **※1. 修改源地址(迁出 Gitlink**
**※2. 修复非 X86 架构运行器主页面虚拟机工具禁用的问题;** **※2. 修复非 X86 架构运行器主页面虚拟机工具禁用的问题;**

65
README_en.md Normal file
View File

@@ -0,0 +1,65 @@
<p width=100px align="center"><img src="https://storage.deepin.org/thread/202208031419283599_deepin-wine-runner.png"></p>
<h1 align="center">Wine Runner 3.4.0.1</h1>
<hr>
<a href='https://gitee.com/gfdgd-xi/deep-wine-runner/stargazers'><img src='https://gitee.com/gfdgd-xi/deep-wine-runner/badge/star.svg?theme=dark' alt='star'></img></a>
<a href='https://gitee.com/gfdgd-xi/deep-wine-runner/members'><img src='https://gitee.com/gfdgd-xi/deep-wine-runner/badge/fork.svg?theme=dark' alt='fork'></img></a>
## Introduce
Wine Runner is a program that help Linux user to run Windows program. However,
![截图_选择区域_20221002221112.png](https://storage.deepin.org/thread/202210022215217037_截图_选择区域_20221002221112.png)
[![star](https://gitee.com/gfdgd-xi/deep-wine-runner/badge/star.svg?theme=dark)](https://gitee.com/gfdgd-xi/deep-wine-runner/stargazers)
最后感谢 [@鹤舞白沙](https://bbs.deepin.org/user/227203) 编写的《Wine运行器和Wine打包器傻瓜式使用教程小白专用链接https://bbs.deepin.org/post/246837
Wine Runner Packager Video tutorial: https://www.bilibili.com/video/BV1Bh4y1Q7nT/
Wine Runner QQ communication group:762985460
## Program Support Architecture
Runner is able to run for common architecture if these system can run Python.
Non-x86 system will use `box86/box64`, `exagear`, `qemu` and so on.
## Wine Runner Auto Builder(Newest Version)
This version can't sure what bug will happen when you are using.
Download Website: https://github.com/gfdgd-xi/deep-wine-runner/actions/workflows/auto-building.yml
## Which App Store You Can Download Wine Runner
### Deepin/UOS App Store
![图片.png](https://storage.deepin.org/thread/202304192211278050_图片.png)
### Spark Store
![图片.png](https://storage.deepin.org/thread/202304192212308212_图片.png)
### Loongson App Store
![图片.png](https://storage.deepin.org/thread/20230603201852396_图片.png)
## Git Branch Introduce
### main
The main branch
## Different Of Version(It No longer Distinguishing From 3.1.0)
### Normal
Normal Version(It usually from Gitee, Github, Gitlink, etc)
### `-spark` In Version
Install runner from Spark Store
### `-uos` In Version
Install runner from Deepin/UOS App Store, and you can install without open the develop mode.
### `-52` In Version
It only release for 52pojie, and some function was removed such as updater, bug uploader and so on.
![image.png](https://storage.deepin.org/thread/202209251259142818_image.png)
Nobody want to see this error when you are using.
## Program Tips
I don't want to write, it's too long and too old.
## Update Log
### 3.4.0.1(August 18th, 2023)
1. **Repair some machine tips `无效的压缩参数` when you are packing program in Wine Runner Packager, you also can see this isscue: https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I7SMTJ**
2. **Runner support to set program font size, you also can see this isscue: https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I7SAYE**
### 3.4.0(August 11th, 2023)
1. **Repair Easy Packager can't open and check wine error problem.**
2. **Professional Packager support to set different mimetype value for different .desktop file**
3. **Repair install runner problem in Ubuntu 23.04**
4. **Professional Packager support to save pack info what you are inputing**
5. **Deepin23 support run Winetricks with runner**
6. **Add video help website**
7. and so on

View File

@@ -7,39 +7,103 @@
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 的 tkinter 构建 # 基于 Python3 的 tkinter 构建
########################################################################################### ###########################################################################################
cd `dirname $0`
VBoxManage showvminfo Windows VBoxManage showvminfo Windows
if [[ 0 == $? ]]; then if [[ 0 == $? ]]; then
# 检测到虚拟机存在,启动虚拟机 # 检测到虚拟机存在,启动虚拟机
VBoxManage startvm Windows VBoxManage startvm Windows > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
exit exit
fi fi
# 检查是否有 QEMU # 检查是否有 QEMU
if [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then which qemu-system-x86_64
if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
if [[ -f "$HOME/.config/deepin-wine-runner/QemuSetting.json" ]]; then if [[ -f "$HOME/.config/deepin-wine-runner/QemuSetting.json" ]]; then
echo 有设置文件,读设置文件 echo 有设置文件,读设置文件
cd `dirname $0` cd `dirname $0`
python3 ./VM/StartQemu.py python3 ./VM/StartQemu.py
exit exit
fi fi
# 查看CPU个数
CpuSocketNum=`cat /proc/cpuinfo | grep "cpu cores" | uniq | wc -l`
# 查看CPU核心数
CpuCoreNum=`grep 'core id' /proc/cpuinfo | sort -u | wc -l`
# 查看逻辑CPU的个数 # 查看逻辑CPU的个数
CpuCount=`cat /proc/cpuinfo| grep "processor"| wc -l` CpuCount=`cat /proc/cpuinfo| grep "processor"| wc -l`
# 总内存大小GB # 总内存大小GB
MemTotal=`awk '($1 == "MemTotal:"){printf "%.2f\n",$2/1024/1024}' /proc/meminfo` MemTotal=`awk '($1 == "MemTotal:"){printf "%.2f\n",$2/1024/1024}' /proc/meminfo`
use=$(echo "scale=4; $MemTotal / 3" | bc) use=$(echo "scale=4; $MemTotal / 3" | bc)
if [[ `arch` == "x86_64" ]]; then
cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep amd64
if [[ $? == 0 ]] || [[ ! -e ~/.config/deepin-wine-runner/QEMU-ARCH ]]; then
# amd64 架构
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
./VM/kvm-ok
if [[ $? == 0 ]] && [[ `arch` == "x86_64" ]]; then
echo X86 架构,使用 kvm 加速 echo X86 架构,使用 kvm 加速
kvm --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 qemu-system-x86_64 --enable-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 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
exit exit
fi fi
echo 非 X86 架构,不使用 kvm 加速 echo 不使用 kvm 加速
qemu-system-x86_64 --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount -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 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
exit exit
fi fi
cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep armhf
if [[ $? == 0 ]]; then
# armhf 架构
# 寻找 UEFI 固件
if [[ -f /usr/share/AAVMF/AAVMF32_CODE.fd ]]; then
qemuUEFI="--bios /usr/share/AAVMF/AAVMF32_CODE.fd"
else
if [[ -f ./VM/AAVMF32_CODE.fd ]]; then
qemuUEFI="--bios ./VM/AAVMF32_CODE.fd"
fi
fi
echo $qemuUEFI
./VM/kvm-ok
if [[ $? == 0 ]] && [[ `arch` == "aarch64" ]]; then
qemu-system-arm --enable-kvm --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1
exit
fi
qemu-system-arm --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1
exit
fi
cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep aarch64
if [[ $? == 0 ]]; then
# aarch64 架构
# 寻找 UEFI 固件
if [[ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]]; then
qemuUEFI="--bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd"
else
if [[ -f ./VM/QEMU_AARCH64_EFI.fd ]]; then
qemuUEFI="--bios ./VM/QEMU_AARCH64_EFI.fd"
fi
fi
echo $qemuUEFI
./VM/kvm-ok
if [[ $? == 0 ]] && [[ `arch` == "aarch64" ]]; then
qemu-system-aarch64 --enable-kvm --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1
exit
fi
qemu-system-aarch64 --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1
exit
fi
fi
zenity --question --no-wrap --text="检查到您未创建所指定的虚拟机,是否创建虚拟机并继续?\n如果不创建将无法使用" zenity --question --no-wrap --text="检查到您未创建所指定的虚拟机,是否创建虚拟机并继续?\n如果不创建将无法使用"
if [[ 1 == $? ]]; then if [[ 1 == $? ]]; then
# 用户不想创建虚拟机,结束 # 用户不想创建虚拟机,结束
exit exit
fi fi
cd `dirname $0`
./VM/VirtualMachine ./VM/VirtualMachine

File diff suppressed because it is too large Load Diff

BIN
VM-source/AAVMF32_CODE.fd Normal file

Binary file not shown.

View File

@@ -1,6 +1,6 @@
############################################################################# #############################################################################
# Makefile for building: VirtualMachine # Makefile for building: VirtualMachine
# Generated by qmake (3.1) (Qt 5.15.8) # Generated by qmake (3.1) (Qt 5.15.7)
# Project: VirtualMachine.pro # Project: VirtualMachine.pro
# Template: app # Template: app
# Command: /usr/lib/qt5/bin/qmake -o Makefile VirtualMachine.pro # Command: /usr/lib/qt5/bin/qmake -o Makefile VirtualMachine.pro
@@ -85,11 +85,9 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Attica.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Attica.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_BluezQt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KArchive.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KAuth.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KAuth.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KAuthCore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KBookmarks.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KBookmarks.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCMUtils.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCompletion.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCompletion.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri \
@@ -97,12 +95,10 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigWidgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDeclarative.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGlobalAccel.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGlobalAccel.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGuiAddons.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGuiAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIconThemes.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIconThemes.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIdleTime.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOCore.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOCore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOFileWidgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOFileWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOGui.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOGui.pri \
@@ -110,42 +106,14 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KItemViews.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KItemViews.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KJobWidgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KJobWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KNTLM.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KNTLM.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KScreen.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KParts.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KSyntaxHighlighting.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KTextWidgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KTextWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandClient.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandServer.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWidgetsAddons.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWidgetsAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KXmlGui.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KXmlGui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3danimation.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3danimation_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dcore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dcore_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dextras.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dextras_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dinput.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dinput_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dlogic.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dlogic_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquick.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquick_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickanimation.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickanimation_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickextras.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickextras_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickinput.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickinput_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickrender.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickrender_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickscene2d.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3drender.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3drender_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_charts.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \
@@ -154,11 +122,9 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcommon.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcore.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkdeclarative.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkwidget.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_DtkWidget.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
@@ -173,8 +139,6 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \
@@ -191,12 +155,9 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickcontrols2.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quicktemplates2.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sensors.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \
@@ -207,14 +168,11 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandclient.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandclient_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandcompositor.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandcompositor_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webchannel.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webchannel.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webengine.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webengine.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginecore.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginecore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginewidgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginewidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_websockets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri \
@@ -222,11 +180,6 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xmlpatterns.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_ModemManagerQt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_NetworkManagerQt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_QApt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_QuickAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Solid.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Solid.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetCore.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetCore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetUi.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetUi.pri \
@@ -288,11 +241,9 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Attica.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Attica.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_BluezQt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KArchive.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KAuth.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KAuth.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KAuthCore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KBookmarks.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KBookmarks.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCMUtils.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCompletion.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCompletion.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri \
@@ -300,12 +251,10 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigWidgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDeclarative.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGlobalAccel.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGlobalAccel.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGuiAddons.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGuiAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIconThemes.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIconThemes.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIdleTime.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOCore.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOCore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOFileWidgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOFileWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOGui.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOGui.pri \
@@ -313,42 +262,14 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KItemViews.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KItemViews.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KJobWidgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KJobWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KNTLM.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KNTLM.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KScreen.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KParts.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KSyntaxHighlighting.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KTextWidgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KTextWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandClient.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandServer.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWidgetsAddons.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWidgetsAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KXmlGui.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KXmlGui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3danimation.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3danimation_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dcore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dcore_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dextras.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dextras_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dinput.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dinput_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dlogic.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dlogic_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquick.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquick_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickanimation.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickanimation_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickextras.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickextras_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickinput.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickinput_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickrender.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickrender_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickscene2d.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3drender.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3drender_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_charts.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \
@@ -357,11 +278,9 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcommon.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcore.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkdeclarative.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkwidget.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_DtkWidget.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
@@ -376,8 +295,6 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \
@@ -394,12 +311,9 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickcontrols2.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quicktemplates2.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sensors.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \
@@ -410,14 +324,11 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandclient.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandclient_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandcompositor.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandcompositor_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webchannel.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webchannel.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webengine.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webengine.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginecore.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginecore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginewidgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginewidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_websockets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri \
@@ -425,11 +336,6 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xmlpatterns.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_ModemManagerQt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_NetworkManagerQt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_QApt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_QuickAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Solid.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Solid.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetCore.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetCore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetUi.pri \ /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetUi.pri \
@@ -469,11 +375,9 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Attica.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Attica.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_BluezQt.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KArchive.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KAuth.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KAuth.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KAuthCore.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KBookmarks.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KBookmarks.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCMUtils.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCompletion.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCompletion.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri:
@@ -481,12 +385,10 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigWidgets.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigWidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDeclarative.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGlobalAccel.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGlobalAccel.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGuiAddons.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGuiAddons.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIconThemes.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIconThemes.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIdleTime.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOCore.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOCore.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOFileWidgets.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOFileWidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOGui.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOGui.pri:
@@ -494,42 +396,14 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KItemViews.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KItemViews.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KJobWidgets.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KJobWidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KNTLM.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KNTLM.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KScreen.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KParts.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KSyntaxHighlighting.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KTextWidgets.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KTextWidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandClient.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandServer.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWidgetsAddons.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWidgetsAddons.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KXmlGui.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KXmlGui.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3danimation.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3danimation_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dcore.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dcore_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dextras.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dextras_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dinput.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dinput_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dlogic.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dlogic_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquick.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquick_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickanimation.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickanimation_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickextras.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickextras_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickinput.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickinput_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickrender.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickrender_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickscene2d.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickscene2d_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3drender.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3drender_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_charts.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri:
@@ -538,11 +412,9 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcommon.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcore.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcore.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkdeclarative.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkwidget.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_DtkWidget.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri:
@@ -557,8 +429,6 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri:
@@ -575,12 +445,9 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickcontrols2.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quicktemplates2.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sensors.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri:
@@ -591,14 +458,11 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandclient.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandclient_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandcompositor.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandcompositor_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webchannel.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webchannel.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webengine.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webengine.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginecore.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginecore.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginewidgets.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginewidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_websockets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri:
@@ -606,11 +470,6 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xmlpatterns.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_ModemManagerQt.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_NetworkManagerQt.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_QApt.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_QuickAddons.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Solid.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Solid.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetCore.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetCore.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetUi.pri: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetUi.pri:
@@ -689,6 +548,7 @@ qrc_图标.cpp: 图标.qrc \
/usr/lib/qt5/bin/rcc \ /usr/lib/qt5/bin/rcc \
deepin-wine-runner.png \ deepin-wine-runner.png \
deepin-wine-runner.svg \ deepin-wine-runner.svg \
application-vnd.oasis.opendocument.text.svg \
截图_VirtualBox\ Machine_20220712142929.png \ 截图_VirtualBox\ Machine_20220712142929.png \
截图/截图_VirtualBox\ Machine_20220712143018.png \ 截图/截图_VirtualBox\ Machine_20220712143018.png \
截图/截图_VirtualBox\ Machine_20220712192850.png \ 截图/截图_VirtualBox\ Machine_20220712192850.png \
@@ -702,6 +562,7 @@ qrc_图标.cpp: 图标.qrc \
截图/截图_VirtualBox_20220712223705.png \ 截图/截图_VirtualBox_20220712223705.png \
截图/截图_VirtualBox\ Machine_20220712143006.png \ 截图/截图_VirtualBox\ Machine_20220712143006.png \
截图/截图_VirtualBox\ Machine_20220712191756.png \ 截图/截图_VirtualBox\ Machine_20220712191756.png \
test.qcow2 \
LANG/virtualmachine-en_US.ts \ LANG/virtualmachine-en_US.ts \
LANG/virtualmachine-en_US.qm LANG/virtualmachine-en_US.qm
/usr/lib/qt5/bin/rcc -name 图标 图标.qrc -o qrc_图标.cpp /usr/lib/qt5/bin/rcc -name 图标 图标.qrc -o qrc_图标.cpp
@@ -718,17 +579,17 @@ compiler_moc_header_clean:
moc_mainwindow.cpp: mainwindow.h \ moc_mainwindow.cpp: mainwindow.h \
moc_predefs.h \ moc_predefs.h \
/usr/lib/qt5/bin/moc /usr/lib/qt5/bin/moc
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -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/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -I/usr/include/c++/8/backward -I/usr/lib/gcc/x86_64-linux-gnu/8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed -I/usr/x86_64-linux-gnu/include -I/usr/include/x86_64-linux-gnu -I/usr/include mainwindow.h -o moc_mainwindow.cpp /usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -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/include/c++/11 -I/usr/include/x86_64-linux-gnu/c++/11 -I/usr/include/c++/11/backward -I/usr/lib/gcc/x86_64-linux-gnu/11/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include mainwindow.h -o moc_mainwindow.cpp
moc_infoutils.cpp: infoutils.h \ moc_infoutils.cpp: infoutils.h \
moc_predefs.h \ moc_predefs.h \
/usr/lib/qt5/bin/moc /usr/lib/qt5/bin/moc
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -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/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -I/usr/include/c++/8/backward -I/usr/lib/gcc/x86_64-linux-gnu/8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed -I/usr/x86_64-linux-gnu/include -I/usr/include/x86_64-linux-gnu -I/usr/include infoutils.h -o moc_infoutils.cpp /usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -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/include/c++/11 -I/usr/include/x86_64-linux-gnu/c++/11 -I/usr/include/c++/11/backward -I/usr/lib/gcc/x86_64-linux-gnu/11/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include infoutils.h -o moc_infoutils.cpp
moc_qemusetting.cpp: qemusetting.h \ moc_qemusetting.cpp: qemusetting.h \
moc_predefs.h \ moc_predefs.h \
/usr/lib/qt5/bin/moc /usr/lib/qt5/bin/moc
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -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/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -I/usr/include/c++/8/backward -I/usr/lib/gcc/x86_64-linux-gnu/8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed -I/usr/x86_64-linux-gnu/include -I/usr/include/x86_64-linux-gnu -I/usr/include qemusetting.h -o moc_qemusetting.cpp /usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -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/include/c++/11 -I/usr/include/x86_64-linux-gnu/c++/11 -I/usr/include/c++/11/backward -I/usr/lib/gcc/x86_64-linux-gnu/11/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include qemusetting.h -o moc_qemusetting.cpp
compiler_moc_objc_header_make_all: compiler_moc_objc_header_make_all:
compiler_moc_objc_header_clean: compiler_moc_objc_header_clean:

BIN
VM-source/OVMF.fd Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

6
VM-source/QemuSystemInstall.sh Executable file
View File

@@ -0,0 +1,6 @@
#!/bin/bash
sudo apt update
sudo apt install qemu-system qemu-user qemu-efi qemu-efi-aarch64 qemu-efi-arm -y
sudo apt install qemu-user-static binfmt-support qemu-system-gui -y
echo 安装完成!按回车键退出
read

109
VM-source/StartVM.sh Executable file
View File

@@ -0,0 +1,109 @@
#!/bin/bash
# 使用系统默认的 bash 运行
###########################################################################################
# 作者gfdgd xi
# 版本1.7.0
# 更新时间2022年07月15日
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 的 tkinter 构建
###########################################################################################
cd `dirname $0`
VBoxManage showvminfo Windows
if [[ 0 == $? ]]; then
# 检测到虚拟机存在,启动虚拟机
VBoxManage startvm Windows > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
exit
fi
# 检查是否有 QEMU
which qemu-system-x86_64
if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
if [[ -f "$HOME/.config/deepin-wine-runner/QemuSetting.json" ]]; then
echo 有设置文件,读设置文件
cd `dirname $0`
python3 ./VM/StartQemu.py
exit
fi
# 查看CPU个数
CpuSocketNum=`cat /proc/cpuinfo | grep "cpu cores" | uniq | wc -l`
# 查看CPU核心数
CpuCoreNum=`grep 'core id' /proc/cpuinfo | sort -u | wc -l`
# 查看逻辑CPU的个数
CpuCount=`cat /proc/cpuinfo| grep "processor"| wc -l`
# 总内存大小GB
MemTotal=`awk '($1 == "MemTotal:"){printf "%.2f\n",$2/1024/1024}' /proc/meminfo`
use=$(echo "scale=4; $MemTotal / 3" | bc)
cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep amd64
if [[ $? == 0 ]] || [[ ! -e ~/.config/deepin-wine-runner/QEMU-ARCH ]]; then
# amd64 架构
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
./VM/kvm-ok
if [[ $? == 0 ]] && [[ `arch` == "x86_64" ]]; then
echo X86 架构,使用 kvm 加速
qemu-system-x86_64 --enable-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 > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
exit
fi
echo 不使用 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 $qemuUEFI > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
exit
fi
cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep armhf
if [[ $? == 0 ]]; then
# armhf 架构
# 寻找 UEFI 固件
if [[ -f /usr/share/AAVMF/AAVMF32_CODE.fd ]]; then
qemuUEFI="--bios /usr/share/AAVMF/AAVMF32_CODE.fd"
else
if [[ -f ./VM/AAVMF32_CODE.fd ]]; then
qemuUEFI="--bios ./VM/AAVMF32_CODE.fd"
fi
fi
echo $qemuUEFI
./VM/kvm-ok
if [[ $? == 0 ]] && [[ `arch` == "aarch64" ]]; then
qemu-system-arm --enable-kvm --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 -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1
exit
fi
qemu-system-arm --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 -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1
exit
fi
cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep aarch64
if [[ $? == 0 ]]; then
# aarch64 架构
# 寻找 UEFI 固件
if [[ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]]; then
qemuUEFI="--bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd"
else
if [[ -f ./VM/QEMU_AARCH64_EFI.fd ]]; then
qemuUEFI="--bios ./VM/QEMU_AARCH64_EFI.fd"
fi
fi
echo $qemuUEFI
./VM/kvm-ok
if [[ $? == 0 ]] && [[ `arch` == "aarch64" ]]; then
qemu-system-aarch64 --enable-kvm --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 -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1
exit
fi
qemu-system-aarch64 --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 -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1
exit
fi
fi
zenity --question --no-wrap --text="检查到您未创建所指定的虚拟机,是否创建虚拟机并继续?\n如果不创建将无法使用"
if [[ 1 == $? ]]; then
# 用户不想创建虚拟机,结束
exit
fi
./VM/VirtualMachine

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.8.2, 2023-07-12T19:05:39. --> <!-- Written by QtCreator 6.0.2, 2023-11-11T19:43:38. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>
<value type="QByteArray">{4ffd6df9-1365-4837-81b1-582e0e2d1f21}</value> <value type="QByteArray">{a0cf9984-2e67-4681-b510-f5b353d70d1b}</value>
</data> </data>
<data> <data>
<variable>ProjectExplorer.Project.ActiveTarget</variable> <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -37,6 +37,7 @@
<value type="bool" key="EditorConfiguration.MouseHiding">true</value> <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value> <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value> <value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value> <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value> <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value> <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
@@ -45,156 +46,124 @@
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value> <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value> <value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value> <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value> <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value> <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value> <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value> <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value> <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap> </valuemap>
</data> </data>
<data> <data>
<variable>ProjectExplorer.Project.PluginSettings</variable> <variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap"> <valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/> <valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value> <value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap> </valuemap>
</data> </data>
<data> <data>
<variable>ProjectExplorer.Project.Target.0</variable> <variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap"> <valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.6 in PATH (qt5)</value> <value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.15.6 in PATH (qt5)</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.3 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ab20853c-9d79-473a-820e-8e95c145170e}</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.15.3 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{37ac6aef-5dcd-46dc-8ca6-00e6a5a4377d}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value> <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source</value> <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/orangepi/Desktop/deep-wine-runner/../VM-source</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/orangepi/Desktop/deep-wine-runner/../VM-source</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap> </valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap> </valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap> </valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap> </valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap> </valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap> </valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value> <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0"> <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value> <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap> </valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value> <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy Configuration</value> <valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap> </valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value> <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0"> <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value> <value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value> <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value> <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value> <valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value> <value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">VirtualMachine</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">VirtualMachine2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/orangepi/Desktop/windows-virtual-machine-installer-for-wine-runner/VirtualMachine.pro</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value> <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/orangepi/Desktop/windows-virtual-machine-installer-for-wine-runner/VirtualMachine.pro</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">VirtualMachine.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value> <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value> <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value> <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value> <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value> <value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/orangepi/Desktop/VM-source</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source</value>
</valuemap> </valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value> <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap> </valuemap>
@@ -205,10 +174,10 @@
</data> </data>
<data> <data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable> <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">20</value> <value type="int">22</value>
</data> </data>
<data> <data>
<variable>Version</variable> <variable>Version</variable>
<value type="int">20</value> <value type="int">22</value>
</data> </data>
</qtcreator> </qtcreator>

View File

@@ -0,0 +1,214 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.8.2, 2023-07-12T19:05:39. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{4ffd6df9-1365-4837-81b1-582e0e2d1f21}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ab20853c-9d79-473a-820e-8e95c145170e}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy Configuration</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">VirtualMachine</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">VirtualMachine.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">20</value>
</data>
<data>
<variable>Version</variable>
<value type="int">20</value>
</data>
</qtcreator>

View File

@@ -0,0 +1,347 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 7.0.1, 2023-11-07T19:30:53. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{4ffd6df9-1365-4837-81b1-582e0e2d1f21}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">2</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ab20853c-9d79-473a-820e-8e95c145170e}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/building/deep-wine-runner/VM-source</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/building/deep-wine-runner/VM-source</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/building/deep-wine-runner/VM-source</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.1</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">桌面</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">桌面</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{b17c65ba-6912-41bf-b5c1-4c7446f6c967}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/build-VirtualMachine-unknown-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/build-VirtualMachine-unknown-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/build-VirtualMachine-unknown-Debug</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">2</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -0,0 +1,34 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128" viewBox="0 0 128 128">
<defs>
<linearGradient id="x-office-document-c" x1="50%" x2="50%" y1="0%" y2="100%">
<stop offset="0%" stop-color="#005CC2"/>
<stop offset="100%" stop-color="#004DA3"/>
</linearGradient>
<path id="x-office-document-b" d="M84,95 C84,99.9705627 79.9705627,104 75,104 L9,104 C4.02943725,104 6.08718376e-16,99.9705627 0,95 L0,9 C-6.08718376e-16,4.02943725 4.02943725,9.13077564e-16 9,0 L58,0 L84,26 L84,95 Z"/>
<filter id="x-office-document-a" width="127.4%" height="122.1%" x="-13.7%" y="-9.1%" filterUnits="objectBoundingBox">
<feOffset dy="2" in="SourceAlpha" result="shadowOffsetOuter1"/>
<feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="3.5"/>
<feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 0.22745098 0 0 0 0 0.494117647 0 0 0 0 0.960784314 0 0 0 0.2 0"/>
</filter>
<linearGradient id="x-office-document-f" x1="50%" x2="10.489%" y1="50%" y2="91.194%">
<stop offset="0%" stop-color="#FFF" stop-opacity=".1"/>
<stop offset="100%" stop-color="#FFF" stop-opacity=".3"/>
</linearGradient>
<path id="x-office-document-e" d="M58,0 L84,26 L67,26 C62.0294373,26 58,21.9705627 58,17 L58,0 L58,0 Z"/>
<filter id="x-office-document-d" width="188.5%" height="188.5%" x="-44.2%" y="-36.5%" filterUnits="objectBoundingBox">
<feOffset dy="2" in="SourceAlpha" result="shadowOffsetOuter1"/>
<feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="3.5"/>
<feComposite in="shadowBlurOuter1" in2="SourceAlpha" operator="out" result="shadowBlurOuter1"/>
<feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05 0"/>
</filter>
</defs>
<g fill="none" fill-rule="evenodd">
<g transform="translate(22 14)">
<use fill="#000" filter="url(#x-office-document-a)" xlink:href="#x-office-document-b"/>
<use fill="url(#x-office-document-c)" xlink:href="#x-office-document-b"/>
<use fill="#000" filter="url(#x-office-document-d)" xlink:href="#x-office-document-e"/>
<use fill="url(#x-office-document-f)" xlink:href="#x-office-document-e"/>
</g>
<path fill="#FFF" fill-opacity=".6" d="M92,50 L92,52 L36,52 L36,50 L92,50 Z M92,60 L92,62 L36,62 L36,60 L92,60 Z M92,70 L92,72 L36,72 L36,70 L92,70 Z M92,80 L92,82 L36,82 L36,80 L92,80 Z M92,90 L92,92 L36,92 L36,90 L92,90 Z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

12
VM-source/build.sh Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
#cd `dirname $0`
bin=$1
nasm -f bin $1 -o `basename $1`.bin
if [[ $? != 0 ]];then
exit
fi
sudo modprobe nbd 8
sudo qemu-nbd `dirname $0`/test.qcow2 --connect /dev/nbd0
sudo dd if=`basename $1`.bin of=/dev/nbd0
sudo qemu-nbd -d /dev/nbd0
kvm --hda `dirname $0`/test.qcow2 -rtc base=localtime

View File

@@ -12,6 +12,7 @@
#include <QCoreApplication> #include <QCoreApplication>
#include <infoutils.h> #include <infoutils.h>
#include "qemu.h" #include "qemu.h"
#include <QProcess>
// 懒得用 QThread 了(要继承) // 懒得用 QThread 了(要继承)
#include <thread> #include <thread>
using namespace std; using namespace std;
@@ -27,6 +28,37 @@ void buildvbox::CleanScreen(){
system("cls"); system("cls");
} }
// 获取 CPU 个数
int buildvbox::GetCPUSocket(){
// 获取命令返回值
QProcess process;
process.start("bash", QStringList() << "-c" << "cat /proc/cpuinfo | grep \"cpu cores\" | uniq | wc -l");
process.waitForStarted();
process.waitForFinished();
int value = process.readAllStandardOutput().toInt();
process.close();
// 判断异常值,例如没挂载 /proc
if(value <= 0){
value = 1;
}
return value;
}
// 获取 CPU 核心数
int buildvbox::GetCPUCore(){
QProcess process;
process.start("bash", QStringList() << "-c" << "grep 'core id' /proc/cpuinfo | sort -u | wc -l");
process.waitForStarted();
process.waitForFinished();
int value = process.readAllStandardOutput().toInt();
process.close();
// 判断异常值,例如没挂载 /proc
if(value <= 0){
value = 1;
}
return value;
}
QString buildvbox::GetNet(){ QString buildvbox::GetNet(){
QList<QNetworkInterface> netList = QNetworkInterface::allInterfaces(); QList<QNetworkInterface> netList = QNetworkInterface::allInterfaces();
foreach(QNetworkInterface net, netList){ foreach(QNetworkInterface net, netList){
@@ -49,45 +81,74 @@ int buildvbox::Download(QString url, QString path, QString fileName){
} }
buildvbox::buildvbox(QString isoPath, int id, int vm){ buildvbox::buildvbox(QString isoPath, int id, int vm){
/*if(vm == 1){
QDir vboxPath(QDir::homePath() + "/VirtualBox VMs/Windows");
if(vboxPath.exists()){
qDebug("虚拟机存在,直接启动!");
vbox vm("Windows");
vm.Start();
return;
}
}*/
QString programPath = QCoreApplication::applicationDirPath(); QString programPath = QCoreApplication::applicationDirPath();
/*if(!QFile::exists(programPath + "/a.iso")){
std::thread([=](){
while(1){
qDebug() << "a";
}
}).detach();
}*/
QString net = GetNet(); QString net = GetNet();
qDebug() << "使用网卡:" << net << endl; qDebug() << "使用网卡:" << net << endl;
if(vm == 0){ if(vm == 0){
//vbox *box = new vbox("Window"); // Qemu
//vbox vm("Windows");
qemu vm("Windows"); qemu vm("Windows");
bool setISOAlready = 0;
switch (id) { switch (id) {
case 0: case 0:
vm.Create("Windows7"); vm.Create("Windows7");
vm.SetDisplayMemory(32);
break; break;
case 1: case 1:
vm.Create("Windows7_64"); vm.Create("Windows7_64");
vm.SetDisplayMemory(32);
break; break;
case 2:
vm.Create("WindowsNT_64"); vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
break;
case 3:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
vm.EnabledUEFI(true);
break;
case 4:
vm.Create("Windows11_64");
vm.SetDisplayMemory(128);
vm.EnabledUEFI(true);
setISOAlready = 1;
break;
case 5:
vm.Create("WindowsXP_32");
vm.SetDisplayMemory(32);
setISOAlready = 1;
break;
case 6:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
setISOAlready = 1;
break;
case 7:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
vm.EnabledUEFI(true);
setISOAlready = 1;
break;
case 8:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
vm.UseArmhfEFI();
setISOAlready = 1;
break;
case 9:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
vm.UseAarch64EFI();
setISOAlready = 1;
break;
} }
vm.CreateDiskControl(); vm.CreateDiskControl();
//vm.CreateDiskControl("storage_controller_2"); //vm.CreateDiskControl("storage_controller_2");
vm.CreateDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", 131072); vm.CreateDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", 131072);
vm.MountDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2"); //vm.MountDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2");
vm.MountMainDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2");
if(!setISOAlready){
vm.MountISO(isoPath, "storage_controller_1", 0, 1); vm.MountISO(isoPath, "storage_controller_1", 0, 1);
switch (id) { switch (id) {
case 0: case 0:
@@ -97,30 +158,22 @@ buildvbox::buildvbox(QString isoPath, int id, int vm){
vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 2); vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 2);
break; break;
} }
/*vm.MountISO(isoPath, "storage_controller_1", 0, 1); }
switch (id) { else{
case 0: //vm.AutoInstall(isoPath);
vm.MountISO(programPath + "/Windows7X86Auto.iso", "storage_controller_1", 1, 0); if(isoPath != ""){
break; vm.MountMainISO(isoPath);
case 1: }
vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 0);
break;
}*/
// 判断 VirtualBox Guest ISO 是否存在
// 在的话直接挂载
/*if(QFile::exists("/usr/share/virtualbox/VBoxGuestAdditions.iso")){
vm.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", "storage_controller_1", 1, 1);
}*/
vm.SetCPU(get_nprocs()); }
vm.SetCPU(get_nprocs(), GetCPUSocket(), GetCPUCore());
long memory = 0; long memory = 0;
long memoryAll = 0; long memoryAll = 0;
long swap = 0; long swap = 0;
long swapAll = 0; long swapAll = 0;
infoUtils::memoryRate(memory, memoryAll, swap, swapAll); infoUtils::memoryRate(memory, memoryAll, swap, swapAll);
//memoryRate(memory, memoryAll, swap, swapAll);
vm.SetMemory(memoryAll / 3 / 1024); vm.SetMemory(memoryAll / 3 / 1024);
vm.SetDisplayMemory(32);
vm.SetNetBridge(net); vm.SetNetBridge(net);
vm.EnabledAudio(); vm.EnabledAudio();
vm.EnabledClipboardMode(); vm.EnabledClipboardMode();
@@ -131,22 +184,64 @@ buildvbox::buildvbox(QString isoPath, int id, int vm){
vm.OpenUSB(); vm.OpenUSB();
vm.ShareFile("ROOT", "/"); vm.ShareFile("ROOT", "/");
vm.ShareFile("HOME", QDir::homePath()); vm.ShareFile("HOME", QDir::homePath());
switch(id){
case 8:
vm.StartArmhf();
break;
case 9:
vm.StartAarch64();
break;
default:
vm.Start(); vm.Start();
break;
}
} }
else if(vm == 1){ else if(vm == 1){
// ? // VirtualBox
//vbox *box = new vbox("Window");
vbox vm("Windows"); vbox vm("Windows");
//qemu vm("Windows"); bool setISOAlready = 1;
switch (id) { switch (id) {
case 0: case 0:
vm.Create("Windows7"); vm.Create("Windows7");
vm.SetDisplayMemory(32);
break; break;
case 1: case 1:
vm.Create("Windows7_64"); vm.Create("Windows7_64");
vm.SetDisplayMemory(32);
break; break;
case 2:
vm.Create("WindowsNT_64"); vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
break;
case 3:
vm.Create("WindowsNT_64");
vm.EnabledUEFI(true);
vm.SetDisplayMemory(32);
break;
case 4:
vm.Create("Windows11_64");
vm.SetDisplayMemory(128);
vm.EnabledUEFI(true);
setISOAlready = 1;
break;
case 5:
vm.Create("WindowsXP_32");
vm.SetDisplayMemory(32);
setISOAlready = 1;
break;
case 6:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
setISOAlready = 1;
break;
case 7:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
vm.EnabledUEFI(true);
setISOAlready = 1;
break;
} }
QDir dir("/home/gfdgd_xi/Qemu/Windows/"); QDir dir("/home/gfdgd_xi/Qemu/Windows/");
dir.mkpath("/home/gfdgd_xi/Qemu/Windows/"); dir.mkpath("/home/gfdgd_xi/Qemu/Windows/");
@@ -154,6 +249,7 @@ buildvbox::buildvbox(QString isoPath, int id, int vm){
//vm.CreateDiskControl("storage_controller_2"); //vm.CreateDiskControl("storage_controller_2");
vm.CreateDisk(QDir::homePath() + "/VirtualBox VMs/Windows/Windows.vdi", 131072); vm.CreateDisk(QDir::homePath() + "/VirtualBox VMs/Windows/Windows.vdi", 131072);
vm.MountDisk(QDir::homePath() + "/VirtualBox VMs/Windows/Windows.vdi"); vm.MountDisk(QDir::homePath() + "/VirtualBox VMs/Windows/Windows.vdi");
if(!setISOAlready){
vm.MountISO(isoPath, "storage_controller_1", 0, 1); vm.MountISO(isoPath, "storage_controller_1", 0, 1);
switch (id) { switch (id) {
case 0: case 0:
@@ -163,14 +259,18 @@ buildvbox::buildvbox(QString isoPath, int id, int vm){
vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 0); vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 0);
break; break;
} }
}
else{
vm.AutoInstall(isoPath);
}
// 判断 VirtualBox Guest ISO 是否存在 // 判断 VirtualBox Guest ISO 是否存在
// 在的话直接挂载 // 在的话直接挂载
if(QFile::exists("/usr/share/virtualbox/VBoxGuestAdditions.iso")){ if(QFile::exists("/usr/share/virtualbox/VBoxGuestAdditions.iso")){
vm.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", "storage_controller_1", 1, 1); vm.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", "storage_controller_1", 1, 1);
} }
// VirtualBox 的 CPU 数量设置方法和 Qemu 不一样
vm.SetCPU(get_nprocs_conf()); vm.SetCPU(GetCPUCore(), GetCPUSocket(), GetCPUCore());
long memory = 0; long memory = 0;
long memoryAll = 0; long memoryAll = 0;
long swap = 0; long swap = 0;
@@ -178,7 +278,6 @@ buildvbox::buildvbox(QString isoPath, int id, int vm){
infoUtils::memoryRate(memory, memoryAll, swap, swapAll); infoUtils::memoryRate(memory, memoryAll, swap, swapAll);
//memoryRate(memory, memoryAll, swap, swapAll); //memoryRate(memory, memoryAll, swap, swapAll);
vm.SetMemory(memoryAll / 3 / 1024); vm.SetMemory(memoryAll / 3 / 1024);
vm.SetDisplayMemory(32);
vm.SetNetBridge(net); vm.SetNetBridge(net);
vm.EnabledAudio(); vm.EnabledAudio();
vm.EnabledClipboardMode(); vm.EnabledClipboardMode();

View File

@@ -14,6 +14,8 @@ public:
void CleanScreen(); void CleanScreen();
QString GetNet(); QString GetNet();
int Download(QString url, QString path, QString fileName); int Download(QString url, QString path, QString fileName);
int GetCPUSocket();
int GetCPUCore();
}; };
#endif // BUILDVBOX_H #endif // BUILDVBOX_H

132
VM-source/kvm-ok Executable file
View File

@@ -0,0 +1,132 @@
#!/bin/sh
#
# kvm-ok - check whether the CPU we're running on supports KVM acceleration
# Copyright (C) 2008-2010 Canonical Ltd.
#
# Authors:
# Dustin Kirkland <kirkland@canonical.com>
# Kees Cook <kees.cook@canonical.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3,
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set -e
assert_root() {
if [ "$(id -u)" != "0" ]; then
echo "INFO: For more detailed results, you should run this as root"
echo "HINT: sudo $0"
exit 1
fi
}
verdict() {
# Print verdict
if [ "$1" = "0" ]; then
echo "KVM acceleration can be used"
exit 0
else
echo "KVM acceleration can NOT be used"
exit 1
fi
}
ARM_CPU_PART_CORTEX_A15="0xc0f" # <asm/cputype.h>
# check cpu flags for capability
case "$(uname -m)" in
armv7l)
if egrep -m1 -w '^CPU part[[:blank:]]*:' /proc/cpuinfo | \
egrep -wq "$ARM_CPU_PART_CORTEX_A15"; then
virt="ARM"
kvm_mod="kvm"
fi
;;
aarch64)
virt="ARM"
kvm_mod="kvm"
;;
ppc64le|ppc64|s390x)
# FIXME: Assume that all POWER and z/Systems are KVM capable
virt="generic"
kvm_mod="kvm"
;;
*)
virt=$(egrep -m1 -w '^flags[[:blank:]]*:' /proc/cpuinfo | egrep -wo '(vmx|svm)') || true
[ "$virt" = "vmx" ] && kvm_mod="kvm_intel"
[ "$virt" = "svm" ] && kvm_mod="kvm_amd"
;;
esac
if [ -z "$virt" ]; then
echo "INFO: Your CPU does not support KVM extensions"
assert_root
verdict 1
fi
# Now, check that the device exists
if [ -e /dev/kvm ]; then
echo "INFO: /dev/kvm exists"
verdict 0
else
echo "INFO: /dev/kvm does not exist"
echo "HINT: sudo modprobe $kvm_mod"
fi
assert_root
# Prepare MSR access
msr="/dev/cpu/0/msr"
if [ ! -r "$msr" ]; then
modprobe msr
fi
if [ -e "$msr" -a ! -r "$msr" ]; then
echo "You must be root to run this check." >&2
exit 2
fi
echo "INFO: Your CPU supports KVM extensions"
disabled=0
# check brand-specific registers
if [ "$virt" = "vmx" ]; then
BIT=$(rdmsr --bitfield 0:0 0x3a 2>/dev/null || true)
if [ "$BIT" = "1" ]; then
# and FEATURE_CONTROL_VMXON_ENABLED_OUTSIDE_SMX clear (no tboot)
BIT=$(rdmsr --bitfield 2:2 0x3a 2>/dev/null || true)
if [ "$BIT" = "0" ]; then
disabled=1
fi
fi
elif [ "$virt" = "svm" ]; then
BIT=$(rdmsr --bitfield 4:4 0xc0010114 2>/dev/null || true)
if [ "$BIT" = "1" ]; then
disabled=1
fi
elif [ "$virt" = "ARM" ]; then
# Should also test that we booted in HYP mode, if detectable
:
elif [ "$virt" = "generic" ]; then
:
else
echo "FAIL: Unknown virtualization extension: $virt"
verdict 1
fi
if [ "$disabled" -eq 1 ]; then
echo "INFO: KVM ($virt) is disabled by your BIOS"
echo "HINT: Enter your BIOS setup and enable Virtualization Technology (VT),"
echo " and then hard poweroff/poweron your system"
verdict 1
fi
verdict 0

View File

@@ -21,7 +21,11 @@
#include <QDesktopServices> #include <QDesktopServices>
#include <QMessageBox> #include <QMessageBox>
#include <iostream> #include <iostream>
#include <QIODevice>
#include <QInputDialog>
#include "qemusetting.h" #include "qemusetting.h"
#include "vbox.h"
#include "qemu.h"
MainWindow::MainWindow(QWidget *parent) : MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), QMainWindow(parent),
@@ -80,7 +84,7 @@ MainWindow::MainWindow(QWidget *parent) :
} }
// 设置程序标题 // 设置程序标题
this->setWindowTitle("Windows 应用适配工具 " + versionValue.toString()); this->setWindowTitle("Wine 运行器虚拟机安装工具 " + versionValue.toString());
// 读取谢明列表 // 读取谢明列表
ui->textBrowser_2->setHtml("<p>程序版本号:" + versionValue.toString() + ", " + GetRunCommand("arch") + "</p><p>安装包构建时间:" + buildTime.toString() + "</p><p>该组件构建时间:" ui->textBrowser_2->setHtml("<p>程序版本号:" + versionValue.toString() + ", " + GetRunCommand("arch") + "</p><p>安装包构建时间:" + buildTime.toString() + "</p><p>该组件构建时间:"
+ __DATE__ + " " + __TIME__ + "</p>" + ui->textBrowser_2->toHtml() + + __DATE__ + " " + __TIME__ + "</p>" + ui->textBrowser_2->toHtml() +
@@ -94,7 +98,10 @@ MainWindow::MainWindow(QWidget *parent) :
connect(ui->textBrowser_3, &QTextBrowser::anchorClicked, this, [=](const QUrl &link){ connect(ui->textBrowser_3, &QTextBrowser::anchorClicked, this, [=](const QUrl &link){
QDesktopServices::openUrl(link); QDesktopServices::openUrl(link);
}); });
// 设置标签栏图标
ui->tabWidget->setTabIcon(1, QIcon::fromTheme(":/application-vnd.oasis.opendocument.text.svg"));
// 设置窗口图标
this->setWindowIcon(QIcon(":/deepin-wine-runner.svg"));
} }
void MainWindow::ShowCPUMessage(){ void MainWindow::ShowCPUMessage(){
@@ -129,7 +136,9 @@ void MainWindow::ShowCPUMessage(){
QString::number(memory * 100 / memoryAll) + "% " + QString::number(memory / 1024) + "MB/" + QString::number(memoryAll / 1024) + "MB" + QString::number(memory * 100 / memoryAll) + "% " + QString::number(memory / 1024) + "MB/" + QString::number(memoryAll / 1024) + "MB" +
" 开机时间: " + QString::number(dd) + "" + QString::number(hh) + ":" + QString::number(MM) + ":" + QString::number(ss); " 开机时间: " + QString::number(dd) + "" + QString::number(hh) + ":" + QString::number(MM) + ":" + QString::number(ss);
//qDebug() << cpuAll << " " << cpuFree; //qDebug() << cpuAll << " " << cpuFree;
if(!stopShowTime){
ui->CPUValue->showMessage(info, 5000); ui->CPUValue->showMessage(info, 5000);
}
m_cpuAll = cpuAll; m_cpuAll = cpuAll;
m_cpuFree = cpuFree; m_cpuFree = cpuFree;
} }
@@ -176,8 +185,94 @@ void MainWindow::on_install_clicked()
} }
} }
break; break;
case 8:
if(system("which qemu-system-arm")){
if(QMessageBox::question(this, "提示", "无法检测到 qemu-system-arm是否继续创建虚拟机") == QMessageBox::No){
return;
}
}
break;
case 9:
if(system("which qemu-system-aarch64")){
if(QMessageBox::question(this, "提示", "无法检测到 qemu-system-aarch64是否继续创建虚拟机") == QMessageBox::No){
return;
}
}
break;
}
QFile file(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI");
QFile archFile(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-ARCH");
QDir dir(QDir::homePath() + "/.config/deepin-wine-runner");
archFile.open(QIODevice::WriteOnly);
archFile.write("amd64");
archFile.close();
switch (ui->systemVersion->currentIndex()) {
case 0:
if(!QFile::exists(QCoreApplication::applicationDirPath() + "/Windows7X86Auto.iso")){
if(QMessageBox::question(this, "提示", "似乎无法找到 Windows7X86Auto.iso是否继续创建虚拟机\n缺少该文件可能会导致虚拟机无法正常启动,尝试重新安装 Wine 运行器再试试?") == QMessageBox::No){
return;
}
}
break;
case 1:
if(!QFile::exists(QCoreApplication::applicationDirPath() + "/Windows7X64Auto.iso")){
if(QMessageBox::question(this, "提示", "似乎无法找到 Windows7X64Auto.iso是否继续创建虚拟机\n缺少该文件可能会导致虚拟机无法正常启动,尝试重新安装 Wine 运行器再试试?") == QMessageBox::No){
return;
}
}
break;
case 3:
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;
case 4:
case 5:
case 6:
case 7:
if(ui->vmChooser->currentIndex() == 0){
QMessageBox::warning(this, "提示", "Qemu 不支持该选项!");
return;
}
break;
case 8:
if(ui->vmChooser->currentIndex() == 1){
QMessageBox::warning(this, "提示", "VirtualBox 不支持该选项!");
return;
}
archFile.open(QIODevice::WriteOnly);
archFile.write("armhf");
archFile.close();
break;
case 9:
if(ui->vmChooser->currentIndex() == 1){
QMessageBox::warning(this, "提示", "VirtualBox 不支持该选项!");
return;
}
archFile.open(QIODevice::WriteOnly);
archFile.write("aarch64");
archFile.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()); buildvbox(ui->isoPath->text(), ui->systemVersion->currentIndex(), ui->vmChooser->currentIndex());
ui->tabWidget->setCurrentIndex(1);
stopShowTime = 1;
ui->CPUValue->showMessage("提示:目前已经尝试开启虚拟机,如果在一段时间后依旧还没看到虚拟机窗口开启,请在菜单栏查看虚拟机日志", 10000);
return; return;
} }
@@ -188,7 +283,7 @@ void MainWindow::on_getvbox_clicked()
void MainWindow::on_getQemu_clicked() void MainWindow::on_getQemu_clicked()
{ {
system(("python3 '" + QCoreApplication::applicationDirPath() + "/../RunCommandWithTerminal.py' '" + QCoreApplication::applicationDirPath() + "/../QemuSystemInstall.sh'").toLatin1()); system(("python3 '" + QCoreApplication::applicationDirPath() + "/../RunCommandWithTerminal.py' pkexec '" + QCoreApplication::applicationDirPath() + "/../QemuSystemInstall.sh'").toLatin1());
} }
void MainWindow::on_vmChooser_currentIndexChanged(int index) void MainWindow::on_vmChooser_currentIndexChanged(int index)
@@ -268,3 +363,94 @@ void MainWindow::on_delQemuDiskButton_clicked()
} }
QMessageBox::information(this, "提示", "移除成功"); QMessageBox::information(this, "提示", "移除成功");
} }
void MainWindow::on_kvmTest_clicked()
{
if(system("which kvm-ok")&& !QFile::exists(QCoreApplication::applicationDirPath() + "/kvm-ok")){
QMessageBox::critical(this, "错误", "未识别到命令 kvm-ok\n可以使用命令 sudo apt install cpu-checker 安装");
return;
}
QString kvm_ok_path = "kvm-ok";
if(!system("which kvm-ok")){
kvm_ok_path = "kvm-ok";
}
else if(QFile::exists(QCoreApplication::applicationDirPath() + "/kvm-ok")){
kvm_ok_path = QCoreApplication::applicationDirPath() + "/kvm-ok";
}
qDebug() << "使用" << kvm_ok_path;
QProcess process;
process.start(kvm_ok_path);
process.waitForStarted();
process.waitForFinished();
if(process.exitCode()){
QMessageBox::critical(this, "错误", "您的系统不支持使用 kvm\n" + process.readAll());
return;
}
QMessageBox::information(this, "提示", "您的系统支持使用 kvm\n" + process.readAll());
}
void MainWindow::on_actionVMLog_triggered(){}
void MainWindow::on_actionVMRunlLog_triggered()
{
QFile file("/tmp/windows-virtual-machine-installer-for-wine-runner-run.log");
if(!file.exists()){
QMessageBox::information(this, "提示", "没有日志文件");
return;
}
file.open(QIODevice::ReadOnly);
QInputDialog::getMultiLineText(this, "运行日志", "虚拟机运行日志",file.readAll());
file.close();
}
void MainWindow::on_actionVMTest_triggered()
{
// 运行 Demo
if(QFile::exists(QCoreApplication::applicationDirPath() + "/test.qcow2")){
// 优先使用本地的磁盘
system(("qemu-system-i386 --hda '" + QCoreApplication::applicationDirPath() + "/test.qcow2' -rtc base=localtime > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1").toUtf8());
return;
}
// 写入 disk 文件
QFile file(":/TestDisk/test.qcow2");
// 计算随机数
QFile writeFile("/tmp/indows-virtual-machine-installer-for-wine-runner-test-disk.qcow2");
file.open(QIODevice::ReadOnly);
writeFile.open(QIODevice::WriteOnly);
writeFile.write(file.readAll());
file.close();
writeFile.close();
system("qemu-system-i386 --hda /tmp/indows-virtual-machine-installer-for-wine-runner-test-disk.qcow2 -rtc base=localtime > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1");
}
void MainWindow::on_actionVMInstallLog_triggered()
{
QFile file("/tmp/windows-virtual-machine-installer-for-wine-runner-install.log");
if(!file.exists()){
QMessageBox::information(this, "提示", "没有日志文件");
return;
}
file.open(QIODevice::ReadOnly);
QInputDialog::getMultiLineText(this, "安装日志", "虚拟机安装日志",file.readAll());
file.close();
}
void MainWindow::on_action_StopVirtualBox_triggered()
{
vbox vmControl("");
vmControl.Stop();
}
void MainWindow::on_action_StopQemu_triggered()
{
qemu vmControl("");
vmControl.Stop();
}

View File

@@ -44,7 +44,22 @@ private slots:
void on_delQemuDiskButton_clicked(); void on_delQemuDiskButton_clicked();
void on_kvmTest_clicked();
void on_actionVMLog_triggered();
void on_actionVMRunlLog_triggered();
void on_actionVMTest_triggered();
void on_actionVMInstallLog_triggered();
void on_action_StopVirtualBox_triggered();
void on_action_StopQemu_triggered();
private: private:
bool stopShowTime = 0;
Ui::MainWindow *ui; Ui::MainWindow *ui;
long m_cpuAll; long m_cpuAll;
long m_cpuFree; long m_cpuFree;

View File

@@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Windows 应用适配工具</string> <string>Wine 运行器虚拟机安装工具</string>
</property> </property>
<property name="windowIcon"> <property name="windowIcon">
<iconset> <iconset>
@@ -25,7 +25,7 @@
<enum>QTabWidget::Rounded</enum> <enum>QTabWidget::Rounded</enum>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>2</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="tab"> <widget class="QWidget" name="tab">
<attribute name="title"> <attribute name="title">
@@ -86,7 +86,42 @@
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>其它 Windows 系统(不支持自动安装)</string> <string>其它 Windows 系统(不支持自动安装,传统启动,推荐 Windows 7 及以下</string>
</property>
</item>
<item>
<property name="text">
<string>其他 Windows 系统不支持自动安装UEFI 启动,推荐 Windows 8 及以上)</string>
</property>
</item>
<item>
<property name="text">
<string>安装 WIndows 11不支持自动安装</string>
</property>
</item>
<item>
<property name="text">
<string>安装其他 Windows XP支持自动安装只支持 VirtualBox</string>
</property>
</item>
<item>
<property name="text">
<string>安装其他 Windows (支持自动安装,传统启动,只支持 VirtualBox</string>
</property>
</item>
<item>
<property name="text">
<string>安装其他 Windows支持自动安装UEFI 启动,只支持 VirtualBox</string>
</property>
</item>
<item>
<property name="text">
<string>安装 arm32 系统(只支持 Qemu</string>
</property>
</item>
<item>
<property name="text">
<string>安装 arm64 系统(只支持 Qemu</string>
</property> </property>
</item> </item>
</widget> </widget>
@@ -149,6 +184,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QPushButton" name="kvmTest">
<property name="text">
<string>kvm 测试</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QPushButton" name="qemuSetting"> <widget class="QPushButton" name="qemuSetting">
<property name="text"> <property name="text">
@@ -200,12 +242,24 @@
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt; &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Noto Sans CJK SC'; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt; &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Noto Sans CJK SC'; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;使用迅雷或者网盘下载以下任意一个链接然后在上面选择即可&lt;/span&gt;&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;UOS 3a4000 用户在使用 Qemu 时可能会出现虚拟机无法正常开机的问题,需要安装/降级到以下链接的版本&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;蓝奏云:&lt;/span&gt;&lt;a href=&quot;https://gfdgdxi.lanzoue.com/b01rk9wza&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gfdgdxi.lanzoue.com/b01rk9wza&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; 密码:6wvf&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;诚通网盘:&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;注Qemu 跨架构效率较低,如无特殊情况不建议跨架构/不开硬件加速(如 kvm运行 Qemu&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;如何安装系统?使用迅雷或者网盘下载以下任意一个链接的 ISO 镜像然后在上面选择即可:&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;123 网盘链接:&lt;/span&gt;&lt;a href=&quot;https://www.123pan.com/s/pDSKVv-oypWv&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://www.123pan.com/s/pDSKVv-oypWv&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;123 网盘链接:&lt;/span&gt;&lt;a href=&quot;https://www.123pan.com/s/pDSKVv-oypWv&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://www.123pan.com/s/pDSKVv-oypWv&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;迅雷网盘:&lt;/span&gt;&lt;a href=&quot;https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 提取码35e5&lt;/span&gt;&lt;/p&gt; &lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;迅雷网盘:&lt;/span&gt;&lt;a href=&quot;https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 提取码35e5&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;百度网盘:&lt;/span&gt;&lt;a href=&quot;https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 提取码: me4y&lt;/span&gt;&lt;/p&gt; &lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;百度网盘:&lt;/span&gt;&lt;a href=&quot;https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 提取码: me4y&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;诚通网盘:&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;(如果下载这个,系统版本选第一项,一般推荐这个)&lt;/span&gt;&lt;a href=&quot;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;(如果下载这个,系统版本选第一项,一般推荐这个)&lt;/span&gt;&lt;a href=&quot;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;(如果下载这个,系统版本选第二项)&lt;/span&gt;&lt;a href=&quot;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;(如果下载这个,系统版本选第二项)&lt;/span&gt;&lt;a href=&quot;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;常用 Windows 软件:&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;百度网盘:链接: &lt;/span&gt;&lt;a href=&quot;https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; 提取码: 7s2p &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;诚通网盘:&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;123网盘&lt;/span&gt;&lt;a href=&quot;https://www.123pan.com/s/pDSKVv-uCBWv.html&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://www.123pan.com/s/pDSKVv-uCBWv.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;/body&gt;&lt;/html&gt;</string> &lt;hr /&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
<property name="openLinks"> <property name="openLinks">
@@ -236,6 +290,8 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;如果爱折腾的话,下面的都看看也无所谓的,想看往下翻就可以了&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;如果爱折腾的话,下面的都看看也无所谓的,想看往下翻就可以了&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; text-decoration: underline;&quot;&gt;(这里的帮助更新可能不会那么及时,更详细/新的帮助可以看https://gitee.com/gfdgd-xi/deep-wine-runner/wikis 或 https://gitee.com/gfdgd-xi/wine-runner-wiki&lt;/span&gt;&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; text-decoration: underline;&quot;&gt;(这里的帮助更新可能不会那么及时,更详细/新的帮助可以看https://gitee.com/gfdgd-xi/deep-wine-runner/wikis 或 https://gitee.com/gfdgd-xi/wine-runner-wiki&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;如果鼠标被锁定到里面了按下键盘右边的“Ctrl”键就可以了&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt;qemu则是 Ctrl+Alt+G&lt;/span&gt; &lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;如果鼠标被锁定到里面了按下键盘右边的“Ctrl”键就可以了&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt;qemu则是 Ctrl+Alt+G&lt;/span&gt; &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;VirtualBox 可以安装增强功能以优化体验,安装方法往下翻即可查询&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Qemu 可以安装 Virtio 以优化体验,下载链接:&lt;a href=&quot;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt; &lt;hr /&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
@@ -372,12 +428,10 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;项目地址:&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;项目地址:&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Gitee&lt;a href=&quot;https://gitee.com/gfdgd-xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gitee.com/gfdgd-xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Gitee&lt;a href=&quot;https://gitee.com/gfdgd-xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gitee.com/gfdgd-xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Github&lt;a href=&quot;https://github.com/gfdgd-xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://github.com/gfdgd-xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Github&lt;a href=&quot;https://github.com/gfdgd-xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://github.com/gfdgd-xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Gitlink&lt;a href=&quot;https://gitlink.org.cn/gfdgd_xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gitlink.org.cn/gfdgd_xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;此组件也有非常大的缺点,就是相比于 Wine会需要占用大量的空间、安装需要大量的时间、某些情况下需要相比于 Wine 需要消耗更多的系统资源,但可以更加完美、流畅的运行 Windows 应用,会尽量减少因为缺少或未实现导致的 Windows exe 程序运行异常&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;此组件也有非常大的缺点,就是相比于 Wine会需要占用大量的空间、安装需要大量的时间、某些情况下需要相比于 Wine 需要消耗更多的系统资源,但可以更加完美、流畅的运行 Windows 应用,会尽量减少因为缺少或未实现导致的 Windows exe 程序运行异常&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;该组件制作者gfdgd xi&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;该组件制作者gfdgd xi&lt;/p&gt;
&lt;hr /&gt; &lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;参考文献:&lt;/p&gt; &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Droid Sans Mono','monospace','monospace'; font-size:11pt; color:#6a9955;&quot;&gt;https://juejin.cn/post/7080484519328874510&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
<property name="openLinks"> <property name="openLinks">
<bool>false</bool> <bool>false</bool>
@@ -395,6 +449,29 @@ p, li { white-space: pre-wrap; }
<string/> <string/>
</property> </property>
</widget> </widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1058</width>
<height>36</height>
</rect>
</property>
<widget class="QMenu" name="menuVM">
<property name="title">
<string>虚拟机</string>
</property>
<addaction name="actionVMInstallLog"/>
<addaction name="actionVMRunlLog"/>
<addaction name="separator"/>
<addaction name="actionVMTest"/>
<addaction name="separator"/>
<addaction name="action_StopVirtualBox"/>
<addaction name="action_StopQemu"/>
</widget>
<addaction name="menuVM"/>
</widget>
<action name="action"> <action name="action">
<property name="text"> <property name="text">
<string>退出</string> <string>退出</string>
@@ -415,6 +492,31 @@ p, li { white-space: pre-wrap; }
<string>导出</string> <string>导出</string>
</property> </property>
</action> </action>
<action name="actionVMInstallLog">
<property name="text">
<string>虚拟机安装日志</string>
</property>
</action>
<action name="actionVMRunlLog">
<property name="text">
<string>虚拟机运行日志</string>
</property>
</action>
<action name="actionVMTest">
<property name="text">
<string>虚拟机测试X86、Qemu</string>
</property>
</action>
<action name="action_StopVirtualBox">
<property name="text">
<string>强制停止 VirtualBox</string>
</property>
</action>
<action name="action_StopQemu">
<property name="text">
<string>强制停止 Qemu</string>
</property>
</action>
</widget> </widget>
<layoutdefault spacing="6" margin="11"/> <layoutdefault spacing="6" margin="11"/>
<resources/> <resources/>

350
VM-source/mainwindow_ui.py Normal file
View File

@@ -0,0 +1,350 @@
# -*- 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, 36))
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", "Wine 运行器虚拟机安装工具"))
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", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">UOS 3a4000 用户在使用 Qemu 时可能会出现虚拟机无法正常开机的问题,需要安装/降级到以下链接的版本:</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">蓝奏云:</span><a href=\"https://gfdgdxi.lanzoue.com/b01rk9wza\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://gfdgdxi.lanzoue.com/b01rk9wza</span></a><span style=\" font-size:11pt;\"> 密码:6wvf</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">诚通网盘:</span><a href=\"http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061</span></a><span style=\" font-size:11pt;\"> (访问密码: 2061)</span></p>\n"
"<hr />\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">注Qemu 跨架构效率较低,如无特殊情况不建议跨架构/不开硬件加速(如 kvm运行 Qemu</span></p>\n"
"<hr />\n"
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">如何安装系统?使用迅雷或者网盘下载以下任意一个链接的 ISO 镜像然后在上面选择即可:</span></p>\n"
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">123 网盘链接:</span><a href=\"https://www.123pan.com/s/pDSKVv-oypWv\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://www.123pan.com/s/pDSKVv-oypWv</span></a></p>\n"
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">迅雷网盘:</span><a href=\"https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5</span></a><span style=\" font-size:10pt;\"> 提取码35e5</span></p>\n"
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">百度网盘:</span><a href=\"https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y</span></a><span style=\" font-size:10pt;\"> 提取码: me4y</span></p>\n"
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">诚通网盘:</span><a href=\"http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061</span></a><span style=\" font-size:10pt;\"> (访问密码: 2061)</span></p>\n"
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">(如果下载这个,系统版本选第一项,一般推荐这个)</span><a href=\"ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/</span></a></p>\n"
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:10pt;\">(如果下载这个,系统版本选第二项)</span><a href=\"ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/</span></a></p>\n"
"<hr />\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt; font-weight:600;\">常用 Windows 软件:</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">百度网盘:链接: </span><a href=\"https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p</span></a><span style=\" font-size:11pt;\"> 提取码: 7s2p </span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">诚通网盘:</span><a href=\"http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061</span></a><span style=\" font-size:11pt;\"> (访问密码: 2061)</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">123网盘</span><a href=\"https://www.123pan.com/s/pDSKVv-uCBWv.html\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://www.123pan.com/s/pDSKVv-uCBWv.html</span></a></p>\n"
"<hr /></body></html>"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "设置"))
self.tabWidget.setTabToolTip(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "设置"))
self.textBrowser.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:26pt; font-weight:600;\">给小白的一段话</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">其实本质上跑完安装程序就没有然后了,顶多如果想要运行舒服一点点,可以安装加强功能,直接拉到最底下看就可以了,<span style=\" font-weight:600; font-style:italic; text-decoration: underline;\">只限使用 VirtualBox</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-weight:600; font-style:italic; text-decoration: underline;\">如果你是用非 X86 PC那暂时只能使用 qemu没 kvm且跨架构的性能损失很大推荐使用 Windows XP 而非 Windows 7</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">如果爱折腾的话,下面的都看看也无所谓的,想看往下翻就可以了</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-weight:600; text-decoration: underline;\">(这里的帮助更新可能不会那么及时,更详细/新的帮助可以看https://gitee.com/gfdgd-xi/deep-wine-runner/wikis 或 https://gitee.com/gfdgd-xi/wine-runner-wiki</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">如果鼠标被锁定到里面了按下键盘右边的“Ctrl”键就可以了<span style=\" font-weight:600; font-style:italic; text-decoration: underline;\">qemu则是 Ctrl+Alt+G</span> </p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">VirtualBox 可以安装增强功能以优化体验,安装方法往下翻即可查询</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Qemu 可以安装 Virtio 以优化体验,下载链接:<a href=\"https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/</span></a></p>\n"
"<hr />\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;\"><br /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:26pt; font-weight:600;\">安装是否需要人工进行操作?</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">如果您下载的镜像本程序支持,则大部分不用,已经尽量省去了让新手头疼的虚拟机程序安装,创建、设置虚拟机,虚拟磁盘分区,寻找原版镜像文件等内容</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712191756.png\" /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">但有些设置依旧需要人工自行设置,例如安装界面密钥的输入、系统的激活(涉及版权问题,不会考虑省略)、增强功能的安装、需要使用的软件等等</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712192850.png\" /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712193527.png\" /></p>\n"
"<hr />\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:26pt; font-weight:600;\">什么样的镜像本程序(可能)不支持自动安装?</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">非 Windows 7 镜像可能不支持自动安装(纯的 Windows 7 企业版镜像可能不支持自动安装),不保证系统能自动安装成功,例如 Windows XP、Windows 10、Deepin、Ubuntu 等等</p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
"<hr />\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:26pt; font-weight:600;\">默认的虚拟机设置不习惯怎么改?</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">1、打开启动器打开 Oracle VM VirtualBox 程序</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">2、选择名字为“Windows”的虚拟机然后在右边点击设置</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Manager_20220712223602.png\" /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">3、在这里修改即可</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox_20220712223705.png\" /></p>\n"
"<hr />\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:26pt; font-weight:600;\">安装加强功能有什么好处?(只限使用 VirtualBox</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">1、支持鼠标自由从虚拟机和实体机切换</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2、支持虚拟机根据窗口大小自动设置分辨率</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">3、支持文件共享、剪切板共享、文件拖放</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">4、支持无缝模式</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_选择区域_20220712224639.png\" /></p>\n"
"<hr />\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:26pt; font-weight:600;\">如何安装加强功能?</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">1、点击“设备”=》“加强功能”</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图_VirtualBox Machine_20220712142929.png\" /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2、打开“计算机”找到名为“VirtualBox Guest Additions”的光盘双击进入然后双击打开名为“VBoxWindowsAdditions”的程序</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143006.png\" /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">3、在弹出的界面点击“是”</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143018.png\" /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">4、一直点“Next”</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143029.png\" /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143037.png\" /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">5、全部选择然后点击“Install”进行安装</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143044.png\" /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:11pt;\">6、等待安装完毕后选择“Reboot now”然后点击“Finish”重启此虚拟机即可安装成功选择“Reboot now”并点“Finish”会自动重新启动</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><img src=\":/picture/截图/截图_VirtualBox Machine_20220712143103.png\" /></p></body></html>"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "安装/使用帮助"))
self.textBrowser_2.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'Noto Sans CJK SC\'; font-size:10.5pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">此为 wine 运行器附属组件虽然违背了“Wine Is Not An Emulator”&lt;Wine 不是一个模拟器&gt;的原意),旨在能更加完美、简单的运行 Windows 应用</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">本程序基于 C++ Qt、Python 和 Virtualbox 制作,通过运行安装 Windows 操作系统的虚拟机实现在 Linux 运行 Windows exe 程序的功能。</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">基于 GPL V3 协议开源</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">项目地址:</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"> Gitee<a href=\"https://gitee.com/gfdgd-xi/deep-wine-runner\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://gitee.com/gfdgd-xi/deep-wine-runner</span></a></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"> Github<a href=\"https://github.com/gfdgd-xi/deep-wine-runner\"><span style=\" font-size:11pt; text-decoration: underline; color:#0082fa;\">https://github.com/gfdgd-xi/deep-wine-runner</span></a></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">此组件也有非常大的缺点,就是相比于 Wine会需要占用大量的空间、安装需要大量的时间、某些情况下需要相比于 Wine 需要消耗更多的系统资源,但可以更加完美、流畅的运行 Windows 应用,会尽量减少因为缺少或未实现导致的 Windows exe 程序运行异常</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">该组件制作者gfdgd xi</p>\n"
"<hr />\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "关于"))
self.menuVM.setTitle(_translate("MainWindow", "虚拟机"))
self.action.setText(_translate("MainWindow", "退出"))
self.action_2.setText(_translate("MainWindow", "关于"))
self.addQemuDisk.setText(_translate("MainWindow", "导入/覆盖"))
self.delQemuDisk.setText(_translate("MainWindow", "导出"))
self.actionVMInstallLog.setText(_translate("MainWindow", "虚拟机安装日志"))
self.actionVMRunlLog.setText(_translate("MainWindow", "虚拟机运行日志"))
self.actionVMTest.setText(_translate("MainWindow", "虚拟机测试X86、Qemu"))

View File

@@ -9,6 +9,8 @@
#include <QMessageBox> #include <QMessageBox>
#include <QProcess> #include <QProcess>
#include <QDebug> #include <QDebug>
#include <iostream>
using namespace std;
qemu::qemu(QString name, QString managerPath) { qemu::qemu(QString name, QString managerPath) {
if(!QFile::exists(name)){ if(!QFile::exists(name)){
@@ -53,8 +55,14 @@ int qemu::BootFirst(QString bootDrive){
int qemu::SetNetBridge(QString netDriver){ int qemu::SetNetBridge(QString netDriver){
return 0; return 0;
} }
int qemu::SetCPU(int number){ int qemu::SetCPU(int number, int cpuNum, int coreNum){
commandOption += "-smp " + QString::number(number) + " "; // commandOption += "-smp " + QString::number(number) + " ";
// 调整调用方法
//qDebug() << number << " " << cpuNum << " " << coreNum;
qDebug() << "Socket: " << cpuNum;
qDebug() << "Core: " << coreNum;
qDebug() << "Threads: " << number;
commandOption += "-smp " + QString::number(number) + ",sockets=" + QString::number(cpuNum) + ",cores=" + QString::number(coreNum / cpuNum) + ",threads=" + QString::number(number / cpuNum / coreNum) + " ";
return 0; return 0;
} }
int qemu::SetMemory(int memory){ int qemu::SetMemory(int memory){
@@ -66,16 +74,39 @@ int qemu::SetRemote(bool setting){
} }
int qemu::SetRemoteConnectSetting(int port){ int qemu::SetRemoteConnectSetting(int port){
return 0; return 0;
}
int qemu::MountMainDisk(QString diskPath){
commandOption += " --hda '" + diskPath + "' ";
return 0;
}
int qemu::StartArmhf(){
qDebug() << commandOption;
if(Command().GetCommand("arch").replace("\n", "").replace(" ", "") == "aarch64" && !system((QCoreApplication::applicationDirPath() + "/kvm-ok").toUtf8())){
return system(("qemu-system-arm -display vnc=:5 -display gtk --enable-kvm -cpu host -M virt " + commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
}
return system(("qemu-system-arm --boot d -display vnc=:5 -display gtk -cpu max -M virt " + commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
}
int qemu::StartAarch64(){
qDebug() << commandOption;
if(Command().GetCommand("arch").replace("\n", "").replace(" ", "") == "aarch64" && !system((QCoreApplication::applicationDirPath() + "/kvm-ok").toUtf8())){
return system(("qemu-system-aarch64 --boot d -display vnc=:5 -display gtk --enable-kvm -cpu host -M virt " + commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
}
return system(("qemu-system-aarch64 --boot d -display vnc=:5 -display gtk -cpu max -M virt " + commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
}
int qemu::StartLoong64(){
} }
int qemu::Start(bool unShown){ int qemu::Start(bool unShown){
qDebug() << commandOption; qDebug() << commandOption;
if(Command().GetCommand("arch").replace("\n", "").replace(" ", "") == "x86_64"){ if(Command().GetCommand("arch").replace("\n", "").replace(" ", "") == "x86_64" && !system((QCoreApplication::applicationDirPath() + "/kvm-ok").toUtf8())){
return system(("kvm " + commandOption + " &").toLatin1()); return system(("qemu-system-x86_64 --boot d -display vnc=:5 -display gtk --enable-kvm -cpu host " + commandOption + " > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
} }
return system(("qemu-system-x86_64 -nic model=rtl8139 " + commandOption + " &").toLatin1()); return system(("qemu-system-x86_64 --boot d -display vnc=:5 -display gtk -nic model=rtl8139 " + commandOption + " > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
} }
int qemu::Stop(){ int qemu::Stop(){
system("killall qemu-system-x86_64 -9"); system("killall qemu-system-x86_64 -9");
system("killall qemu-system-aarch64 -9");
system("killall qemu-system-arm -9");
system("killall kvm -9"); system("killall kvm -9");
return 0; return 0;
} }
@@ -113,3 +144,52 @@ int qemu::SetKeyboardPS2(){
int qemu::OpenUSB(){ int qemu::OpenUSB(){
return 0; return 0;
} }
int qemu::UseAarch64EFI(){
if(QFile::exists("/usr/share/qemu-efi-aarch64/QEMU_EFI.fd")){
commandOption += "--bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ";
return 0;
}
if(QFile::exists(QCoreApplication::applicationDirPath() + "/QEMU_AARCH64_EFI.fd")){
commandOption += "--bios '" + QCoreApplication::applicationDirPath() + "/QEMU_AARCH64_EFI.fd' ";
return 0;
}
return 1;
}
int qemu::UseArmhfEFI(){
if(QFile::exists("/usr/share/AAVMF/AAVMF32_CODE.fd")){
commandOption += "--bios /usr/share/AAVMF/AAVMF32_CODE.fd ";
return 0;
}
if(QFile::exists(QCoreApplication::applicationDirPath() + "/AAVMF32_CODE.fd")){
commandOption += "--bios '" + QCoreApplication::applicationDirPath() + "/AAVMF32_CODE.fd' ";
return 0;
}
return 1;
}
int qemu::UseLoongarch64EFI(){
}
int qemu::UseOtherEFI(QString fdFilePath){
}
int qemu::EnabledUEFI(bool status){
if(!status){
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;
}
int qemu::MountMainISO(QString isoPath){
commandOption += "--cdrom '" + isoPath + "' ";
return 0;
}
int qemu::AutoInstall(QString iso){
return 0;
}

View File

@@ -21,11 +21,15 @@ public:
int MountISO(QString isoPath, QString controlName="storage_controller_1", int port=1, int device=0); int MountISO(QString isoPath, QString controlName="storage_controller_1", int port=1, int device=0);
int BootFirst(QString bootDrive); int BootFirst(QString bootDrive);
int SetNetBridge(QString netDriver); int SetNetBridge(QString netDriver);
int SetCPU(int number); int SetCPU(int number, int cpuNum, int coreNum);
int SetMemory(int memory); int SetMemory(int memory);
int SetRemote(bool setting); int SetRemote(bool setting);
int SetRemoteConnectSetting(int port=5540); int SetRemoteConnectSetting(int port=5540);
int Start(bool unShown=false); int Start(bool unShown=false);
int StartArmhf();
int StartAarch64();
int StartLoong64();
int MountMainDisk(QString diskPath);
int Stop(); int Stop();
int Delete(); int Delete();
int SetDisplayMemory(int memory); int SetDisplayMemory(int memory);
@@ -38,8 +42,15 @@ public:
int SetMousePS2(); int SetMousePS2();
int SetKeyboardPS2(); int SetKeyboardPS2();
int OpenUSB(); int OpenUSB();
int EnabledUEFI(bool status);
int AutoInstall(QString iso);
int MountMainISO(QString isoPath);
int UseAarch64EFI();
int UseArmhfEFI();
int UseLoongarch64EFI();
int UseOtherEFI(QString fdFilePath);
private: private:
QString commandOption; QString commandOption = "";
}; };

289
VM-source/test-kvm.asm Normal file
View File

@@ -0,0 +1,289 @@
mov ax,0xb800
mov es,ax
; 清屏
mov cx,80*25
clean:
mov di,cx
add di,di
mov byte [es:di],''
add di,1
mov byte [es:di],0x0F
loop clean
; 显示上方白条
; 移除(0,0)的S字符
mov byte [es:0x00],''
mov cx,80*2-1
mov di,0
push cx
headtitle:
mov di,cx
mov byte [es:di],0xF0
; 写入空字符
add di,di
mov byte [es:di],''
;inc cx
;sub cx,1
loop headtitle
xor di,di
pop cx
; 显示下方白条
tailtitle:
mov di,cx
add di,80*2*24
mov byte [es:di],0xF0
; 写入空字符
mov di,cx
add di,di
add di,80*2*24
mov byte [es:di],''
loop tailtitle
; 在第一行写入文本
jmp near showHeadText
headText: db 'Wine Runner Webiste:http://gitee.com/gfdgd-xi/deep-wine-runner'
showHeadText:
; 虽然可以简单粗暴的用 movsw但是会出现问题
mov cx,showHeadText-headText
mov ax,0x7c0
mov ds,ax ; 定位到汇编程序所在的内存地址
showHeadTextLoop:
mov dx,cx
mov di,cx
add di,di
mov si,headText
sub dx,1
add si,dx
; inc si
; mov al,1000
mov al,[ds:si]
mov byte [es:di],al
loop showHeadTextLoop
jmp near showTailText
tailText: db '2020~Now gfdgd xi'
showTailText:
mov cx,showTailText-tailText
mov ax,0x7c0
mov ds,ax
showTailTextLoop:
mov dx,cx
mov di,cx
add di,di
add di,80*2*24
mov si,tailText
sub dx,1
add si,dx
mov al,[ds:si]
mov byte [es:di],al
loop showTailTextLoop
; 显示中部提示文本
jmp near showCenterText
centerTextScreenSize:
; 第一位是行数
; 第二位是单行偏移量
db 1, -1
centerText:
db 'Mode: Real Mode Demo', 0x0A
db 'Bit: 16', 0x0A
db 'Virtual Machine: qemu-system-i386'
db 0x03 ; 结束符
showCenterText:
centerTextLong equ showCenterText-centerText
mov cx,centerTextLong
xor ax,ax
loopShowCenterText:
jmp near addScreenLineFinish
addScreenLine:
; 如果检测到换行符
mov dx, [centerTextScreenSize]
add dx,1
mov [centerTextScreenSize], dx
dec cx
mov al,-1
mov [centerTextScreenSize+1],al
; 行数+1偏移量设为 -1从头开始
;ret
addScreenLineFinish:
; 偏移量 + 1
mov al,[centerTextScreenSize+1]
add al,1
mov [centerTextScreenSize+1],al
mov di,centerText
add di,centerTextLong
sub di,cx
mov bl,[di]
; 判断是不是结束符
cmp bl,0x03
je showCenterTextEnd
; 判断是不是换行符
cmp bl,0x0A
je addScreenLine ; 换行符检测
xor ah,ah ; 清空高位
add al,al
mov di,ax
; 计算显示位置
xor dx,dx
mov dl,[centerTextScreenSize]
mov ax,80
mul dx
mov dx,2
mul dx
add ax,2
add di,ax
; 显示
mov byte [es:di], bl
loop loopShowCenterText
showCenterTextEnd:
;mov ax,[cs:0x100]
;mov dx,[cs:0x102]
; mov bx,16
; div bx
; mov ds,ax
; mov es,ax
;xor di,di
;mov si,1
;xor ds,ds
;mov bx,512
;xor bx,bx
;call read_hard_disk_0
get_data:
mov di,80*2*25-2
; 读取秒
mov al,0x00
call read_time
mov byte [es:di-4],':'
mov byte [es:di-2],ah
mov byte [es:di],al
; 读取分钟
mov al,0x02
call read_time
mov byte [es:di-10],':'
mov byte [es:di-8],ah
mov byte [es:di-6],al
; 读取小时
mov al,0x04
call read_time
mov byte [es:di-14],ah
mov byte [es:di-12],al
; 读取日
mov al,0x07
call read_time
mov byte [es:di-22],'.'
mov byte [es:di-20],ah
mov byte [es:di-18],al
; 读取月
mov al,0x08
call read_time
mov byte [es:di-28],'.'
mov byte [es:di-26],ah
mov byte [es:di-24],al
; 读取年
mov al,0x09
call read_time
mov byte [es:di-32],ah
mov byte [es:di-30],al
hlt ; 使用停机指令降低 CPU 使用率
jmp near get_data
read_time:
out 0x70,al
in al,0x71
call bcd_to_ascii
ret
; 用于编码转换BCD=》ASCII
; 输入AL=bcd码
; 输出AX=ascii
bcd_to_ascii:
mov ah,al
and al,0x0f
add al,0x30
shr ah,4
and ah,0x0f
add ah,0x30
ret
;poweroff:
; 关机
; mov ax,5307H ; 高级电源管理功能,设置电源状态
; mov bx,0001H ; 设备ID1所有设备
; mov cx,0003H ; 状态3表示关机
; int 15h
end:
times 510-($-$$) db 0
db 0x55,0xaa
; 后面部分暂时废弃
read_hard_disk_0: ; 从硬盘读取一个逻辑扇区
; 输入DI:SI=起始逻辑扇区号
; DS:BX=目标缓冲区地址
push ax
push bx
push cx
push dx
mov dx,0x1f2
mov al,1
out dx,al ; 读取的扇区数
inc dx ; 0x1f3
mov ax,si
out dx,al ; LBA地址7~0
inc dx ; 0x1f4
mov al,ah
out dx,al ; LBA地址15~8
inc dx ; 0x1f5
mov ax,di
out dx,al ; LBA地址23~16
inc dx ; 0x1f6
mov al,0xe0 ; LBA28模式主盘
or al,ah ; LBA地址27~24
out dx,al
inc dx ; 0x1f7
mov al,0x20 ; 读命令
out dx,al
.waits:
in al,dx ; 此时 dx 为 0x1f7此时为命令端口也是状态窗口
and al,0x88
cmp al,0x08
jnz .waits
; 内部操作期间,会将 0x1f7 端口第 7 位设置为“1”准备就绪后会将此位清零并将第 3 位设为 1
mov cx,256 ; 总计要读取的/字/数
mov dx,0x1f0
.readw:
in ax,dx
mov [bx],ax
add bx,2
loop .readw
pop dx
pop cx
pop bx
pop ax

BIN
VM-source/test-kvm.asm.bin Normal file

Binary file not shown.

BIN
VM-source/test.qcow2 Normal file

Binary file not shown.

View File

@@ -44,7 +44,7 @@ int vbox::SetNetBridge(QString netDriver){
return system(("\"" + managerPath + "\" modifyvm \"" + name + return system(("\"" + managerPath + "\" modifyvm \"" + name +
"\" --nic1 bridged --cableconnected1 on --nictype1 82540EM --bridgeadapter1 \"" + netDriver + "\" --intnet1 brigh1 --macaddress1 auto").toLatin1()); "\" --nic1 bridged --cableconnected1 on --nictype1 82540EM --bridgeadapter1 \"" + netDriver + "\" --intnet1 brigh1 --macaddress1 auto").toLatin1());
} }
int vbox::SetCPU(int number){ int vbox::SetCPU(int number, int cpuNum, int coreNum){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --cpus " + QString::number(number)).toLatin1()); return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --cpus " + QString::number(number)).toLatin1());
} }
int vbox::SetMemory(int memory){ int vbox::SetMemory(int memory){
@@ -61,9 +61,9 @@ int vbox::SetRemoteConnectSetting(int port){
} }
int vbox::Start(bool unShown){ int vbox::Start(bool unShown){
if(unShown){ if(unShown){
return system(("\"" + managerPath + "\"").toLatin1()); return system(("\"" + managerPath + "\" > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1").toLatin1());
} }
return system(("\"" + managerPath + "\" startvm \"" + name + "\"").toLatin1()); return system(("\"" + managerPath + "\" startvm \"" + name + "\" > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1").toLatin1());
} }
int vbox::Stop(){ int vbox::Stop(){
return system(("\"" + managerPath + "\" controlvm \"" + name + "\" poweroff").toLatin1()); return system(("\"" + managerPath + "\" controlvm \"" + name + "\" poweroff").toLatin1());
@@ -101,3 +101,13 @@ int vbox::SetKeyboardPS2(){
int vbox::OpenUSB(){ int vbox::OpenUSB(){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --usbohci on").toLatin1()); return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --usbohci on").toLatin1());
} }
int vbox::EnabledUEFI(bool status){
if(status){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --firmware=efi").toLatin1());
}
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --firmware=bios").toLatin1());
}
int vbox::AutoInstall(QString iso){
return system(("vboxmanage unattended install '" + name + "' '--iso=" + iso + "'").toLatin1());
}

View File

@@ -21,7 +21,7 @@ public:
int MountISO(QString isoPath, QString controlName="storage_controller_1", int port=1, int device=0); int MountISO(QString isoPath, QString controlName="storage_controller_1", int port=1, int device=0);
int BootFirst(QString bootDrive); int BootFirst(QString bootDrive);
int SetNetBridge(QString netDriver); int SetNetBridge(QString netDriver);
int SetCPU(int number); int SetCPU(int number, int cpuNum, int coreNum);
int SetMemory(int memory); int SetMemory(int memory);
int SetRemote(bool setting); int SetRemote(bool setting);
int SetRemoteConnectSetting(int port=5540); int SetRemoteConnectSetting(int port=5540);
@@ -38,7 +38,8 @@ public:
int SetMousePS2(); int SetMousePS2();
int SetKeyboardPS2(); int SetKeyboardPS2();
int OpenUSB(); int OpenUSB();
int EnabledUEFI(bool status);
int AutoInstall(QString iso);
private: private:
}; };

View File

@@ -4,6 +4,7 @@
<file>deepin-wine-runner.png</file> <file>deepin-wine-runner.png</file>
<file>LANG/virtualmachine-en_US.qm</file> <file>LANG/virtualmachine-en_US.qm</file>
<file>LANG/virtualmachine-en_US.ts</file> <file>LANG/virtualmachine-en_US.ts</file>
<file>application-vnd.oasis.opendocument.text.svg</file>
</qresource> </qresource>
<qresource prefix="/picture"> <qresource prefix="/picture">
<file>截图_VirtualBox Machine_20220712142929.png</file> <file>截图_VirtualBox Machine_20220712142929.png</file>
@@ -20,4 +21,7 @@
<file>截图/截图_VirtualBox_20220712223705.png</file> <file>截图/截图_VirtualBox_20220712223705.png</file>
<file>截图/截图_选择区域_20220712224639.png</file> <file>截图/截图_选择区域_20220712224639.png</file>
</qresource> </qresource>
<qresource prefix="/TestDisk">
<file>test.qcow2</file>
</qresource>
</RCC> </RCC>

BIN
VM/AAVMF32_CODE.fd Normal file

Binary file not shown.

BIN
VM/OVMF.fd Normal file

Binary file not shown.

BIN
VM/QEMU_AARCH64_EFI.fd Normal file

Binary file not shown.

BIN
VM/QEMU_EFI_LOONG64_7.1.fd Normal file

Binary file not shown.

View File

@@ -13,7 +13,7 @@ def ReadTXT(file: str):
command = "qemu-system-x86_64" command = "qemu-system-x86_64"
#if "--kvm" in sys.argv: #if "--kvm" in sys.argv:
# command = "kvm" # command = "kvm"
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
homePath = os.path.expanduser('~') homePath = os.path.expanduser('~')
try: try:
setting = json.loads(ReadTXT(f"{homePath}/.config/deepin-wine-runner/QemuSetting.json")) 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']} " option += f"-display gtk -display vnc=:{setting['VNC']} "
if setting["EnableSound"]: if setting["EnableSound"]:
option += "-soundhw all " 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}") os.system(f"{command} {option}")

View File

@@ -2,7 +2,14 @@
import os import os
import subprocess import subprocess
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
arch = subprocess.getoutput("arch").replace(" ", "").replace("\n", "") arch = subprocess.getoutput("dpkg --print-architecture").replace(" ", "").replace("\n", "")
if os.path.exists(f"{programPath}/VirtualMachine-{arch}"):
os.system(f"{programPath}/VirtualMachine-{arch}")
exit()
# 判断文件是否解压
if not os.path.exists(f"{programPath}/VirtualMachine-amd64"):
# 解压文件
os.system(f"cd '{programPath}' ; tar -xvf vm.tar.gz")
if os.path.exists(f"{programPath}/VirtualMachine-{arch}"): if os.path.exists(f"{programPath}/VirtualMachine-{arch}"):
os.system(f"{programPath}/VirtualMachine-{arch}") os.system(f"{programPath}/VirtualMachine-{arch}")
exit() exit()

Binary file not shown.

BIN
VM/VirtualMachine-mips64el Executable file

Binary file not shown.

BIN
VM/VirtualMachine-mipsel Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

132
VM/kvm-ok Executable file
View File

@@ -0,0 +1,132 @@
#!/bin/sh
#
# kvm-ok - check whether the CPU we're running on supports KVM acceleration
# Copyright (C) 2008-2010 Canonical Ltd.
#
# Authors:
# Dustin Kirkland <kirkland@canonical.com>
# Kees Cook <kees.cook@canonical.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3,
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set -e
assert_root() {
if [ "$(id -u)" != "0" ]; then
echo "INFO: For more detailed results, you should run this as root"
echo "HINT: sudo $0"
exit 1
fi
}
verdict() {
# Print verdict
if [ "$1" = "0" ]; then
echo "KVM acceleration can be used"
exit 0
else
echo "KVM acceleration can NOT be used"
exit 1
fi
}
ARM_CPU_PART_CORTEX_A15="0xc0f" # <asm/cputype.h>
# check cpu flags for capability
case "$(uname -m)" in
armv7l)
if egrep -m1 -w '^CPU part[[:blank:]]*:' /proc/cpuinfo | \
egrep -wq "$ARM_CPU_PART_CORTEX_A15"; then
virt="ARM"
kvm_mod="kvm"
fi
;;
aarch64)
virt="ARM"
kvm_mod="kvm"
;;
ppc64le|ppc64|s390x)
# FIXME: Assume that all POWER and z/Systems are KVM capable
virt="generic"
kvm_mod="kvm"
;;
*)
virt=$(egrep -m1 -w '^flags[[:blank:]]*:' /proc/cpuinfo | egrep -wo '(vmx|svm)') || true
[ "$virt" = "vmx" ] && kvm_mod="kvm_intel"
[ "$virt" = "svm" ] && kvm_mod="kvm_amd"
;;
esac
if [ -z "$virt" ]; then
echo "INFO: Your CPU does not support KVM extensions"
assert_root
verdict 1
fi
# Now, check that the device exists
if [ -e /dev/kvm ]; then
echo "INFO: /dev/kvm exists"
verdict 0
else
echo "INFO: /dev/kvm does not exist"
echo "HINT: sudo modprobe $kvm_mod"
fi
assert_root
# Prepare MSR access
msr="/dev/cpu/0/msr"
if [ ! -r "$msr" ]; then
modprobe msr
fi
if [ -e "$msr" -a ! -r "$msr" ]; then
echo "You must be root to run this check." >&2
exit 2
fi
echo "INFO: Your CPU supports KVM extensions"
disabled=0
# check brand-specific registers
if [ "$virt" = "vmx" ]; then
BIT=$(rdmsr --bitfield 0:0 0x3a 2>/dev/null || true)
if [ "$BIT" = "1" ]; then
# and FEATURE_CONTROL_VMXON_ENABLED_OUTSIDE_SMX clear (no tboot)
BIT=$(rdmsr --bitfield 2:2 0x3a 2>/dev/null || true)
if [ "$BIT" = "0" ]; then
disabled=1
fi
fi
elif [ "$virt" = "svm" ]; then
BIT=$(rdmsr --bitfield 4:4 0xc0010114 2>/dev/null || true)
if [ "$BIT" = "1" ]; then
disabled=1
fi
elif [ "$virt" = "ARM" ]; then
# Should also test that we booted in HYP mode, if detectable
:
elif [ "$virt" = "generic" ]; then
:
else
echo "FAIL: Unknown virtualization extension: $virt"
verdict 1
fi
if [ "$disabled" -eq 1 ]; then
echo "INFO: KVM ($virt) is disabled by your BIOS"
echo "HINT: Enter your BIOS setup and enable Virtualization Technology (VT),"
echo " and then hard poweroff/poweron your system"
verdict 1
fi
verdict 0

BIN
VM/test.qcow2 Normal file

Binary file not shown.

View File

@@ -9,6 +9,6 @@ fi
rm -rfv lib rm -rfv lib
rm -rfv lib64 rm -rfv lib64
rm -rfv usr rm -rfv usr
chmod 777 -Rv ../WineLib chmod 777 -Rv .
echo 删除完成!按回车键退出 echo 删除完成!按回车键退出
read read

58
arch-i386-to-all/change.py Executable file
View File

@@ -0,0 +1,58 @@
#!/usr/bin/env python3
import os
import sys
import random
import subprocess
# 读取文本文档
def ReadTXT(path):
with open(path, "r") as file:
result = file.read()
return result
# 写入文本文档
def WriteTXT(path, things):
with open(path, "w") as file:
file.write(things)
for i in sys.argv[1:]:
#result = subprocess.getoutput(f"apt info '{i}'")
tempPath = f"/tmp/unpack-wine-{random.randint(0, 1000)}"
#os.system(f"mkdir -p '{tempPath}/DEBIAN'")
#result = ReadTXT(f"{tempPath}/DEBIAN/control")
result = subprocess.getoutput(f"dpkg --info '{i}'")
package = "demo"
version = "1.0.0"
for k in result.splitlines():
# 删除前后空格
k = k.strip()
# 判断架构
if k[:8] == "Package:":
package = k[9:].strip()
if k[:8] == "Version:":
version = k[9:].strip()
if k[:13] == "Architecture:":
arch = k[14:].strip()
if arch != "all":
print(f"需要转换架构:{arch}=>all")
print("开始自动转换")
os.system(f"mkdir -pv '{tempPath}'")
os.system(f"dpkg -x '{i}' '{tempPath}'")
os.system(f"dpkg -e '{i}' '{tempPath}/DEBIAN'")
control = ReadTXT(f"{tempPath}/DEBIAN/control")
newControl = ""
for g in control.splitlines():
gNoSpace = g.strip()
if gNoSpace[:13] == "Architecture:":
newControl += "Architecture: all\n"
continue
if gNoSpace == "Multi-Arch: same":
continue
newControl += f"{g}\n"
WriteTXT(f"{tempPath}/DEBIAN/control", newControl)
os.system(f"dpkg-deb -Z xz -z 9 -b '{tempPath}' '{package}_{version}_all.deb'")
os.system(f"rm -rfv '{tempPath}'")
break

View File

@@ -0,0 +1,7 @@
#!/bin/bash
# 读取程序版本号
cd `dirname $0`
export PROGRAMVERSION=`python3 GetProgramVersion.py`
export SIZE=`du /tmp/spark-deepin-wine-runner-builder/ | tail -n1 | awk '{print $1}'`
sed -i "s%@@VERSION@@%$PROGRAMVERSION%g" /tmp/spark-deepin-wine-runner-builder/DEBIAN/control
sed -i "s%@@SIZE@@%$SIZE%g" /tmp/spark-deepin-wine-runner-builder/DEBIAN/control

10
builddeb/GetProgramVersion.py Executable file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/env python3
# 读取程序版本号
import os
import json
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
try:
with open(f"{programPath}/../information.json") as file:
print(json.loads(file.read())["Version"])
except:
print("1.0.0")

15
deb-ace/DEBIAN/control Executable file
View File

@@ -0,0 +1,15 @@
Package: spark-deepin-wine-runner-ace
Version: @@VERSION@@
Maintainer: gfdgd xi <3025613752@qq.com>
Homepage: https://gitee.com/gfdgd-xi/deep-wine-runner
Architecture: all
Severity: serious
Certainty: possible
Check: binaries
Type: binary, udeb
Priority: optional
Depends: cn.flamescion.bookworm-compatibility-mode,bash,wget,sudo,libnotify-bin
Section: utils
Installed-Size: @@SIZE@@
Description: Wine运行器是一个能让Linux用户更加方便地运行Windows应用的程序内置了对Wine图形化的支持、各种Wine工具、自制的Wine程序打包器和运行库安装工具等。
它同时还内置了基于Qemu/VirtualBox制作的、专供小白使用的Windows虚拟机安装工具可以做到只需下载系统镜像并点击安装即可无需考虑虚拟机的安装、创建、分区等操作也能在非 X86 架构安装 X86 架构的 Windows 操作系统(但是效率较低)。

37
deb-ace/DEBIAN/postinst Executable file
View File

@@ -0,0 +1,37 @@
#!/bin/bash
function notify-send(){
#Detect the user using such display
local user=$(who | awk '{print $1}' | head -n 1)
#Detect the id of the user
local uid=$(id -u $user)
sudo -u $user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus notify-send "$@"
}
function zenity(){
#Detect the user using such display
local user=$(who | awk '{print $1}' | head -n 1)
#Detect the id of the user
local uid=$(id -u $user)
sudo -u $user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus zenity "$@"
}
###检查aptss在不在
if [ -z `which bookworm-run` ];then
echo "Oh no, ssinstall have not installed bookworm-run dependency yet! Exit"
exit 1
fi
bookworm-run echo "Welcome to BCM! Trying to install package"
if [ -z "`bookworm-run which aptss`" ];then
wget https://zunyun01.store.deepinos.org.cn/store/depends/spark-store-console-in-container_4.2.6.2_all.deb -O /tmp/ssconsole.deb
bookworm-run apt install /tmp/ssconsole.deb -y
rm /tmp/ssconsole.deb -f
fi
notify-send "Installing Wine Runner BCM, may cost some time please ensure your network is fine"
notify-send "正在书虫兼容环境中安装 Wine 运行器,可能会花费一些时间,请保持网络畅通"
bookworm-run aptss update
cp /opt/apps/spark-deepin-wine-runner-ace/spark-deepin-wine-runner.deb /tmp
bookworm-run aptss reinstall /tmp/spark-deepin-wine-runner.deb -y
bookworm-run aptss clean

54
deb-ace/DEBIAN/postrm Executable file
View File

@@ -0,0 +1,54 @@
#!/bin/bash
# 使用系统默认的 sh 运行
#################################################################################################################
# 作者gfdgd xi
# 版本2.2.0
# 更新时间2022年09月24日
# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序
# 基于 sh
#################################################################################################################
# 删除软件残留,简单粗暴一点直接全部删掉,防止出现警告
# 加判断是为了怕 reinstall 后程序就再也打不开了(除非卸载后重新安装)
if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then
rm -rf /opt/apps/deepin-wine-runner/
fi
# 删除软件缓存(留着也没什么用了)
# 缓存目录:~/.cache/deepin-wine-runner
if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then
echo "清理程序缓存"
for username in $(ls /home); do
echo /home/$username
if [ -d "/home/$username/.cache/deepin-wine-runner/" ]; then
rm -rf "/home/$username/.cache/deepin-wine-runner/"
fi
done
# 清理 root 用户的缓存文件
echo /root
if [ -d "/root/.cache/deepin-wine-runner/" ]; then
rm -rf "/root/.cache/deepin-wine-runner/"
fi
else
echo "非卸载,跳过清理"
fi
# 删除软件配置文件只限“purge”
# 配置目录:~/.config/deepin-wine-runner
if [ "$1" = "purge" ]; then
echo "清理程序配置文件"
for username in $(ls /home); do
echo /home/$username
if [ -d "/home/$username/.config/deepin-wine-runner/" ]; then
rm -rf "/home/$username/.config/deepin-wine-runner/"
fi
done
# 清理 root 用户的配置文件
echo /root
if [ -d "/root/.config/deepin-wine-runner/" ]; then
rm -rf "/root/.config/deepin-wine-runner/"
fi
else
echo "非 purge跳过清理"
fi

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,12 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=bookworm-run /usr/bin/deepin-wine-package-builder "~/.wine" %F
Icon=/opt/apps/spark-deepin-wine-runner-ace/deepin-wine-runner.svg
Name=Wine Package Builder
Name[zh]=Wine 打包器
Terminal=false
StartupNotify=true
NoDisplay=true
Keywords=exe;scr;
MimeType=application/x-ms-dos-executable;application/x-msi;application/x-ms-shortcut;

View File

@@ -0,0 +1,13 @@
[Desktop Entry]
Exec=bookworm-run /usr/bin/deepin-wine-packager-easy-builder %F
Icon=/opt/apps/spark-deepin-wine-runner-ace/deepin-wine-runner.svg
Keywords=exe;scr;
MimeType=application/x-ms-dos-executable;application/x-msi;application/x-ms-shortcut;
Name=Wine Package Builder
Name[zh]=Wine 简易打包器
NoDisplay=true
StartupNotify=true
Terminal=false
Type=Application
X-Categories=System;Wine;
X-Deepin-Vendor=user-custom

View File

@@ -0,0 +1,10 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=bookworm-run /usr/bin/deepin-wine-packager-with-script
Icon=/opt/apps/spark-deepin-wine-runner-ace/deepin-wine-runner.svg
Name=Wine Package Builder For UOS
NoDisplay=true
Name[zh]=Wine 打包器(基于活动脚本)
Terminal=false
StartupNotify=true

View File

@@ -0,0 +1,11 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=bookworm-run /usr/bin/deepin-wine-runner %F
Icon=/opt/apps/spark-deepin-wine-runner-ace/deepin-wine-runner.svg
Name=Wine Runner
Name[zh]=Wine 运行器
Terminal=false
StartupNotify=true
Keywords=exe;scr;
MimeType=application/x-ms-dos-executable;application/x-msi;application/x-ms-shortcut;

View File

@@ -0,0 +1,10 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=bookworm-run /opt/apps/deepin-wine-runner/RunVM.sh %F
Icon=/opt/apps/spark-deepin-wine-runner-ace/deepin-wine-runner.svg
Name=Setting VirtualMachine
Name[zh]=设置 Windows 虚拟机
NoDisplay=true
Terminal=false
StartupNotify=true

View File

@@ -0,0 +1,9 @@
[Desktop Entry]
Type=Application
X-Categories=System;
Exec=bookworm-run /opt/apps/deepin-wine-runner/StartVM.sh %F
Icon=/opt/apps/spark-deepin-wine-runner-ace/deepin-wine-runner.svg
Name=Start Windows VirtualMachine
Name[zh]=开启 Windows 虚拟机
Terminal=false
StartupNotify=true

View File

@@ -0,0 +1,12 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=bookworm-run /usr/bin/deepin-wine-package-builder "~/.wine" %F
Icon=/opt/apps/spark-deepin-wine-runner-ace/deepin-wine-runner.svg
Name=Wine Package Builder
Name[zh]=Wine 打包器
Terminal=false
StartupNotify=true
NoDisplay=true
Keywords=exe;scr;
MimeType=application/x-ms-dos-executable;application/x-msi;application/x-ms-shortcut;

View File

@@ -0,0 +1,13 @@
[Desktop Entry]
Exec=bookworm-run /usr/bin/deepin-wine-packager-easy-builder %F
Icon=/opt/apps/spark-deepin-wine-runner-ace/deepin-wine-runner.svg
Keywords=exe;scr;
MimeType=application/x-ms-dos-executable;application/x-msi;application/x-ms-shortcut;
Name=Wine Package Builder
Name[zh]=Wine 简易打包器
NoDisplay=true
StartupNotify=true
Terminal=false
Type=Application
X-Categories=System;Wine;
X-Deepin-Vendor=user-custom

View File

@@ -0,0 +1,10 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=bookworm-run /usr/bin/deepin-wine-packager-with-script
Icon=/opt/apps/spark-deepin-wine-runner-ace/deepin-wine-runner.svg
Name=Wine Package Builder For UOS
NoDisplay=true
Name[zh]=Wine 打包器(基于活动脚本)
Terminal=false
StartupNotify=true

View File

@@ -0,0 +1,11 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=bookworm-run /usr/bin/deepin-wine-runner %F
Icon=/opt/apps/spark-deepin-wine-runner-ace/deepin-wine-runner.svg
Name=Wine Runner
Name[zh]=Wine 运行器
Terminal=false
StartupNotify=true
Keywords=exe;scr;
MimeType=application/x-ms-dos-executable;application/x-msi;application/x-ms-shortcut;

View File

@@ -0,0 +1,10 @@
[Desktop Entry]
Type=Application
X-Categories=System;Wine;
Exec=bookworm-run /opt/apps/deepin-wine-runner/RunVM.sh %F
Icon=/opt/apps/spark-deepin-wine-runner-ace/deepin-wine-runner.svg
Name=Setting VirtualMachine
Name[zh]=设置 Windows 虚拟机
NoDisplay=true
Terminal=false
StartupNotify=true

View File

@@ -0,0 +1,9 @@
[Desktop Entry]
Type=Application
X-Categories=System;
Exec=bookworm-run /opt/apps/deepin-wine-runner/StartVM.sh %F
Icon=/opt/apps/spark-deepin-wine-runner-ace/deepin-wine-runner.svg
Name=Start Windows VirtualMachine
Name[zh]=开启 Windows 虚拟机
Terminal=false
StartupNotify=true

View File

@@ -1,5 +1,5 @@
Package: spark-deepin-wine-runner Package: spark-deepin-wine-runner
Version: 3.3.0.1 Version: @@VERSION@@
Maintainer: gfdgd xi <3025613752@qq.com> Maintainer: gfdgd xi <3025613752@qq.com>
Homepage: https://gitee.com/gfdgd-xi/deep-wine-runner Homepage: https://gitee.com/gfdgd-xi/deep-wine-runner
Architecture: all Architecture: all
@@ -9,11 +9,11 @@ Check: binaries
Type: binary, udeb Type: binary, udeb
Priority: optional Priority: optional
Depends: python3, python3-pil, libc6, python3-pil.imagetk, python3-pyquery, aria2, curl, unrar | unrar-free , unzip, python3-requests, python3-pyqt5, python3-psutil, deepin-terminal | mate-terminal | gnome-terminal | xfce4-terminal, python3-dbus, python3-pip, p7zip-full, sudo, python3-pyperclip, bubblewrap, zenity Depends: python3, python3-pil, libc6, python3-pil.imagetk, python3-pyquery, aria2, curl, unrar | unrar-free , unzip, python3-requests, python3-pyqt5, python3-psutil, deepin-terminal | mate-terminal | gnome-terminal | xfce4-terminal, python3-dbus, python3-pip, p7zip-full, sudo, python3-pyperclip, bubblewrap, zenity
Recommends: winbind, wimtools, python3-pyqt5.qtwebengine, binfmt-support, libc6:i386 Recommends: winbind, wimtools, python3-pyqt5.qtwebengine, binfmt-support, libc6:i386, libc6:armhf, libwine
Section: utils Section: utils
Conflicts: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52 Conflicts: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52
Replaces: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52 Replaces: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52
Provides: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52 Provides: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52
Installed-Size: 76512 Installed-Size: @@SIZE@@
Description: Wine运行器是一个能让Linux用户更加方便地运行Windows应用的程序内置了对Wine图形化的支持、各种Wine工具、自制的Wine程序打包器和运行库安装工具等。 Description: Wine运行器是一个能让Linux用户更加方便地运行Windows应用的程序内置了对Wine图形化的支持、各种Wine工具、自制的Wine程序打包器和运行库安装工具等。
它同时还内置了基于Qemu/VirtualBox制作的、专供小白使用的Windows虚拟机安装工具可以做到只需下载系统镜像并点击安装即可无需考虑虚拟机的安装、创建、分区等操作也能在非 X86 架构安装 X86 架构的 Windows 操作系统(但是效率较低)。 它同时还内置了基于Qemu/VirtualBox制作的、专供小白使用的Windows虚拟机安装工具可以做到只需下载系统镜像并点击安装即可无需考虑虚拟机的安装、创建、分区等操作也能在非 X86 架构安装 X86 架构的 Windows 操作系统(但是效率较低)。

View File

@@ -9,10 +9,10 @@
################################################################################################################# #################################################################################################################
# 非强制性的必应组件,所以成功不成功都行 # 非强制性的必应组件,所以成功不成功都行
# 程序版本号 # 程序版本号
version=3.3.0 version=3.4.1
echo 安装组件 echo 安装组件
python3 -m pip install --upgrade pynput --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple > /dev/null 2>&1 | true python3 -m pip install --upgrade pynput --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple --break-system-packages > /dev/null 2>&1 | true
python3 -m pip install --upgrade xpinyin --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple > /dev/null 2>&1 | true python3 -m pip install --upgrade xpinyin --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple --break-system-packages > /dev/null 2>&1 | true
echo 执行完成 echo 执行完成
echo 移除旧组件 echo 移除旧组件
if [ -d /opt/apps/deepin-wine-runner/arm-package ]; then if [ -d /opt/apps/deepin-wine-runner/arm-package ]; then
@@ -51,8 +51,8 @@ if [ `arch` != "x86_64" ]; then
rm -rf /opt/apps/deepin-wine-runner/InstallNewWineHQ.sh rm -rf /opt/apps/deepin-wine-runner/InstallNewWineHQ.sh
fi fi
# 处理 VM 工具 # 处理 VM 工具
vmPath=/opt/apps/deepin-wine-runner/VM/VirtualMachine-`arch` vmPath=/opt/apps/deepin-wine-runner/VM/VirtualMachine-`dpkg --print-architecture`
echo 当前架构为:`arch` echo 当前架构为:`dpkg --print-architecture`
if [ -f $vmPath ]; then if [ -f $vmPath ]; then
echo 虚拟机工具有该架构的预编译文件 echo 虚拟机工具有该架构的预编译文件
# 移除辅助文件 # 移除辅助文件
@@ -65,19 +65,24 @@ else
rm -f /opt/apps/deepin-wine-runner/VM/VirtualMachine-* rm -f /opt/apps/deepin-wine-runner/VM/VirtualMachine-*
fi fi
echo 处理完成! echo 处理完成!
# 修复 3.3.0.1 Box86 源挂了的问题
if [ -f /etc/apt/sources.list.d/box86.list ]; then
bash -c "echo deb http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box86-debs/debian ./ > /etc/apt/sources.list.d/box86.list"
fi
# Gitlink 源挂了
# 到时候切换 gpg 源会方便很多 # 到时候切换 gpg 源会方便很多
if [ -r /etc/apt/sources.list.d/better-dde.list ]; then #if [ -r /etc/apt/sources.list.d/better-dde.list ]; then
if [ -d /usr/share/deepin-installer ]; then # if [ -d /usr/share/deepin-installer ]; then
# 用于修复 Deepin Community Live CD Install 版签名过期的问题 # # 用于修复 Deepin Community Live CD Install 版签名过期的问题
wget -P /tmp/gfdgd-xi-sources https://code.gitlink.org.cn/gfdgd_xi/gfdgd-xi-apt-mirrors/raw/branch/master/gpg.asc # wget -P /tmp/gfdgd-xi-sources https://code.gitlink.org.cn/gfdgd_xi/gfdgd-xi-apt-mirrors/raw/branch/master/gpg.asc
rm -rfv /etc/apt/trusted.gpg.d/gfdgdxi-list.gpg | true # rm -rfv /etc/apt/trusted.gpg.d/gfdgdxi-list.gpg | true
cp -v /tmp/gfdgd-xi-sources/gpg.asc.gpg /etc/apt/trusted.gpg.d/gfdgdxi-list.gpg # cp -v /tmp/gfdgd-xi-sources/gpg.asc.gpg /etc/apt/trusted.gpg.d/gfdgdxi-list.gpg
# 用于修复 2022.11.25 Better DDE 导致的 Deepin Community Live CD Install 版问题 # # 用于修复 2022.11.25 Better DDE 导致的 Deepin Community Live CD Install 版问题
# 移除 Better DDE 源 # # 移除 Better DDE 源
rm -rfv /etc/apt/sources.list.d/better-dde.list # rm -rfv /etc/apt/sources.list.d/better-dde.list
apt update > /dev/null 2>&1 | true # apt update > /dev/null 2>&1 | true
fi # fi
fi #fi
# 设置目录权限,让用户可读可写,方便后续删除组件 # 设置目录权限,让用户可读可写,方便后续删除组件
chmod 777 -R /opt/apps/deepin-wine-runner chmod 777 -R /opt/apps/deepin-wine-runner
# 向服务器返回安装数加1不显示内容且忽略错误 # 向服务器返回安装数加1不显示内容且忽略错误

View File

@@ -5,12 +5,17 @@ import json
import time import time
import updatekiller import updatekiller
import random import random
try:
import xpinyin
except:
os.system("python3 -m pip install --upgrade xpinyin --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple --break-system-packages")
import xpinyin import xpinyin
import traceback import traceback
import subprocess import subprocess
import PyQt5.QtGui as QtGui import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore import PyQt5.QtCore as QtCore
import PyQt5.QtWidgets as QtWidgets import PyQt5.QtWidgets as QtWidgets
from DefaultSetting import *
def ShowText(text: str): def ShowText(text: str):
if text.replace(" ", "").replace("\n", "") == "": if text.replace(" ", "").replace("\n", "") == "":
@@ -183,12 +188,15 @@ Get_Dist_Name()
DISTRO='Deepin' DISTRO='Deepin'
elif grep -Eqi "UnionTech" /etc/issue || grep -Eq "UnionTech" /etc/*-release; then elif grep -Eqi "UnionTech" /etc/issue || grep -Eq "UnionTech" /etc/*-release; then
DISTRO='UniontechOS' DISTRO='UniontechOS'
elif grep -Eqi "UOS" /etc/issue || grep -Eq "UOS" /etc/*-release; then
DISTRO='UniontechOS'
else else
DISTRO='OtherOS' DISTRO='OtherOS'
fi fi
}} }}
####获得发行版名称 ####获得发行版名称
#########################预设值段 #########################预设值段
@@ -200,13 +208,17 @@ APPVER="@@@Version@@@"
EXEC_PATH="@@@EXEC_PATH@@@" EXEC_PATH="@@@EXEC_PATH@@@"
##### 软件在wine中的启动路径 ##### 软件在wine中的启动路径
START_SHELL_PATH="/opt/deepinwine/tools/spark_run_v4.sh" START_SHELL_PATH="/opt/deepinwine/tools/spark_run_v4.sh"
ENABLE_DOT_NET=""
####若使用spark-wine时需要用到.net则请把ENABLE_DOT_NET设为true同时在依赖中写spark-wine7-mono
export MIME_TYPE="" export MIME_TYPE=""
#####没什么用
export DEB_PACKAGE_NAME="@@@Package@@@" export DEB_PACKAGE_NAME="@@@Package@@@"
####这里写包名才能在启动的时候正确找到files.7z,似乎也和杀残留进程有关 ####这里写包名才能在启动的时候正确找到files.7z,似乎也和杀残留进程有关
export APPRUN_CMD="{chooseWine}" export APPRUN_CMD="@@Wine@@"
#####wine启动指令建议 #####wine启动指令建议
EXPORT_ENVS="" #EXPORT_ENVS="wine的动态链接库路径"
##例如我的wine应用是使用的dwine6的32位容器那么我要填LD_LIBRARY_PATH=$LD_LIBRARY;/opt/deepin-wine6-stable/lib
## 如果用不到就不填,不要删除前面的注释用的#
export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH` export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH`
@@ -224,7 +236,7 @@ DISABLE_ATTACH_FILE_DIALOG=""
##############<<<<<<<<<禁用文件选择工具开始 ##############<<<<<<<<<禁用文件选择工具开始
Get_Dist_Name Get_Dist_Name
#此功能实现参见结尾函数段 #此功能实现参见开头函数段
if [ "$DISTRO" != "Deepin" ] && [ "$DISTRO" != "UniontechOS" ];then if [ "$DISTRO" != "Deepin" ] && [ "$DISTRO" != "UniontechOS" ];then
DISABLE_ATTACH_FILE_DIALOG="1" DISABLE_ATTACH_FILE_DIALOG="1"
echo "非deepin/UOS默认关闭系统自带的文件选择工具使用Wine的" echo "非deepin/UOS默认关闭系统自带的文件选择工具使用Wine的"
@@ -236,12 +248,13 @@ fi
##############<<<<<<<<<屏蔽mono和gecko安装器开始 ##############<<<<<<<<<屏蔽mono和gecko安装器开始
##默认屏蔽mono和gecko安装器 ##默认屏蔽mono和gecko安装器
#if [ "$APPRUN_CMD" = "spark-wine7-devel" ];then if [ "$APPRUN_CMD" = "spark-wine7-devel" ] || [ "$APPRUN_CMD" = "spark-wine" ]|| [ "$APPRUN_CMD" = "spark-wine8" ] && [ -z "$ENABLE_DOT_NET" ];then
#export WINEDLLOVERRIDES="mscoree,mshtml=" export WINEDLLOVERRIDES="mscoree=d,mshtml=d"
#echo "为了降低打包体积默认关闭gecko和momo如有需要注释此行仅对spark-wine7-devel有效" export WINEDLLOVERRIDES="control.exe=d"
#### "为了降低打包体积默认关闭gecko和momo如有需要注释此行仅对spark-wine7-devel有效"
#fi fi
##############>>>>>>>>>屏蔽mono和gecko安装器结束 ##############>>>>>>>>>屏蔽mono和gecko安装器结束
#########################执行段 #########################执行段
@@ -265,7 +278,8 @@ if [ -n "$EXEC_PATH" ];then
fi fi
else else
$START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@" $START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@"
fi''' fi
'''
desktopFile = f'''#!/usr/bin/env xdg-open desktopFile = f'''#!/usr/bin/env xdg-open
[Desktop Entry] [Desktop Entry]
@@ -506,8 +520,8 @@ class RunThread(QtCore.QThread):
# 拷贝文件到容器 # 拷贝文件到容器
self.RunCommand(f"cp -rv '{folderExePath}' '{bottlePath}/drive_c/Program Files'") self.RunCommand(f"cp -rv '{folderExePath}' '{bottlePath}/drive_c/Program Files'")
debPackageVersion = self.GetEXEVersion(exePath.text(), bottlePath) debPackageVersion = self.GetEXEVersion(exePath.text(), bottlePath)
debDescription = f"{exeName} By Deepin Wine 6 Stable And Build By Wine Runner Easy Packager" debDescription = f"{exeName} By Build By Wine Runner Easy Packager"
debDepends = f"{chooseWine}, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei" debDepends = f"{chooseWine} | {chooseWine}-bcm | {chooseWine}-dcm, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei"
self.RunCommand(f"mkdir -pv '{debBuildPath}/DEBIAN'") self.RunCommand(f"mkdir -pv '{debBuildPath}/DEBIAN'")
self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/files'") self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/files'")
self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/entries/applications'") self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/entries/applications'")
@@ -542,7 +556,8 @@ class RunThread(QtCore.QThread):
["@@@Installed-Size@@@", str(int(buildProgramSize))], ["@@@Installed-Size@@@", str(int(buildProgramSize))],
["@@@Name@@@", exeName], ["@@@Name@@@", exeName],
["@@@EXEC_PATH@@@", exePathInBottle], ["@@@EXEC_PATH@@@", exePathInBottle],
["@@@Icon@@@", programIconPath] ["@@@Icon@@@", programIconPath],
["@@@Wine@@@", chooseWine]
] ]
debControl = ReplaceText(control, replaceMap) debControl = ReplaceText(control, replaceMap)
debPostrm = ReplaceText(postrm, replaceMap) debPostrm = ReplaceText(postrm, replaceMap)
@@ -634,8 +649,9 @@ if __name__ == "__main__":
"使用 Deepin Wine5 打包应用", "使用 Deepin Wine5 打包应用",
"使用 Deepin Wine2 打包应用" "使用 Deepin Wine2 打包应用"
] ]
wineChooserIndex = 0 wineChooserIndex = 2
wineList = ["spark-wine8", "spark-wine7-devel", "deepin-wine6-stable", "deepin-wine5-stable", "deepin-wine5", "deepin-wine"] wineList = ["spark-wine8", "spark-wine7-devel", "deepin-wine6-stable", "deepin-wine6-vannila", "spark-wine8-wow", "deepin-wine5-stable", "deepin-wine5", "deepin-wine"]
if os.system("which deepin-wine6-stable"):
for i in range(len(wineList)): for i in range(len(wineList)):
if not os.system(f"which '{wineList[i]}'"): if not os.system(f"which '{wineList[i]}'"):
wineChooserIndex = i wineChooserIndex = i
@@ -671,4 +687,6 @@ if __name__ == "__main__":
pass pass
window.resize(int(window.frameGeometry().width() * 1.2), int(window.frameGeometry().height() * 1.1)) window.resize(int(window.frameGeometry().width() * 1.2), int(window.frameGeometry().height() * 1.1))
window.show() window.show()
# 设置字体
SetFont(app)
sys.exit(app.exec_()) sys.exit(app.exec_())

View File

@@ -25,6 +25,7 @@ import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore import PyQt5.QtCore as QtCore
import PyQt5.QtWidgets as QtWidgets import PyQt5.QtWidgets as QtWidgets
from trans import * from trans import *
from DefaultSetting import *
################# #################
# 程序所需事件 # 程序所需事件
@@ -77,6 +78,9 @@ def disabled_or_NORMAL_all(choose):
buildDebDir.setDisabled(choose) buildDebDir.setDisabled(choose)
debDepends.setDisabled(choose) debDepends.setDisabled(choose)
debRecommend.setDisabled(choose) debRecommend.setDisabled(choose)
debFirstArch.setDisabled(choose)
helperConfigPathButton.setDisabled(choose)
helperConfigPathText.setDisabled(choose)
#if not choose: #if not choose:
# ChangeArchCombobox() # ChangeArchCombobox()
# ChangeWine() # ChangeWine()
@@ -497,12 +501,15 @@ Get_Dist_Name()
DISTRO='Deepin' DISTRO='Deepin'
elif grep -Eqi "UnionTech" /etc/issue || grep -Eq "UnionTech" /etc/*-release; then elif grep -Eqi "UnionTech" /etc/issue || grep -Eq "UnionTech" /etc/*-release; then
DISTRO='UniontechOS' DISTRO='UniontechOS'
elif grep -Eqi "UOS" /etc/issue || grep -Eq "UOS" /etc/*-release; then
DISTRO='UniontechOS'
else else
DISTRO='OtherOS' DISTRO='OtherOS'
fi fi
}} }}
####获得发行版名称 ####获得发行版名称
#########################预设值段 #########################预设值段
@@ -514,13 +521,18 @@ APPVER="@@@APPVER@@@"
EXEC_PATH="@@@EXEC_PATH@@@" EXEC_PATH="@@@EXEC_PATH@@@"
##### 软件在wine中的启动路径 ##### 软件在wine中的启动路径
START_SHELL_PATH="/opt/deepinwine/tools/spark_run_v4.sh" START_SHELL_PATH="/opt/deepinwine/tools/spark_run_v4.sh"
{['''ENABLE_DOT_NET=true''', 'ENABLE_DOT_NET=""'][int(disabledMono.isChecked())]}
####若使用spark-wine时需要用到.net则请把ENABLE_DOT_NET设为true同时在依赖中写spark-wine7-mono
export MIME_TYPE="" export MIME_TYPE=""
#####没什么用
export DEB_PACKAGE_NAME="@@@DEB_PACKAGE_NAME@@@" export DEB_PACKAGE_NAME="@@@DEB_PACKAGE_NAME@@@"
####这里写包名才能在启动的时候正确找到files.7z,似乎也和杀残留进程有关 ####这里写包名才能在启动的时候正确找到files.7z,似乎也和杀残留进程有关
export APPRUN_CMD="@@@APPRUN_CMD@@@" export APPRUN_CMD="@@@APPRUN_CMD@@@"
#####wine启动指令建议 #####wine启动指令建议
EXPORT_ENVS="" #EXPORT_ENVS="wine的动态链接库路径"
##例如我的wine应用是使用的dwine6的32位容器那么我要填LD_LIBRARY_PATH=$LD_LIBRARY;/opt/deepin-wine6-stable/lib
## 如果用不到就不填,不要删除前面的注释用的#
export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH` export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH`
@@ -538,7 +550,7 @@ DISABLE_ATTACH_FILE_DIALOG=""
##############<<<<<<<<<禁用文件选择工具开始 ##############<<<<<<<<<禁用文件选择工具开始
Get_Dist_Name Get_Dist_Name
#此功能实现参见结尾函数段 #此功能实现参见开头函数段
if [ "$DISTRO" != "Deepin" ] && [ "$DISTRO" != "UniontechOS" ];then if [ "$DISTRO" != "Deepin" ] && [ "$DISTRO" != "UniontechOS" ];then
DISABLE_ATTACH_FILE_DIALOG="1" DISABLE_ATTACH_FILE_DIALOG="1"
echo "非deepin/UOS默认关闭系统自带的文件选择工具使用Wine的" echo "非deepin/UOS默认关闭系统自带的文件选择工具使用Wine的"
@@ -550,17 +562,13 @@ fi
##############<<<<<<<<<屏蔽mono和gecko安装器开始 ##############<<<<<<<<<屏蔽mono和gecko安装器开始
##默认屏蔽mono和gecko安装器 ##默认屏蔽mono和gecko安装器
{['''#if [ "$APPRUN_CMD" = "spark-wine7-devel" ];then if [ "$APPRUN_CMD" = "spark-wine7-devel" ] || [ "$APPRUN_CMD" = "spark-wine" ]|| [ "$APPRUN_CMD" = "spark-wine8" ] && [ -z "$ENABLE_DOT_NET" ];then
#export WINEDLLOVERRIDES="mscoree,mshtml=" export WINEDLLOVERRIDES="mscoree=d,mshtml=d"
#echo "为了降低打包体积默认关闭gecko和momo如有需要注释此行仅对spark-wine7-devel有效" export WINEDLLOVERRIDES="control.exe=d"
#### "为了降低打包体积默认关闭gecko和momo如有需要注释此行仅对spark-wine7-devel有效"
#fi''', '''if [ "$APPRUN_CMD" = "spark-wine7-devel" ];then fi
export WINEDLLOVERRIDES="mscoree,mshtml="
echo "为了降低打包体积默认关闭gecko和momo如有需要注释此行仅对spark-wine7-devel有效"
fi'''][int(disabledMono.isChecked())]}
##############>>>>>>>>>屏蔽mono和gecko安装器结束 ##############>>>>>>>>>屏蔽mono和gecko安装器结束
#########################执行段 #########################执行段
@@ -584,7 +592,8 @@ if [ -n "$EXEC_PATH" ];then
fi fi
else else
$START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@" $START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@"
fi""" fi
"""
][chooseWineHelperValue.isChecked()], ][chooseWineHelperValue.isChecked()],
"info": f'''{{ "info": f'''{{
"appid": "{e1_text.text()}", "appid": "{e1_text.text()}",
@@ -1282,38 +1291,54 @@ extract_archive()
fi fi
}} }}
ACTIVEX_NAME=""
BOTTLENAME="{e5_text.text()}" BOTTLENAME="{e5_text.text()}"
APPVER="{e2_text.text()}" APPVER="{e2_text.text()}"
EXEC_PATH="@@@EXEC_PATH@@@" EXEC_PATH="@@@EXEC_PATH@@@"
START_SHELL_PATH="{["/opt/deepinwine/tools/run_v4.sh", "/opt/deepinwine/tools/spark_run_v4.sh"][int(chooseWineHelperValue.isChecked())]}" START_SHELL_PATH="{["/opt/deepinwine/tools/run_v4.sh", "/opt/deepinwine/tools/spark_run_v4.sh"][int(chooseWineHelperValue.isChecked())]}"
export MIME_TYPE="" export MIME_TYPE=""
export MIME_EXEC=""
export DEB_PACKAGE_NAME="{e1_text.text()}" export DEB_PACKAGE_NAME="{e1_text.text()}"
export APPRUN_CMD="$HOME/.deepinwine/{os.path.basename(wine[wineVersion.currentText()]).replace('.7z', '')}/bin/{useInstallWineArch.currentText()}" export APPRUN_CMD="$HOME/.deepinwine/{os.path.basename(wine[wineVersion.currentText()]).replace('.7z', '')}/bin/{useInstallWineArch.currentText()}"
EXPORT_ENVS=""
EXEC_NAME="@@@EXEC_NAME@@@"
export PATCH_LOADER_ENV="" export PATCH_LOADER_ENV=""
export FILEDLG_PLUGIN="/opt/apps/$DEB_PACKAGE_NAME/files/gtkGetFileNameDlg" export FILEDLG_PLUGIN="/opt/apps/$DEB_PACKAGE_NAME/files/gtkGetFileNameDlg"
DISABLE_ATTACH_FILE_DIALOG="1" DISABLE_ATTACH_FILE_DIALOG=""
export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH` export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH`
DEEPIN_WINE_BIN_DIR=`dirname $APPRUN_CMD` DEEPIN_WINE_BIN_DIR=`dirname $APPRUN_CMD`
DEEPIN_WINE_DIR=`dirname $DEEPIN_WINE_BIN_DIR` DEEPIN_WINE_DIR=`dirname $DEEPIN_WINE_BIN_DIR`
ARCHIVE_FILE_DIR="/opt/apps/$DEB_PACKAGE_NAME/files" ARCHIVE_FILE_DIR="/opt/apps/$DEB_PACKAGE_NAME/files"
export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH`
ARCHIVE_FILE_DIR="/opt/apps/$DEB_PACKAGE_NAME/files"
export WINEDLLPATH=/opt/$APPRUN_CMD/lib:/opt/$APPRUN_CMD/lib64
export WINEPREDLL="$ARCHIVE_FILE_DIR/dlls"
if [ -n "$PATCH_LOADER_ENV" ] && [ -n "$EXEC_PATH" ];then if [ -n "$PATCH_LOADER_ENV" ] && [ -n "$EXEC_PATH" ];then
export $PATCH_LOADER_ENV export $PATCH_LOADER_ENV
fi fi
extract_archive "$ARCHIVE_FILE_DIR/wine_archive.7z" "$ARCHIVE_FILE_DIR/wine_archive.md5sum" "$DEEPIN_WINE_DIR" extract_archive "$ARCHIVE_FILE_DIR/wine_archive.7z" "$ARCHIVE_FILE_DIR/wine_archive.md5sum" "$DEEPIN_WINE_DIR"
if [ -d "$DEEPIN_WINE_BIN_DIR" ] && [ "$DEEPIN_WINE_BIN_DIR" != "." ];then
export DEEPIN_WINE_BIN_DIR
fi
if [ -z "$DISABLE_ATTACH_FILE_DIALOG" ];then if [ -z "$DISABLE_ATTACH_FILE_DIALOG" ];then
export ATTACH_FILE_DIALOG=1 export ATTACH_FILE_DIALOG=1
fi fi
if [ -n "$EXPORT_ENVS" ];then
export $EXPORT_ENVS
fi
if [ -n "$EXEC_PATH" ];then if [ -n "$EXEC_PATH" ];then
if [ -z "${{EXEC_PATH##*.lnk*}}" ];then
$START_SHELL_PATH $BOTTLENAME $APPVER "C:/windows/command/start.exe" "/Unix" "$EXEC_PATH" "$@"
else
$START_SHELL_PATH $BOTTLENAME $APPVER "$EXEC_PATH" "$@" $START_SHELL_PATH $BOTTLENAME $APPVER "$EXEC_PATH" "$@"
fi
else else
$START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@" $START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@"
fi fi
@@ -1514,7 +1539,7 @@ Icon={a[i]}
Exec="/opt/apps/{e1_text.text()}/files/{os.path.splitext(os.path.basename(iconUiList[i][0].text().replace(line, "/")))[0]}.sh" {command} Exec="/opt/apps/{e1_text.text()}/files/{os.path.splitext(os.path.basename(iconUiList[i][0].text().replace(line, "/")))[0]}.sh" {command}
Name={iconUiList[i][3].text()} Name={iconUiList[i][3].text()}
Comment={e3_text.text()} Comment={e3_text.text()}
MimeType={e10_text.text()} MimeType={iconUiList[i][5].text()}
GenericName={e1_text.text()} GenericName={e1_text.text()}
Terminal=false Terminal=false
StartupNotify=false StartupNotify=false
@@ -1556,6 +1581,12 @@ StartupNotify=false
#write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/{os.path.splitext(os.path.basename(i[0].text().replace(line, '/')))[0]}_with_exagear.sh", ReplaceText(debInformation[debArch.currentIndex()]["run_with_exagear.sh"], replaceMap)) #write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/{os.path.splitext(os.path.basename(i[0].text().replace(line, '/')))[0]}_with_exagear.sh", ReplaceText(debInformation[debArch.currentIndex()]["run_with_exagear.sh"], replaceMap))
if debArch.currentIndex() != 2: if debArch.currentIndex() != 2:
write_txt("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()), debInformation[debArch.currentIndex()]["info"]) write_txt("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()), debInformation[debArch.currentIndex()]["info"])
if helperConfigPath != None and helperConfigPath != "":
os.makedirs(f"{debPackagePath}/opt/deepinwine/tools/spark_run_v4_app_configs")
if e6_text.text()[-3: ] == ".7z":
shutil.copy(helperConfigPath, f"{debPackagePath}/opt/deepinwine/tools/spark_run_v4_app_configs/{os.path.splitext(e6_text.text())[0]}.sh")
else:
shutil.copy(helperConfigPath, f"{debPackagePath}/opt/deepinwine/tools/spark_run_v4_app_configs/{e6_text.text()}.sh")
################ ################
# 修改文件权限 # 修改文件权限
################ ################
@@ -1670,9 +1701,99 @@ def ChangeArchCombobox():
def InstallDeb(): def InstallDeb():
os.system(f"xdg-open '{e12_text.text()}'") os.system(f"xdg-open '{e12_text.text()}'")
def OpenConfigFile():
path = QtWidgets.QFileDialog.getOpenFileName(window, "打开列表", get_home(), "JSON 文件(*.json);;所有文件(*.*)")
try:
if path[0] == "" and path[0] == None:
return
try:
with open(path[0], "r") as file:
openInfo = json.loads(file.read())
except:
traceback.print_exc()
QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc())
return
for i in openInfo:
option = openInfo[i][0]
if option == "L":
allInfoList[i][1].setText(openInfo[i][1])
elif option == "Co":
allInfoList[i][1].setCurrentIndex(openInfo[i][1])
elif option == "Ch":
allInfoList[i][1].setChecked(openInfo[i][1])
elif option == "Str-SparkHelperConfigPath":
allInfoList[i][1] = openInfo[i][1]
if openInfo[i][1] != None:
helperConfigPathText.setText(os.path.basename(openInfo[i][1]))
elif option == "List-Desktop":
if len(openInfo[i][1]) > 1:
for k in openInfo[i][1][1:]:
AddTab(k)
for k in range(len(openInfo[i][1][0])):
try:
iconUiList[0][k].setText(openInfo[i][1][0][k])
except:
try:
iconUiList[0][k].setCurrentIndex(openInfo[i][1][0][k])
except:
print(k)
traceback.print_exc()
except:
traceback.print_exc()
QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc())
def SaveConfigList():
saveInfo = {}
try:
for i in allInfoList:
option = allInfoList[i][0]
print(i)
if option == "L":
saveInfo[i] = ["L", allInfoList[i][1].text()]
elif option == "Co":
saveInfo[i] = ["Co", allInfoList[i][1].currentIndex()]
elif option == "Ch":
saveInfo[i] = ["Ch", allInfoList[i][1].isChecked()]
elif option == "Str-SparkHelperConfigPath":
saveInfo[i] = ["Str-SparkHelperConfigPath", allInfoList[i][1]]
elif option == "List-Desktop":
print("aaa")
desktopTabList = []
for d in allInfoList[i][1]:
desktopInfoList = []
for k in d:
try:
desktopInfoList.append(k.text())
except:
try:
desktopInfoList.append(k.currentIndex())
except:
traceback.print_exc()
desktopTabList.append(desktopInfoList)
saveInfo[i] = ["List-Desktop", desktopTabList]
path = QtWidgets.QFileDialog.getSaveFileName(window, "保存列表", get_home(), "JSON 文件(*.json);;所有文件(*.*)")
print(path)
if path[0] != "" and path[0] != None:
try:
with open(path[0], "w") as file:
file.write(json.dumps(saveInfo, ensure_ascii=False, indent=4))
except:
traceback.print_exc()
QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc())
except:
traceback.print_exc()
QtWidgets.QMessageBox.critical(window, "错误", traceback.format_exc())
def ClearHelperConfigPathText():
global helperConfigPath
helperConfigPath = None
helperConfigPathText.setText("点击浏览按钮指定软件包适配脚本")
def BrowserHelperConfigPathText(): def BrowserHelperConfigPathText():
global helperConfigPath global helperConfigPath
path = QtWidgets.QFileDialog.getOpenFileUrl(window, "选择 sh 文件", get_home(), "shell 脚本(*.sh);;所有文件(*.*)")[0] path = QtWidgets.QFileDialog.getOpenFileName(window, "选择 sh 文件", get_home(), "shell 脚本(*.sh);;所有文件(*.*)")[0]
if path == "" or path == None: if path == "" or path == None:
return return
helperConfigPath = path helperConfigPath = path
@@ -1680,8 +1801,8 @@ def BrowserHelperConfigPathText():
def ChangeWine(): def ChangeWine():
useInstallWineArch.setEnabled(os.path.exists(wine[wineVersion.currentText()])) useInstallWineArch.setEnabled(os.path.exists(wine[wineVersion.currentText()]))
debDepends.setText([f"{wine[wineVersion.currentText()]}, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei", debDepends.setText([f"{wine[wineVersion.currentText()]} | {wine[wineVersion.currentText()]}-bcm | {wine[wineVersion.currentText()]}-dcm, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei",
f"{wine[wineVersion.currentText()]}, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei" f"{wine[wineVersion.currentText()]} | {wine[wineVersion.currentText()]}-bcm | {wine[wineVersion.currentText()]}-dcm, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei"
][int(chooseWineHelperValue.isChecked())]) ][int(chooseWineHelperValue.isChecked())])
debRecommend.setText("") debRecommend.setText("")
helperConfigPathText.setEnabled(chooseWineHelperValue.isChecked()) helperConfigPathText.setEnabled(chooseWineHelperValue.isChecked())
@@ -1690,9 +1811,9 @@ def ChangeWine():
debDepends.setText(["deepin-wine-helper (>= 5.1.30-1)", debDepends.setText(["deepin-wine-helper (>= 5.1.30-1)",
"spark-dwine-helper | store.spark-app.spark-dwine-helper" "spark-dwine-helper | store.spark-app.spark-dwine-helper"
][int(chooseWineHelperValue.isChecked())]) ][int(chooseWineHelperValue.isChecked())])
if "deepin-wine5-stable" in wine[wineVersion.currentText()]: #if "deepin-wine5-stable" in wine[wineVersion.currentText()]:
debDepends.setText("libasound2 (>= 1.0.16), libc6 (>= 2.28), libglib2.0-0 (>= 2.12.0), libgphoto2-6 (>= 2.5.10), libgphoto2-port12 (>= 2.5.10), libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0), liblcms2-2 (>= 2.2+git20110628), libldap-2.4-2 (>= 2.4.7), libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14), libpcap0.8 (>= 0.9.8), libpulse0 (>= 0.99.1), libudev1 (>= 183), libvkd3d1 (>= 1.0), libx11-6, libxext6, libxml2 (>= 2.9.0), ocl-icd-libopencl1 | libopencl1, udis86, zlib1g (>= 1:1.1.4), libasound2-plugins, libncurses6 | libncurses5 | libncurses, deepin-wine-plugin-virtual") # debDepends.setText("libasound2 (>= 1.0.16), libc6 (>= 2.28), libglib2.0-0 (>= 2.12.0), libgphoto2-6 (>= 2.5.10), libgphoto2-port12 (>= 2.5.10), libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0), liblcms2-2 (>= 2.2+git20110628), libldap-2.4-2 (>= 2.4.7), libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14), libpcap0.8 (>= 0.9.8), libpulse0 (>= 0.99.1), libudev1 (>= 183), libvkd3d1 (>= 1.0), libx11-6, libxext6, libxml2 (>= 2.9.0), ocl-icd-libopencl1 | libopencl1, udis86, zlib1g (>= 1:1.1.4), libasound2-plugins, libncurses6 | libncurses5 | libncurses, deepin-wine-plugin-virtual")
debRecommend.setText("libcapi20-3, libcups2, libdbus-1-3, libfontconfig1, libfreetype6, libglu1-mesa | libglu1, libgnutls30 | libgnutls28 | libgnutls26, libgsm1, libgssapi-krb5-2, libjpeg62-turbo | libjpeg8, libkrb5-3, libodbc1, libosmesa6, libpng16-16 | libpng12-0, libsane | libsane1, libsdl2-2.0-0, libtiff5, libv4l-0, libxcomposite1, libxcursor1, libxfixes3, libxi6, libxinerama1, libxrandr2, libxrender1, libxslt1.1, libxxf86vm1") # debRecommend.setText("libcapi20-3, libcups2, libdbus-1-3, libfontconfig1, libfreetype6, libglu1-mesa | libglu1, libgnutls30 | libgnutls28 | libgnutls26, libgsm1, libgssapi-krb5-2, libjpeg62-turbo | libjpeg8, libkrb5-3, libodbc1, libosmesa6, libpng16-16 | libpng12-0, libsane | libsane1, libsdl2-2.0-0, libtiff5, libv4l-0, libxcomposite1, libxcursor1, libxfixes3, libxi6, libxinerama1, libxrandr2, libxrender1, libxslt1.1, libxxf86vm1")
# 获取用户桌面目录 # 获取用户桌面目录
def get_desktop_path(): def get_desktop_path():
@@ -1963,12 +2084,13 @@ def ChangeTapTitle():
mapLink = [] mapLink = []
def AddTab(): def AddTab(defaultValue=[]):
global mapLink global mapLink
button2 = QtWidgets.QPushButton(transla.transe("U", "浏览……")) button2 = QtWidgets.QPushButton(transla.transe("U", "浏览……"))
e7_text = QtWidgets.QLineEdit() e7_text = QtWidgets.QLineEdit()
e8_text = QtWidgets.QLineEdit() e8_text = QtWidgets.QLineEdit()
e9_text = QtWidgets.QLineEdit() e9_text = QtWidgets.QLineEdit()
e10_text = QtWidgets.QLineEdit()
e15_text = QtWidgets.QLineEdit() e15_text = QtWidgets.QLineEdit()
iconTab1 = QtWidgets.QWidget() iconTab1 = QtWidgets.QWidget()
option1_text = QtWidgets.QComboBox() option1_text = QtWidgets.QComboBox()
@@ -1984,6 +2106,7 @@ def AddTab():
desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "wine 容器里需要运行的可执行文件的参数:")), 8, 0, 1, 1) desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "wine 容器里需要运行的可执行文件的参数:")), 8, 0, 1, 1)
desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的名称(※必填):")), 9, 0, 1, 1) desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的名称(※必填):")), 9, 0, 1, 1)
desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的图标:")), 10, 0, 1, 1) desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的图标:")), 10, 0, 1, 1)
desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", ".desktop 的 MimeType")), 11, 0, 1, 1)
iconTab1.setLayout(desktopIconTabLayout) iconTab1.setLayout(desktopIconTabLayout)
desktopIconTab.addTab(iconTab1, f"图标{desktopIconTab.count() + 1}") desktopIconTab.addTab(iconTab1, f"图标{desktopIconTab.count() + 1}")
desktopIconTabLayout.addWidget(e7_text, 6, 1, 1, 1) desktopIconTabLayout.addWidget(e7_text, 6, 1, 1, 1)
@@ -1992,6 +2115,7 @@ def AddTab():
desktopIconTabLayout.addWidget(e8_text, 9, 1, 1, 1) desktopIconTabLayout.addWidget(e8_text, 9, 1, 1, 1)
desktopIconTabLayout.addWidget(e9_text, 10, 1, 1, 1) desktopIconTabLayout.addWidget(e9_text, 10, 1, 1, 1)
desktopIconTabLayout.addWidget(button2, 10, 2, 1, 1) desktopIconTabLayout.addWidget(button2, 10, 2, 1, 1)
desktopIconTabLayout.addWidget(e10_text, 11, 1, 1, 1)
e8_text.setWhatsThis(transla.transe("U", """填写该软件的中文或英文名称。""")) e8_text.setWhatsThis(transla.transe("U", """填写该软件的中文或英文名称。"""))
e9_text.setWhatsThis(transla.transe("U", """图标只支持PNG格式和SVG格式其他格式无法显示。""")) e9_text.setWhatsThis(transla.transe("U", """图标只支持PNG格式和SVG格式其他格式无法显示。"""))
e15_text.setWhatsThis(transla.transe("U", "程序参数,如%u,一般不需要")) e15_text.setWhatsThis(transla.transe("U", "程序参数,如%u,一般不需要"))
@@ -2010,7 +2134,17 @@ Utility=工具软件或其他应用。
e7_text.textChanged.connect(ChangeTapTitle) e7_text.textChanged.connect(ChangeTapTitle)
e7_text.setPlaceholderText("例如 c:/Program Files/Tencent/QQ/Bin/QQ.exe") e7_text.setPlaceholderText("例如 c:/Program Files/Tencent/QQ/Bin/QQ.exe")
e9_text.setPlaceholderText(transla.transe("U", "支持 png 和 svg 格式,不支持 ico 格式")) e9_text.setPlaceholderText(transla.transe("U", "支持 png 和 svg 格式,不支持 ico 格式"))
iconUiList.append([e7_text, option1_text, e15_text, e8_text, e9_text]) e10_text.setWhatsThis(transla.transe("U", "快捷方式的 MimeType 项,一般为空即可"))
iconUiList.append([e7_text, option1_text, e15_text, e8_text, e9_text, e10_text])
if defaultValue != []:
for i in range(len(iconUiList[-1])):
try:
iconUiList[-1][i].setText(defaultValue[i])
except:
try:
iconUiList[-1][i].setCurrentIndex(defaultValue[i])
except:
traceback.print_exc()
print(iconUiList) print(iconUiList)
def DelTab(): def DelTab():
@@ -2049,8 +2183,8 @@ bottleNameLock = False
############### ###############
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
# 如果要添加其他 wine请在字典添加其名称和执行路径 # 如果要添加其他 wine请在字典添加其名称和执行路径
wine = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5 stable": "deepin-wine5-stable", "deepin-wine6 stable": "deepin-wine6-stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine", "spark-wine8": "spark-wine8"} wine = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5 stable": "deepin-wine5-stable", "deepin-wine6 stable": "deepin-wine6-stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine", "spark-wine8": "spark-wine8", "spark-wine8-wow": "spark-wine8-wow", "deepin-wine6-vannila": "deepin-wine6-vannila"}
wineValue = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5-stable": "deepin-wine5 stable", "deepin-wine6-stable": "deepin-wine6 stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine", "spark-wine8": "spark-wine8"} wineValue = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5-stable": "deepin-wine5 stable", "deepin-wine6-stable": "deepin-wine6 stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine", "spark-wine8": "spark-wine8", "spark-wine8-wow": "spark-wine8-wow", "deepin-wine6-vannila": "deepin-wine6-vannila"}
# 读取 wine 本地列表 # 读取 wine 本地列表
for i in os.listdir("/opt"): for i in os.listdir("/opt"):
if os.path.exists(f"/opt/{i}/bin/wine"): if os.path.exists(f"/opt/{i}/bin/wine"):
@@ -2100,6 +2234,11 @@ tips = transla.transe("U", """提示:
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow() window = QtWidgets.QMainWindow()
widget = QtWidgets.QWidget() widget = QtWidgets.QWidget()
defaultFont = window.font()
#hScroll = QtWidgets.QScrollArea()
#hScroll.setWidget(widget)
#hScroll.verticalScrollBar().setValue(hScroll.verticalScrollBar().maximum())
#hScroll.horizontalScrollBar().setValue(hScroll.horizontalScrollBar().maximum())
widgetLayout = QtWidgets.QGridLayout() widgetLayout = QtWidgets.QGridLayout()
# 设置变量以修改和获取值项 # 设置变量以修改和获取值项
wineVersion = QtWidgets.QComboBox() wineVersion = QtWidgets.QComboBox()
@@ -2136,7 +2275,7 @@ debArch = QtWidgets.QComboBox()
debArch.addItems(["默认选项", "arm64(box86+exagear)"]) debArch.addItems(["默认选项", "arm64(box86+exagear)"])
#debArch.addItems(["i386", "arm64(box86+exagear)", "all(crossover)"]) #debArch.addItems(["i386", "arm64(box86+exagear)", "all(crossover)"])
textbox1 = QtWidgets.QTextBrowser() textbox1 = QtWidgets.QTextBrowser()
option1_text.addItems(["Network", "Chat", "Audio", "Video", "Graphics", "Office", "Translation", "Development", "Utility"]) option1_text.addItems(["Network", "Chat", "Audio", "Video", "Graphics", "Office", "Translation", "Development", "Utility", "Game", "AudioVideo", "System"])
option1_text.setCurrentText("Network") option1_text.setCurrentText("Network")
wineFrame = QtWidgets.QHBoxLayout() wineFrame = QtWidgets.QHBoxLayout()
chooseWineHelperValue = QtWidgets.QCheckBox(transla.transe("U", "使用星火wine helper\n如不勾选默认为deepin-wine-helper")) chooseWineHelperValue = QtWidgets.QCheckBox(transla.transe("U", "使用星火wine helper\n如不勾选默认为deepin-wine-helper"))
@@ -2145,6 +2284,13 @@ helperConfigPathButton = QtWidgets.QPushButton("浏览")
helperConfigPathText = QtWidgets.QLabel("点击浏览按钮指定软件包适配脚本") helperConfigPathText = QtWidgets.QLabel("点击浏览按钮指定软件包适配脚本")
helperConfigPathLayout.addWidget(helperConfigPathButton) helperConfigPathLayout.addWidget(helperConfigPathButton)
helperConfigPathLayout.addWidget(helperConfigPathText) helperConfigPathLayout.addWidget(helperConfigPathText)
helperConfigPathButton.clicked.connect(BrowserHelperConfigPathText)
helperConfigPathButton.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
helperConfigPathMenu = QtWidgets.QMenu(window)
delHelperConfigPath = QtWidgets.QAction("取消选择")
delHelperConfigPath.triggered.connect(ClearHelperConfigPathText)
helperConfigPathMenu.addAction(delHelperConfigPath)
helperConfigPathButton.customContextMenuRequested.connect(lambda: helperConfigPathMenu.exec_(QtGui.QCursor.pos()))
button1.clicked.connect(button1_cl) button1.clicked.connect(button1_cl)
button2.clicked.connect(lambda: button2_cl(0)) button2.clicked.connect(lambda: button2_cl(0))
mapLink.append(e9_text) mapLink.append(e9_text)
@@ -2183,6 +2329,7 @@ desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示
desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "wine 容器里需要运行的可执行文件的参数:")), 8, 0, 1, 1) desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "wine 容器里需要运行的可执行文件的参数:")), 8, 0, 1, 1)
desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的名称(※必填):")), 9, 0, 1, 1) desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的名称(※必填):")), 9, 0, 1, 1)
desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的图标:")), 10, 0, 1, 1) desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的图标:")), 10, 0, 1, 1)
desktopIconTabLayout.addWidget(QtWidgets.QLabel(transla.transe("U", ".desktop 的 MimeType")), 11, 0, 1, 1)
iconTab1.setLayout(desktopIconTabLayout) iconTab1.setLayout(desktopIconTabLayout)
#desktopIconTab.setTabPosition(QtWidgets.QTabWidget.East) #desktopIconTab.setTabPosition(QtWidgets.QTabWidget.East)
desktopIconTab.addTab(iconTab1, "默认图标") desktopIconTab.addTab(iconTab1, "默认图标")
@@ -2203,7 +2350,8 @@ desktopIconTabLayout.addWidget(e15_text, 8, 1, 1, 1)
desktopIconTabLayout.addWidget(e8_text, 9, 1, 1, 1) desktopIconTabLayout.addWidget(e8_text, 9, 1, 1, 1)
desktopIconTabLayout.addWidget(e9_text, 10, 1, 1, 1) desktopIconTabLayout.addWidget(e9_text, 10, 1, 1, 1)
desktopIconTabLayout.addWidget(button2, 10, 2, 1, 1) desktopIconTabLayout.addWidget(button2, 10, 2, 1, 1)
iconUiList.append([e7_text, option1_text, e15_text, e8_text, e9_text]) desktopIconTabLayout.addWidget(e10_text, 11, 1, 1, 1)
iconUiList.append([e7_text, option1_text, e15_text, e8_text, e9_text, e10_text])
print(iconUiList) print(iconUiList)
widgetLayout.addLayout(wineFrame, 6, 1, 1, 1) widgetLayout.addLayout(wineFrame, 6, 1, 1, 1)
widgetLayout.addWidget(e12_text, 7, 1, 1, 1) widgetLayout.addWidget(e12_text, 7, 1, 1, 1)
@@ -2239,8 +2387,6 @@ moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "deb 的依赖(
moreSettingLayout.addWidget(debDepends) moreSettingLayout.addWidget(debDepends)
moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "deb 的推荐依赖(非强制,一般默认即可)"))) moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "deb 的推荐依赖(非强制,一般默认即可)")))
moreSettingLayout.addWidget(debRecommend) moreSettingLayout.addWidget(debRecommend)
moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "要显示的 .desktop 文件的 MimeType")))
moreSettingLayout.addWidget(e10_text)
moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "打包 deb 架构:"))) moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "打包 deb 架构:")))
moreSettingLayout.addWidget(debFirstArch) moreSettingLayout.addWidget(debFirstArch)
moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "打包选项:"))) moreSettingLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "打包选项:")))
@@ -2263,10 +2409,16 @@ e7_text.setPlaceholderText("例如 c:/Program Files/Tencent/QQ/Bin/QQ.exe")
e9_text.setPlaceholderText(transla.transe("U", "支持 png 和 svg 格式,不支持 ico 格式")) e9_text.setPlaceholderText(transla.transe("U", "支持 png 和 svg 格式,不支持 ico 格式"))
# 菜单栏 # 菜单栏
menu = window.menuBar() menu = window.menuBar()
programmenu = menu.addMenu(transla.transe("U", "程序")) programmenu = menu.addMenu(transla.transe("U", "程序&P"))
debMenu = menu.addMenu(transla.transe("U", "deb 包")) debMenu = menu.addMenu(transla.transe("U", "deb 包"))
uploadSparkStore = menu.addMenu(transla.transe("U", "投稿到星火应用商店")) uploadSparkStore = menu.addMenu(transla.transe("U", "投稿到星火应用商店"))
help = menu.addMenu(transla.transe("U", "帮助")) help = menu.addMenu(transla.transe("U", "帮助"))
openFile = QtWidgets.QAction(transla.transe("U", "打开配置文件"))
saveFile = QtWidgets.QAction(transla.transe("U", "保存配置文件"))
setMiniFont = QtWidgets.QAction(transla.transe("U", "使用小字体"))
setDefaultFont = QtWidgets.QAction(transla.transe("U", "使用默认大小字体"))
hideShowText = QtWidgets.QAction(transla.transe("U", "隐藏输出框"))
hideShowText.setCheckable(True)
exit = QtWidgets.QAction(transla.transe("U", "退出程序")) exit = QtWidgets.QAction(transla.transe("U", "退出程序"))
debE = QtWidgets.QAction(transla.transe("U", "只读取 Control 信息")) debE = QtWidgets.QAction(transla.transe("U", "只读取 Control 信息"))
debX = QtWidgets.QAction(transla.transe("U", "读取所有(需解包,时间较久)")) debX = QtWidgets.QAction(transla.transe("U", "读取所有(需解包,时间较久)"))
@@ -2278,8 +2430,22 @@ else:
uploadSparkStoreProgram.setDisabled(True) uploadSparkStoreProgram.setDisabled(True)
tip = QtWidgets.QAction(transla.transe("U", "小提示")) tip = QtWidgets.QAction(transla.transe("U", "小提示"))
getPdfHelp = QtWidgets.QAction(transla.transe("U", "Wine运行器和Wine打包器傻瓜式使用教程小白专用\nBy @雁舞白沙")) getPdfHelp = QtWidgets.QAction(transla.transe("U", "Wine运行器和Wine打包器傻瓜式使用教程小白专用\nBy @雁舞白沙"))
videoHelp = menu.addMenu(transla.transe("U", "视频教程(&V)"))
videoHelpAction = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "视频教程"))
videoHelpAction.triggered.connect(lambda: webbrowser.open_new_tab("https://space.bilibili.com/695814694/channel/collectiondetail?sid=1610353"))
videoHelp.addAction(videoHelpAction)
openFile.triggered.connect(OpenConfigFile)
saveFile.triggered.connect(SaveConfigList)
hideShowText.triggered.connect(lambda: textbox1.setHidden(hideShowText.isChecked()))
exit.triggered.connect(window.close) exit.triggered.connect(window.close)
tip.triggered.connect(helps) tip.triggered.connect(helps)
programmenu.addAction(openFile)
programmenu.addAction(saveFile)
#programmenu.addSeparator()
#programmenu.addAction(setMiniFont)
#programmenu.addAction(setDefaultFont)
programmenu.addAction(hideShowText)
programmenu.addSeparator()
programmenu.addAction(exit) programmenu.addAction(exit)
debMenu.addAction(debE) debMenu.addAction(debE)
debMenu.addAction(debX) debMenu.addAction(debX)
@@ -2309,16 +2475,17 @@ window.setCentralWidget(widget)
window.setWindowTitle(f"wine 应用打包器 {version}") window.setWindowTitle(f"wine 应用打包器 {version}")
window.setWindowIcon(QtGui.QIcon(iconPath)) window.setWindowIcon(QtGui.QIcon(iconPath))
window.resize(int(window.frameSize().width() * 2.1), int(window.frameSize().height())) window.resize(int(window.frameSize().width() * 2.1), int(window.frameSize().height()))
e1_text.setWhatsThis("""com.XXX.deepin e1_text.setWhatsThis("""安装包的包名,推荐类似 com.xxx.spark 这种倒置域名的格式,当然类似 spark-xxx 这种也可以,但是包名只能含有<b>小写字母a-z、数字0-9、加号+)和减号(-)、以及点号(.)</b>,软件包名最短长度为两个字符,且包名必须以字母开头。""")
XXX指windows软件的英文名称可以自定义名称但最好是用软件解压安装后自动生成的英文名称dingtalk。包名只能含有小写字母a-z、数字0-9、加号+)和减号(-)、以及点号(.),软件包名最短长度为两个字符,且包名必须以字母开头。""")
# 创建控件 # 创建控件
e2_text.setWhatsThis(transla.transe("U", """6.5.50随便填写或填写该软件的windows版本的版本号6.5.50只是示例)。""")) e2_text.setWhatsThis(transla.transe("U", """安装包的版本号,一般推荐格式为 <b><u>程序版本号</u>spark<u>修订号</u></b>,例如 23.01spark023.01 就是程序版本号0 为修订号,代表第一版版本"""))
e3_text.setWhatsThis(transla.transe("U", """随便填写或使用该软件的windows版本的软件简介。""")) e3_text.setWhatsThis(transla.transe("U", """安装包的说明,随意但最好能程序的介绍之类方便用户快速了解安装包内容的文字,推荐只用英文"""))
e4_text.setWhatsThis(transla.transe("U", """填写自己的网名,若是自用软件,不上架至应用商店,不进行后续维护,可随便填写。""")) e4_text.setWhatsThis(transla.transe("U", """安装包的维护者,推荐格式为:<b><u>打包者</u>&lt;<u>邮箱</u>&gt;</b> ,例如 gfdgd xi&lt;3025613752@qq.com&gt;,多个打包者用半角符号“,”分隔"""))
e5_text.setWhatsThis(f"<p>解压容器到其它机器的容器名称,一般自动带出</p><p><img src='{programPath}/Icon/Screen/202211121646232464_image.png'></p>") e5_text.setWhatsThis(f"<p>解压容器到其它机器的容器名称,一般自动带出</p><p><img src='{programPath}/Icon/Screen/202211121646232464_image.png'></p>")
e6_text.setWhatsThis(transla.transe("U", f"要打包的容器所在路径,也可以选择已经好打包的 7z 文件,一般自动带出")) e6_text.setWhatsThis(transla.transe("U", f"要打包的容器所在路径,也可以选择已经好打包的 7z 文件,一般自动带出"))
e7_text.setWhatsThis("""可执行文件的运行路径格式是“C:/XXX/XXX.exe”不包含引号""") e7_text.setWhatsThis("""程序在 wine 容器的路径格式一般为 c:/xxx/xxx.exe""")
debArch.setWhatsThis(transla.transe("U", "选择生成 deb 包所对应的架构")) debArch.setWhatsThis(transla.transe("U", "选择生成 deb 包所对应的架构"))
wineVersion.setWhatsThis("deb 包使用的 Wine")
option1_text.setWhatsThis("程序在启动器的快捷方式分类")
rmBash.setWhatsThis(transla.transe("U", "清理容器无用内容,一般建议勾选,最新版本默认勾选,如果有特殊需求(如容器内有 mono、gecko 等)建议取消勾选")) rmBash.setWhatsThis(transla.transe("U", "清理容器无用内容,一般建议勾选,最新版本默认勾选,如果有特殊需求(如容器内有 mono、gecko 等)建议取消勾选"))
debDepends.setWhatsThis(transla.transe("U", "生成 deb 包所需的依赖,一般情况下默认即可")) debDepends.setWhatsThis(transla.transe("U", "生成 deb 包所需的依赖,一般情况下默认即可"))
debRecommend.setWhatsThis(transla.transe("U", "生成 deb 包的推荐依赖,一般情况下为空即可")) debRecommend.setWhatsThis(transla.transe("U", "生成 deb 包的推荐依赖,一般情况下为空即可"))
@@ -2328,15 +2495,20 @@ option1_text.setWhatsThis("""点击右侧的下拉箭头,选择该软件所属
Network=网络应用; Network=网络应用;
Chat=即时通讯或社交沟通; Chat=即时通讯或社交沟通;
Video=视频播放; Video=视频播放;
Audio=音乐欣赏;
AudioVideo=视频播放;
Graphics=图形图像; Graphics=图形图像;
Game=游戏娱乐;
Office=办公学习; Office=办公学习;
Translation=阅读翻译; Translation=阅读翻译;
Development=软件开发; Development=软件开发;
Reading=阅读翻译;
System=系统管理;
Utility=工具软件或其他应用。 Utility=工具软件或其他应用。
不明白英文的可以百度查询一下软件分类名称的意思。 不明白英文的可以百度查询一下软件分类名称的意思。
注意:此时选择的软件分类名称决定了该软件打包后再安装时会安装在启动器中的哪个软件分类目录中。""") 注意:此时选择的软件分类名称决定了该软件打包后再安装时会安装在启动器中的哪个软件分类目录中。""")
e8_text.setWhatsThis(transla.transe("U", """填写该软件的中文或英文名称""")) e8_text.setWhatsThis(transla.transe("U", """在启动器快捷方式的名称"""))
e9_text.setWhatsThis(transla.transe("U", """图标只支持PNG格式和SVG格式其他格式无法显示。""")) e9_text.setWhatsThis(transla.transe("U", """在启动器快捷方式的图标(不支持 ico 格式,推荐使用 svg、png 格式)"""))
e10_text.setWhatsThis(transla.transe("U", "快捷方式的 MimeType 项,一般为空即可")) e10_text.setWhatsThis(transla.transe("U", "快捷方式的 MimeType 项,一般为空即可"))
option1_text.setWhatsThis(transla.transe("U", "打包的 Wine 版本,根据实际情况选择(如果打包 arm 包将不会提供选择)")) option1_text.setWhatsThis(transla.transe("U", "打包的 Wine 版本,根据实际情况选择(如果打包 arm 包将不会提供选择)"))
e12_text.setWhatsThis(transla.transe("U", "打包出的 deb 生成的位置,一般自动生成")) e12_text.setWhatsThis(transla.transe("U", "打包出的 deb 生成的位置,一般自动生成"))
@@ -2346,6 +2518,30 @@ buildDebDir.setWhatsThis(transla.transe("U", "构建 deb 包目录,但不打
textbox1.setWhatsThis(transla.transe("U", "查看打包过程中命令返回内容")) textbox1.setWhatsThis(transla.transe("U", "查看打包过程中命令返回内容"))
button5.setWhatsThis(transla.transe("U", "点击该按钮打包生成 deb")) button5.setWhatsThis(transla.transe("U", "点击该按钮打包生成 deb"))
installDeb.setWhatsThis(transla.transe("U", "调用默认的 deb 安装工具安装生成的 deb")) installDeb.setWhatsThis(transla.transe("U", "调用默认的 deb 安装工具安装生成的 deb"))
allInfoList = {
"Package": ["L", e1_text],
"Version": ["L", e2_text],
"Description": ["L", e3_text],
"Maintainer": ["L", e4_text],
"BottleName": ["L", e5_text],
"BottlePath": ["L", e6_text],
"WineVersion": ["Co", wineVersion],
"DebSavePath": ["L", e12_text],
"Desktop": ["List-Desktop", iconUiList],
"UseInstallWineArch": ["Co", useInstallWineArch],
"RemoveBash": ["Ch", rmBash],
"CleanBottleByUOS": ["Ch", cleanBottonByUOS],
"ChooseWineHelperValue": ["Ch", chooseWineHelperValue],
"DisabledMono": ["Ch", disabledMono],
"DebDepends": ["L", debDepends],
"DebRecommend": ["L", debRecommend],
"DebFirstArch": ["Co", debFirstArch],
"DebArch": ["Co", debArch],
"SparkHelperConfigPath": ["Str-SparkHelperConfigPath", helperConfigPath]
}
# 设置字体
SetFont(app)
#window.setWindowFlag(QtGui.Qt) #window.setWindowFlag(QtGui.Qt)
window.show() window.show()
sys.exit(app.exec_()) sys.exit(app.exec_())

View File

@@ -9,6 +9,7 @@ import webbrowser
import urllib.parse as parse import urllib.parse as parse
import PyQt5.QtGui as QtGui import PyQt5.QtGui as QtGui
import PyQt5.QtWidgets as QtWidgets import PyQt5.QtWidgets as QtWidgets
from DefaultSetting import *
# 读取文本文档 # 读取文本文档
def readtxt(path: "路径")->"读取文本文档": def readtxt(path: "路径")->"读取文本文档":
@@ -90,9 +91,19 @@ widgetLayout.addWidget(updateButton, 3, 5, 1, 1)
giteeButton.clicked.connect(OpenGiteeIssues) giteeButton.clicked.connect(OpenGiteeIssues)
githubButton.clicked.connect(OpenGithubIssues) githubButton.clicked.connect(OpenGithubIssues)
updateButton.clicked.connect(UpdateButtonClick) updateButton.clicked.connect(UpdateButtonClick)
# 禁用 bug 提交,引导到 Gitee 提交 bug
nameThings.setDisabled(True)
contactThings.setDisabled(True)
starMenu.setDisabled(True)
#updateThings.setDisabled(True)
updateThings.setReadOnly(True)
updateButton.setDisabled(True)
updateThings.setText("请移步到 Gitee 或 Github 提交 Bug推荐使用 Gitee\nWine 运行器 QQ 交流群762985460")
widget.setLayout(widgetLayout) widget.setLayout(widgetLayout)
window.setCentralWidget(widget) window.setCentralWidget(widget)
window.setWindowTitle(f"Wine 运行器 {version} 问题/建议反馈") window.setWindowTitle(f"Wine 运行器 {version} 问题/建议反馈")
window.setWindowIcon(QtGui.QIcon(iconPath)) window.setWindowIcon(QtGui.QIcon(iconPath))
window.show() window.show()
# 设置字体
SetFont(app)
sys.exit(app.exec_()) sys.exit(app.exec_())

View File

@@ -1,7 +1,9 @@
{ {
"Version": "3.3.0.1", "Version": "3.5.0",
"Time": "未知", "Time": "未知",
"Thank": [ "Thank": [
"感性 @ёжезийлёзйз 进行 Loongarch 架构的测试(旧世界,远程)",
"感谢 @run@3a4k 提供 3a4000 测试机器(远程)",
"感谢 RacoonGX 的付出与贡献", "感谢 RacoonGX 的付出与贡献",
"感谢 @Amber 编写的《使用wine运行器打包无安装包的软件》https://bbs.deepin.org/post/247720", "感谢 @Amber 编写的《使用wine运行器打包无安装包的软件》https://bbs.deepin.org/post/247720",
"感谢 @豪 提供程序图标", "感谢 @豪 提供程序图标",

View File

@@ -37,6 +37,7 @@ except:
bad = True bad = True
from trans import * from trans import *
from Model import * from Model import *
from DefaultSetting import *
def PythonLower(): def PythonLower():
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
@@ -606,6 +607,14 @@ def CleanProgramCache():
traceback.print_exc() traceback.print_exc()
QtWidgets.QMessageBox.critical(widget, "错误", traceback.format_exc()) QtWidgets.QMessageBox.critical(widget, "错误", traceback.format_exc())
def SetFont(size):
font = QtGui.QFont(defaultFont)
if size == 1:
app.setFont(defaultFont)
return
font.setPixelSize(int(defaultFont.pixelSize() / size))
font.setPointSize(int(defaultFont.pointSize() / size))
app.setFont(font)
# 重启本应用程序 # 重启本应用程序
def ReStartProgram(): def ReStartProgram():
@@ -790,7 +799,9 @@ def RunWineProgram(wineProgram, history = False, Disbled = True):
class RunWinetricksThread(QtCore.QThread): class RunWinetricksThread(QtCore.QThread):
signal = QtCore.pyqtSignal(str) signal = QtCore.pyqtSignal(str)
def __init__(self): bwrap = QtCore.pyqtSignal(str)
def __init__(self, bwrap):
self.bwrap = bwrap
super().__init__() super().__init__()
def run(self): def run(self):
@@ -811,13 +822,40 @@ class RunWinetricksThread(QtCore.QThread):
QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源") QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源")
return return
os.remove(f"{programPath}/dlls-arm.7z") os.remove(f"{programPath}/dlls-arm.7z")
## 获取 WineServer 路径
wineServer = None
winePath = wine[o1.currentText()]
winePath = winePath.replace(f"bash '{programPath}/WineLib/run.sh'", "").strip()
# 判断类似 xxx-server 的 WineServer
if not os.system(f"{winePath}-server") >> 8:
wineServer = f"{winePath}-server"
# 判断类似 deepin-wine6-stable 的 WineServer
elif os.path.exists(f"/opt/{winePath}/bin/wineserver"):
wineServer = f"/opt/{winePath}/bin/wineserver"
elif os.path.exists(winePath):
wineServer = os.path.normpath(f"{winePath}/../wineserver")
runtime = ""
if self.bwrap:
runtime = f"'{programPath}/WineLib/run.sh'"
winetricksPath = "winetricks"
if os.system("which winetricks") >> 8:
winetricksPath = f"'{programPath}/winetricks'"
print(wineServer)
wineProgramP = wine[o1.currentText()].replace(f"bash '{programPath}/WineLib/run.sh'", "").strip()
wineProgramP = subprocess.getoutput(f"which {wineProgramP}").strip()
if setting["TerminalOpen"]: if setting["TerminalOpen"]:
res = "" res = ""
# 用终端开应该不用返回输出内容了 # 用终端开应该不用返回输出内容了
OpenTerminal(f"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + f" winetricks --gui {wineUsingOption}") if wineServer == None:
OpenTerminal(f"WINEPREFIX='{wineBottonPath}' {option} WINE='{wineProgramP}' {runtime} {winetricksPath} --gui {wineUsingOption}")
else:
OpenTerminal(f"WINEPREFIX='{wineBottonPath}' {option} WINESERVER='{wineServer}' WINE='{wineProgramP}' {runtime} {winetricksPath} --gui {wineUsingOption}")
#res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + f" winetricks --gui {wineUsingOption}\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) #res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + f" winetricks --gui {wineUsingOption}\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else: else:
res = subprocess.Popen([f"WINEPREFIX='{wineBottonPath}' {option} WINE='" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + "' winetricks --gui"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) if wineServer == None:
res = subprocess.Popen([f"WINEPREFIX='{wineBottonPath}' {option} WINE='{wineProgramP}' {runtime} {winetricksPath} --gui"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else:
res = subprocess.Popen([f"WINEPREFIX='{wineBottonPath}' {option} WINESERVER='{wineServer}' WINE='{wineProgramP}' {runtime} {winetricksPath} --gui"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# 实时读取程序返回 # 实时读取程序返回
while res.poll() is None: while res.poll() is None:
try: try:
@@ -831,6 +869,24 @@ class RunWinetricksThread(QtCore.QThread):
DisableButton(False) DisableButton(False)
runWinetricks = None runWinetricks = None
def RunWinetricksWithWineLib():
global runWinetricks
DisableButton(True)
if not CheckProgramIsInstall(wine[o1.currentText()]) and o1.currentText() != "基于 linglong 的 deepin-wine6-stable不推荐" and o1.currentText() != "基于 UOS exagear 的 deepin-wine6-stable" and o1.currentText() != "基于 UOS box86 的 deepin-wine6-stable":
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
DisableButton(False)
return
if o1.currentText() == "基于 UOS box86 的 deepin-wine6-stable" or o1.currentText() == "基于 UOS exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x -y \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox.critical(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
returnText.setText("")
runWinetricks = RunWinetricksThread(False)
runWinetricks.signal.connect(QT.ShowWineReturn)
runWinetricks.start()
def RunWinetricks(): def RunWinetricks():
global runWinetricks global runWinetricks
DisableButton(True) DisableButton(True)
@@ -845,7 +901,7 @@ def RunWinetricks():
return return
os.remove(f"{programPath}/dlls-arm.7z") os.remove(f"{programPath}/dlls-arm.7z")
returnText.setText("") returnText.setText("")
runWinetricks = RunWinetricksThread() runWinetricks = RunWinetricksThread(False)
runWinetricks.signal.connect(QT.ShowWineReturn) runWinetricks.signal.connect(QT.ShowWineReturn)
runWinetricks.start() runWinetricks.start()
@@ -1691,6 +1747,7 @@ class ProgramSetting():
autoPath = None autoPath = None
qemuUnmountHome = None qemuUnmountHome = None
chineseLanguage = None chineseLanguage = None
fontSize = None
def ShowWindow(): def ShowWindow():
ProgramSetting.message = QtWidgets.QMainWindow() ProgramSetting.message = QtWidgets.QMainWindow()
widget = QtWidgets.QWidget() widget = QtWidgets.QWidget()
@@ -1709,6 +1766,7 @@ class ProgramSetting():
widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "自动根据EXE名称生成路径")), 11, 0, 1, 1) widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "自动根据EXE名称生成路径")), 11, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "Qemu + Chroot 挂载用户目录:")), 12, 0, 1, 1) widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "Qemu + Chroot 挂载用户目录:")), 12, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "程序翻译:")), 13, 0, 1, 1) widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "程序翻译:")), 13, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel(transla.transe("U", "字体缩小比例(数值越大字体越小,默认为 1")), 14, 0, 1, 1)
ProgramSetting.wineBottonA = QtWidgets.QComboBox() ProgramSetting.wineBottonA = QtWidgets.QComboBox()
ProgramSetting.wineDebug = QtWidgets.QCheckBox(transla.transe("U", "开启 DEBUG 输出")) ProgramSetting.wineDebug = QtWidgets.QCheckBox(transla.transe("U", "开启 DEBUG 输出"))
ProgramSetting.defultWine = QtWidgets.QComboBox() ProgramSetting.defultWine = QtWidgets.QComboBox()
@@ -1731,6 +1789,7 @@ class ProgramSetting():
ProgramSetting.autoPath = QtWidgets.QCheckBox(transla.transe("U", "自动根据文件名生成容器路径开启后必须通过修改默认wine容器路径才可指定其它路径重启程序后生效")) ProgramSetting.autoPath = QtWidgets.QCheckBox(transla.transe("U", "自动根据文件名生成容器路径开启后必须通过修改默认wine容器路径才可指定其它路径重启程序后生效"))
ProgramSetting.qemuUnmountHome = QtWidgets.QCheckBox(transla.transe("U", "使用 Qemu + Chroot 时不挂载用户目录并与系统隔离(修改后重启操作系统生效)")) ProgramSetting.qemuUnmountHome = QtWidgets.QCheckBox(transla.transe("U", "使用 Qemu + Chroot 时不挂载用户目录并与系统隔离(修改后重启操作系统生效)"))
ProgramSetting.chineseLanguage = QtWidgets.QCheckBox(transla.transe("U", "禁用程序界面翻译")) ProgramSetting.chineseLanguage = QtWidgets.QCheckBox(transla.transe("U", "禁用程序界面翻译"))
ProgramSetting.fontSize = QtWidgets.QDoubleSpinBox()
ProgramSetting.wineBottonA.addItems(["Auto", "win32", "win64"]) ProgramSetting.wineBottonA.addItems(["Auto", "win32", "win64"])
ProgramSetting.wineBottonA.setCurrentText(setting["Architecture"]) ProgramSetting.wineBottonA.setCurrentText(setting["Architecture"])
ProgramSetting.wineDebug.setChecked(setting["Debug"]) ProgramSetting.wineDebug.setChecked(setting["Debug"])
@@ -1746,6 +1805,7 @@ class ProgramSetting():
ProgramSetting.autoPath.setChecked(setting["AutoPath"]) ProgramSetting.autoPath.setChecked(setting["AutoPath"])
ProgramSetting.qemuUnmountHome.setChecked(setting["QemuUnMountHome"]) ProgramSetting.qemuUnmountHome.setChecked(setting["QemuUnMountHome"])
ProgramSetting.chineseLanguage.setChecked(setting["Chinese"]) ProgramSetting.chineseLanguage.setChecked(setting["Chinese"])
ProgramSetting.fontSize.setValue(setting["FontSize"])
# QemuUnMountHome # QemuUnMountHome
widgetLayout.addWidget(ProgramSetting.wineBottonA, 0, 1, 1, 1) widgetLayout.addWidget(ProgramSetting.wineBottonA, 0, 1, 1, 1)
widgetLayout.addWidget(ProgramSetting.wineDebug, 1, 1, 1, 1) widgetLayout.addWidget(ProgramSetting.wineDebug, 1, 1, 1, 1)
@@ -1763,7 +1823,8 @@ class ProgramSetting():
widgetLayout.addWidget(ProgramSetting.autoPath, 11, 1, 1, 2) widgetLayout.addWidget(ProgramSetting.autoPath, 11, 1, 1, 2)
widgetLayout.addWidget(ProgramSetting.qemuUnmountHome, 12, 1, 1, 2) widgetLayout.addWidget(ProgramSetting.qemuUnmountHome, 12, 1, 1, 2)
widgetLayout.addWidget(ProgramSetting.chineseLanguage, 13, 1, 1, 2) widgetLayout.addWidget(ProgramSetting.chineseLanguage, 13, 1, 1, 2)
widgetLayout.addWidget(save, 14, 2, 1, 1) widgetLayout.addWidget(ProgramSetting.fontSize, 14, 1, 1, 2)
widgetLayout.addWidget(save, 15, 2, 1, 1)
widget.setLayout(widgetLayout) widget.setLayout(widgetLayout)
ProgramSetting.message.setCentralWidget(widget) ProgramSetting.message.setCentralWidget(widget)
ProgramSetting.message.setWindowIcon(QtGui.QIcon(iconPath)) ProgramSetting.message.setWindowIcon(QtGui.QIcon(iconPath))
@@ -1795,6 +1856,7 @@ class ProgramSetting():
setting["AutoPath"] = ProgramSetting.autoPath.isChecked() setting["AutoPath"] = ProgramSetting.autoPath.isChecked()
setting["QemuUnMountHome"] = ProgramSetting.qemuUnmountHome.isChecked() setting["QemuUnMountHome"] = ProgramSetting.qemuUnmountHome.isChecked()
setting["Chinese"] = ProgramSetting.chineseLanguage.isChecked() setting["Chinese"] = ProgramSetting.chineseLanguage.isChecked()
setting["FontSize"] = ProgramSetting.fontSize.value()
try: try:
write_txt(get_home() + "/.config/deepin-wine-runner/WineSetting.json", json.dumps(setting)) write_txt(get_home() + "/.config/deepin-wine-runner/WineSetting.json", json.dumps(setting))
except: except:
@@ -2174,25 +2236,7 @@ def TransLog():
########################### ###########################
# 加载配置 # 加载配置
########################### ###########################
defultProgramList = {
"Architecture": "Auto",
"Debug": True,
"DefultWine": "deepin-wine6 stable",
"DefultBotton" : get_home() + "/.wine",
"TerminalOpen": False,
"WineOption": "",
"WineBottonDifferent": False,
"CenterWindow": False,
"Theme": "",
"MonoGeckoInstaller": False,
"AutoWine": True,
"RuntimeCache": True,
"MustRead": False,
"BuildByBottleName": False,
"AutoPath": False,
"QemuUnMountHome": False,
"Chinese": True
}
if not os.path.exists(get_home() + "/.config/"): # 如果没有配置文件夹 if not os.path.exists(get_home() + "/.config/"): # 如果没有配置文件夹
os.mkdir(get_home() + "/.config/") # 创建配置文件夹 os.mkdir(get_home() + "/.config/") # 创建配置文件夹
if not os.path.exists(get_home() + "/.config/deepin-wine-runner"): # 如果没有配置文件夹 if not os.path.exists(get_home() + "/.config/deepin-wine-runner"): # 如果没有配置文件夹
@@ -2234,9 +2278,12 @@ def CheckWine():
"基于 UOS exagear 的 deepin-wine6-stable": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ", "基于 UOS exagear 的 deepin-wine6-stable": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ",
"使用 Flatpak 安装的 Wine": "flatpak run org.winehq.Wine", "使用 Flatpak 安装的 Wine": "flatpak run org.winehq.Wine",
"deepin-wine6 stable": "deepin-wine6-stable", "deepin-wine6 stable": "deepin-wine6-stable",
"deepin-wine6-vannila": "deepin-wine6-vannila",
"deepin-wine5 stable": "deepin-wine5-stable", "deepin-wine5 stable": "deepin-wine5-stable",
"spark-wine": "spark-wine",
"spark-wine7-devel": "spark-wine7-devel", "spark-wine7-devel": "spark-wine7-devel",
"spark-wine8": "spark-wine8", "spark-wine8": "spark-wine8",
"spark-wine8-wow": "spark-wine8-wow",
"deepin-wine": "deepin-wine", "deepin-wine": "deepin-wine",
"deepin-wine5": "deepin-wine5", "deepin-wine5": "deepin-wine5",
"wine": "wine", "wine": "wine",
@@ -2493,45 +2540,29 @@ exe路径\' 参数 \'
即可(单引号需要输入); 即可(单引号需要输入);
5、wine 容器如果没有指定,则会默认为 ~/.wine 5、wine 容器如果没有指定,则会默认为 ~/.wine
6、如果可执行文件比较大的话会出现点击“获取该程序运行情况”出现假死的情况因为正在后台读取 SHA1只需要等一下即可读取速度依照您电脑处理速度、读写速度、可执行文件大小等有关 6、如果可执行文件比较大的话会出现点击“获取该程序运行情况”出现假死的情况因为正在后台读取 SHA1只需要等一下即可读取速度依照您电脑处理速度、读写速度、可执行文件大小等有关
7、对于非 X86 的用户来说,请不要使用本程序自带的 Wine 安装程序和 Windows 虚拟机安装功能(检测到为非 X86 架构会自动禁用); 7、如果非 X86 的用户的 UOS 专业版用户想要使用的话,只需要在应用商店安装一个 Wine 版本微信即可在本程序选择正确的 Wine 运行程序;''')
8、如果非 X86 的用户的 UOS 专业版用户想要使用的话,只需要在应用商店安装一个 Wine 版本微信即可在本程序选择正确的 Wine 运行程序; updateThingsString = transla.transe("U", '''<b>3.5.0 更新内容:</b>
9、在使用 linglong 包的 Wine 应用时,必须安装至少一个 linglong 的使用 Wine 软件包才会出现该选项, ※1、虚拟机工具支持 kvm 检测
而程序识别到的 Wine 是按 linglong 的使用 Wine 软件包名的字母排序第一个的 Wine且生成的容器不在用户目录下而是在容器的用户目录下~/.deepinwine、/tmp、桌面、下载、文档等被映射的目录除外 ※2、修改虚拟机工具提示文本新增对 UOS 3a4000 用户无法正常使用 Qemu 的解决方案
同理需要运行的 EXE 也必须在被映射的目录内; ※3、在主界面点击“安装”按钮后自动切换至帮助页面
10、如果是使用 Deepin 23 的 Wine 安装脚本,请切记——安装过程会临时添加 Deepin 20 的 apt 源,不要中断安装以及 ※4、新增虚拟机日志输出和读取功能
<b>千万不要中断后不删除源的情况下 apt upgrade </b>中断后只需重新打开脚本输入 repair 或者随意安装一个 Wine会自动执行恢复操作即可 ※5、新增Qemu测试测试功能
以及此脚本安装的 Wine 无法保证 100% 能使用,以及副作用是会提示; ※6、虚拟机工具支持安装/运行 arm32、arm64 架构的系统
<code>N: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构,跳过配置文件 'main/binary-i386/Packages' 的获取。</code>''') ※7、修复虚拟机工具在系统版本选择第 5 项及以后出现不会挂载 ISO 的问题(使用 Qemu 的情况下)
updateThingsString = transla.transe("U", '''<b>3.3.0.1</b> ※8、修复简易打包器无法打开的问题 https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I85F9M
1、修复运行器打开主界面不进行任何操作但 CPU 占用率过高的问题 9、生态适配脚本打包器支持正确根据打包结果显示打包成功/失败 https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I7D83Z
※2、修复运行器运行器局部无法正常移除的问题 10、生态适配脚本打包器设置使用 xz 格式打包 deb
11、新增 ace 包
<b>3.0.0.0</b> 12、虚拟机工具支持强制关闭 VirtualBox/Qemu并增加了对 Windows 7 安装脚本的检测
※1、简易打包器支持选择 Wine 版本以及修改打包生成的 deb 包的架构为 all 13、新增 lat 翻译器安装选项''')
※2、修改容器自动配置脚本的 Gitlink 源为 Gitee 源
※3、在安装更多 Wine 处安装 Wine 后主窗口 Wine 版本下拉框自动更新
※4、设置打包器在 Ubuntu 依旧打包 xz 格式的 deb 包
※5、修复 Wine 简易打包器 control 文件 Installed-Size 格式不规范的问题
※6、更换 Box86 源并支持安装 Box64如果为 aarch64 架构)
※7、新增 Wine 自建源(支持 Debian10、Deepin20
※8、修改 WineHQ 安装器使其支持选择国内清华大学镜像源或 WineHQ 官方源
※9、新增 Visual FoxPro 安装器
※10、新增安装局部运行库以解决部分低版本系统运行高版本 Wine 的问题且不与其他运行库和兼容层冲突
※11、支持调用原版的 Exagear 以及 Qemu Useri386、x86_64 运行 Wine
12、新增自动构建https://github.com/gfdgd-xi/deep-wine-runner/actions/workflows/auto-building.yml只供尝鲜
13、新增 Wine 日构建(在“安装更多 Wine”处可以获取目前有 i386、amd64、i386+amd64、amd64+wow64 mode、aarch64
14、优化容器清理脚本
15、修复部分组件没完全换源的问题部分组件支持自动换可用源''')
for i in information["Thank"]: for i in information["Thank"]:
thankText += f"{i}\n" thankText += f"{i}\n"
updateTime = "2023年07月25" updateTime = "2023年11月17"
aboutProgram = transla.transe("U", """<p>Wine运行器是一个能让Linux用户更加方便地运行Windows应用的程序内置了对Wine图形化的支持、各种Wine工具、自制的Wine程序打包器运行库安装工具等。</p> aboutProgram = transla.transe("U", """<p>Wine运行器是一个能让Linux用户更加方便地运行Windows应用的程序。原版的 Wine 只能使用命令操作且安装过程较为繁琐对小白不友好。于是该运行器为了解决该痛点内置了对Wine图形化的支持、Wine 安装器、微型应用商店、各种Wine工具、自制的Wine程序打包器运行库安装工具等。</p>
<p>它同时还内置了基于VirtualBox制作的、专供小白使用的Windows虚拟机安装工具可以做到只需下载系统镜像并点击安装即可无需考虑虚拟机的安装、创建、分区等操作。</p> <p>它同时还内置了基于Qemu/VirtualBox制作的、专供小白使用的Windows虚拟机安装工具可以做到只需下载系统镜像并点击安装即可无需考虑虚拟机的安装、创建、分区等操作,也能在非 X86 架构安装 X86 架构的 Windows 操作系统(但是效率较低,可以运行些老系统)。</p>
<pre> <p>而且对于部分 Wine 应用适配者来说,提供了图形化的打包工具,以及提供了一些常用工具以及运行库的安装方式,以及能安装多种不同的 Wine 以测试效果,能极大提升适配效率。</p>
<p>且对于 Deepin23 用户做了特别优化,以便能在缺少 i386 运行库的情况下运行 Wine32。同时也为非 X86 架构用户提供了 Box86/64、Qemu User 的安装方式</p>
一个图形化了如下命令的程序(最简单格式) <pre>""")
<code>env WINEPREFIX=容器路径 winewine的路径 可执行文件路径</code>
让你可以简易方便的使用 wine""")
about = f'''<style> about = f'''<style>
a:link, a:active {{ a:link, a:active {{
text-decoration: none; text-decoration: none;
@@ -2545,6 +2576,7 @@ a:link, a:active {{
安装包构建时间:{information['Time']} 安装包构建时间:{information['Time']}
Qt 版本:{QtCore.qVersion()} Qt 版本:{QtCore.qVersion()}
程序官网:{programUrl} 程序官网:{programUrl}
<b>Wine 运行器 QQ 交流群762985460</b>
当前程序占用体积:@programSize@MB</pre> 当前程序占用体积:@programSize@MB</pre>
<p>本程序依照 GPLV3 协议开源</p> <p>本程序依照 GPLV3 协议开源</p>
<hr> <hr>
@@ -2600,6 +2632,7 @@ except:
# Qt 窗口 # Qt 窗口
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow() window = QtWidgets.QMainWindow()
defaultFont = app.font()
window.setWindowTitle(title) window.setWindowTitle(title)
widget = QtWidgets.QWidget() widget = QtWidgets.QWidget()
window.setCentralWidget(widget) window.setCentralWidget(widget)
@@ -2703,7 +2736,7 @@ button_r_6 = QtWidgets.QPushButton(transla.transe("U", "RegShot"))
button_r_6.clicked.connect(lambda: RunWineProgram(f"{programPath}/RegShot/regshot.exe")) button_r_6.clicked.connect(lambda: RunWineProgram(f"{programPath}/RegShot/regshot.exe"))
programManager.addWidget(button_r_6, 3, 4, 1, 1) programManager.addWidget(button_r_6, 3, 4, 1, 1)
sparkWineSetting = QtWidgets.QPushButton(transla.transe("U", "星火wine配置")) sparkWineSetting = QtWidgets.QPushButton(transla.transe("U", "星火wine配置"))
sparkWineSetting.clicked.connect(lambda: threading.Thread(target=os.system, args=["/opt/durapps/spark-dwine-helper/spark-dwine-helper-settings/settings.sh"]).start()) sparkWineSetting.clicked.connect(lambda: threading.Thread(target=os.system, args=["bash /opt/durapps/spark-dwine-helper/spark-dwine-helper-settings/settings.sh"]).start())
programManager.addWidget(sparkWineSetting, 3, 6, 1, 1) programManager.addWidget(sparkWineSetting, 3, 6, 1, 1)
wineAutoConfig = QtWidgets.QPushButton(transla.transe("U", "自动/手动配置 Wine 容器")) wineAutoConfig = QtWidgets.QPushButton(transla.transe("U", "自动/手动配置 Wine 容器"))
wineAutoConfig.clicked.connect(WineBottonAutoConfig) wineAutoConfig.clicked.connect(WineBottonAutoConfig)
@@ -2762,13 +2795,18 @@ installWineOnDeepin23 = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Funct
installWineOnDeepin23Alpha = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/wine23A.png"), transla.transe("U", "安装 wine(只限Deepin23 Alpha)")) installWineOnDeepin23Alpha = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/wine23A.png"), transla.transe("U", "安装 wine(只限Deepin23 Alpha)"))
installWineHQOrg = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/wine.png"), transla.transe("U", "安装 WineHQ官方源")) installWineHQOrg = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/wine.png"), transla.transe("U", "安装 WineHQ官方源"))
installWineHQ = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/wine.png"), transla.transe("U", "安装 WineHQ国内清华大学镜像源")) installWineHQ = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/wine.png"), transla.transe("U", "安装 WineHQ国内清华大学镜像源"))
installMoreWine = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/more-wine.png"), transla.transe("U", "安装更多 Wine")) installMoreWine = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/more-wine.png"), transla.transe("U", "安装更多 WineWine 下载工具,推荐)"))
downloadChrootBottle = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/CHROOT.png"), transla.transe("U", "下载 Chroot 容器")) downloadChrootBottle = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/CHROOT.png"), transla.transe("U", "下载 Chroot 容器"))
installBox86CN = QtWidgets.QAction(QtGui.QIcon.fromTheme("box"), transla.transe("U", "安装 Box86/Box64国内源")) installBox86CN = QtWidgets.QAction(QtGui.QIcon.fromTheme("box"), transla.transe("U", "安装 Box86/Box64 日构建(国内源)"))
installBox86 = QtWidgets.QAction(QtGui.QIcon.fromTheme("box"), transla.transe("U", "安装 Box86/Box64国外 Github 源)")) installBox86 = QtWidgets.QAction(QtGui.QIcon.fromTheme("box"), transla.transe("U", "安装 Box86/Box64 日构建(国外 Github 源)"))
installBox86Own = QtWidgets.QAction(QtGui.QIcon.fromTheme("box"), transla.transe("U", "安装 Box86/Box64使用自建源支持 riscv64"))
installLat = QtWidgets.QAction(transla.transe("U", "安装 lat只限 Loongarch64 架构)"))
addWineDebMirrorForDeepin20 = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/wine.png"), transla.transe("U", "添加 Wine 运行器源以安装较新版本的 WineHQ支持 Deepin20/Debian10")) addWineDebMirrorForDeepin20 = QtWidgets.QAction(QtGui.QIcon(f"{programPath}/Icon/Function/wine.png"), transla.transe("U", "添加 Wine 运行器源以安装较新版本的 WineHQ支持 Deepin20/Debian10"))
p2 = QtWidgets.QAction(QtGui.QIcon.fromTheme("settings"), transla.transe("U", "设置程序(&S)")) p2 = QtWidgets.QAction(QtGui.QIcon.fromTheme("settings"), transla.transe("U", "设置程序(&S)"))
enabledAll = QtWidgets.QAction(transla.transe("U", "强制启用所有被禁用的组件(不推荐)")) enabledAll = QtWidgets.QAction(transla.transe("U", "强制启用所有被禁用的组件(不推荐)"))
setMiniFont = QtWidgets.QAction(transla.transe("U", "临时设置小字体"))
setTinyFont = QtWidgets.QAction(transla.transe("U", "临时设置很小的字体"))
setDefaultFont = QtWidgets.QAction(transla.transe("U", "临时设置默认字体"))
p3 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(47), transla.transe("U", "清空软件历史记录(&C)")) p3 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(47), transla.transe("U", "清空软件历史记录(&C)"))
cleanCache = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(47), transla.transe("U", "清空软件缓存")) cleanCache = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(47), transla.transe("U", "清空软件缓存"))
cleanProgramUnuse = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(47), transla.transe("U", "删除程序组件")) cleanProgramUnuse = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(47), transla.transe("U", "删除程序组件"))
@@ -2783,6 +2821,12 @@ programmenu.addAction(installMoreWine)
programmenu.addAction(downloadChrootBottle) programmenu.addAction(downloadChrootBottle)
programmenu.addAction(installBox86CN) programmenu.addAction(installBox86CN)
programmenu.addAction(installBox86) programmenu.addAction(installBox86)
programmenu.addAction(installBox86Own)
programmenu.addAction(installLat)
#programmenu.addSeparator()
#programmenu.addAction(setMiniFont)
#programmenu.addAction(setTinyFont)
#programmenu.addAction(setDefaultFont)
programmenu.addSeparator() programmenu.addSeparator()
programmenu.addAction(p2) programmenu.addAction(p2)
programmenu.addAction(enabledAll) programmenu.addAction(enabledAll)
@@ -2792,11 +2836,15 @@ programmenu.addAction(cleanCache)
programmenu.addAction(cleanProgramUnuse) programmenu.addAction(cleanProgramUnuse)
programmenu.addSeparator() programmenu.addSeparator()
programmenu.addAction(p4) programmenu.addAction(p4)
setDefaultFont.triggered.connect(lambda: SetFont(1))
setMiniFont.triggered.connect(lambda: SetFont(1.2))
setTinyFont.triggered.connect(lambda: SetFont(1.6))
p1.triggered.connect(InstallWine) p1.triggered.connect(InstallWine)
installWineOnDeepin23.triggered.connect(InstallWineOnDeepin23) installWineOnDeepin23.triggered.connect(InstallWineOnDeepin23)
installWineOnDeepin23Alpha.triggered.connect(InstallWineOnDeepin23Alpha) installWineOnDeepin23Alpha.triggered.connect(InstallWineOnDeepin23Alpha)
installWineHQ.triggered.connect(InstallWineHQ) installWineHQ.triggered.connect(InstallWineHQ)
installWineHQOrg.triggered.connect(lambda: threading.Thread(target=OpenTerminal, args=[f"{programPath}/InstallNewWineHQOrg.sh"]).start()) installWineHQOrg.triggered.connect(lambda: threading.Thread(target=OpenTerminal, args=[f"{programPath}/InstallNewWineHQOrg.sh"]).start())
installLat.triggered.connect(lambda: threading.Thread(target=OpenTerminal, args=[f"{programPath}/InstallLat.sh"]).start())
addWineDebMirrorForDeepin20.triggered.connect(lambda: threading.Thread(target=OpenTerminal, args=[f"bash '{programPath}/AddWineDebMirrorForDeepin20.sh'"]).start()) addWineDebMirrorForDeepin20.triggered.connect(lambda: threading.Thread(target=OpenTerminal, args=[f"bash '{programPath}/AddWineDebMirrorForDeepin20.sh'"]).start())
def InstallMoreWine(): def InstallMoreWine():
os.system(f"'{programPath}/wine/installwine'") os.system(f"'{programPath}/wine/installwine'")
@@ -2812,8 +2860,9 @@ installMoreWine.triggered.connect(InstallMoreWine)
downloadChrootBottle.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/QemuDownload.py'"]).start()) downloadChrootBottle.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/QemuDownload.py'"]).start())
p2.triggered.connect(ProgramSetting.ShowWindow) p2.triggered.connect(ProgramSetting.ShowWindow)
enabledAll.triggered.connect(lambda: DisableButton(False)) enabledAll.triggered.connect(lambda: DisableButton(False))
installBox86CN.triggered.connect(lambda: OpenTerminal(f"pkexec bash '{programPath}/InstallBox86-cn.sh'")) installBox86CN.triggered.connect(lambda: OpenTerminal(f"sudo bash '{programPath}/InstallBox86-cn.sh'"))
installBox86.triggered.connect(lambda: OpenTerminal(f"pkexec bash '{programPath}/InstallBox86.sh'")) installBox86.triggered.connect(lambda: OpenTerminal(f"sudo bash '{programPath}/InstallBox86.sh'"))
installBox86Own.triggered.connect(lambda: OpenTerminal(f"sudo bash '{programPath}/InstallBox86-own.sh'"))
p3.triggered.connect(CleanProgramHistory) p3.triggered.connect(CleanProgramHistory)
cleanCache.triggered.connect(CleanProgramCache) cleanCache.triggered.connect(CleanProgramCache)
cleanProgramUnuse.triggered.connect(CleanProgram) cleanProgramUnuse.triggered.connect(CleanProgram)
@@ -2888,11 +2937,14 @@ w8 = QtWidgets.QAction(transla.transe("U", "设置 run_v3.sh 的文管为 Deepin
w9 = QtWidgets.QAction(transla.transe("U", "设置 run_v3.sh 的文管为 Wine 默认文管")) w9 = QtWidgets.QAction(transla.transe("U", "设置 run_v3.sh 的文管为 Wine 默认文管"))
w10 = QtWidgets.QAction(transla.transe("U", "重新安装 deepin-wine-helper")) w10 = QtWidgets.QAction(transla.transe("U", "重新安装 deepin-wine-helper"))
w11 = QtWidgets.QAction(QtGui.QIcon.fromTheme("winetricks"), transla.transe("U", "使用winetricks打开指定容器")) w11 = QtWidgets.QAction(QtGui.QIcon.fromTheme("winetricks"), transla.transe("U", "使用winetricks打开指定容器"))
w11WithWineLib = QtWidgets.QAction(QtGui.QIcon.fromTheme("winetricks"), transla.transe("U", "使用winetricks打开指定容器使用Wine运行器运行库"))
w11WithWineLib.setDisabled(True)
settingRunV3Sh.addAction(w8) settingRunV3Sh.addAction(w8)
settingRunV3Sh.addAction(w9) settingRunV3Sh.addAction(w9)
settingRunV3Sh.addAction(w10) settingRunV3Sh.addAction(w10)
wineOption.addSeparator() wineOption.addSeparator()
wineOption.addAction(w11) wineOption.addAction(w11)
#wineOption.addAction(w11WithWineLib)
wineOption.addSeparator() wineOption.addSeparator()
optionCheckDemo = wineOption.addMenu(transla.transe("U", "组件功能测试")) optionCheckDemo = wineOption.addMenu(transla.transe("U", "组件功能测试"))
vbDemo = QtWidgets.QAction(transla.transe("U", "测试 Visual Basic 6 程序")) vbDemo = QtWidgets.QAction(transla.transe("U", "测试 Visual Basic 6 程序"))
@@ -2969,6 +3021,7 @@ w8.triggered.connect(SetDeepinFileDialogDeepin)
w9.triggered.connect(SetDeepinFileDialogDefult) w9.triggered.connect(SetDeepinFileDialogDefult)
w10.triggered.connect(SetDeepinFileDialogRecovery) w10.triggered.connect(SetDeepinFileDialogRecovery)
w11.triggered.connect(lambda: RunWinetricks()) w11.triggered.connect(lambda: RunWinetricks())
w11WithWineLib.triggered.connect(lambda: RunWinetricksWithWineLib())
wm1_1.triggered.connect(lambda: threading.Thread(target=InstallNetFramework).start()) wm1_1.triggered.connect(lambda: threading.Thread(target=InstallNetFramework).start())
wm1_2.triggered.connect(lambda: threading.Thread(target=InstallVisualStudioCPlusPlus).start()) wm1_2.triggered.connect(lambda: threading.Thread(target=InstallVisualStudioCPlusPlus).start())
wm1_8.triggered.connect(lambda: threading.Thread(target=InstallFoxPro).start()) wm1_8.triggered.connect(lambda: threading.Thread(target=InstallFoxPro).start())
@@ -3035,12 +3088,15 @@ safeWebsize = menu.addMenu(transla.transe("U", "云沙箱(&C)"))
s1 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), transla.transe("U", "360 沙箱云")) s1 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), transla.transe("U", "360 沙箱云"))
s2 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), transla.transe("U", "微步云沙箱")) s2 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), transla.transe("U", "微步云沙箱"))
s3 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), transla.transe("U", "VIRUSTOTAL")) s3 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), transla.transe("U", "VIRUSTOTAL"))
s4 = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(9), transla.transe("U", "计算机病毒防御技术国家工程实验室"))
safeWebsize.addAction(s1) safeWebsize.addAction(s1)
safeWebsize.addAction(s2) safeWebsize.addAction(s2)
safeWebsize.addAction(s3) safeWebsize.addAction(s3)
safeWebsize.addAction(s4)
s1.triggered.connect(lambda: webbrowser.open_new_tab("https://ata.360.net/")) s1.triggered.connect(lambda: webbrowser.open_new_tab("https://ata.360.net/"))
s2.triggered.connect(lambda: webbrowser.open_new_tab("https://s.threatbook.cn/")) s2.triggered.connect(lambda: webbrowser.open_new_tab("https://s.threatbook.cn/"))
s3.triggered.connect(lambda: webbrowser.open_new_tab("https://www.virustotal.com/")) s3.triggered.connect(lambda: webbrowser.open_new_tab("https://www.virustotal.com/"))
s4.triggered.connect(lambda: webbrowser.open_new_tab("https://cloud.vdnel.cn/"))
log = menu.addMenu(transla.transe("U", "日志(&L)")) log = menu.addMenu(transla.transe("U", "日志(&L)"))
getDllInfo = QtWidgets.QAction(transla.transe("U", "查询 Dll")) getDllInfo = QtWidgets.QAction(transla.transe("U", "查询 Dll"))
@@ -3095,6 +3151,7 @@ if os.path.exists(f"{programPath}/WineLib/usr"):
installRunnerLib.setDisabled(True) installRunnerLib.setDisabled(True)
removeRunnerLib.setEnabled(True) removeRunnerLib.setEnabled(True)
diyRunnerLib.setEnabled(True) diyRunnerLib.setEnabled(True)
w11WithWineLib.setEnabled(True)
statusRunnerLib.setText("当前状态:已安装") statusRunnerLib.setText("当前状态:已安装")
libPathList = [] libPathList = []
mapLink = [] mapLink = []
@@ -3156,6 +3213,11 @@ if len(qemuBottleList) >= 1:
configMenu.triggered.connect(ConfigQemu) configMenu.triggered.connect(ConfigQemu)
print(qemuBottleList) print(qemuBottleList)
videoHelp = menu.addMenu(transla.transe("U", "视频教程(&V)"))
videoHelpAction = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "视频教程"))
videoHelpAction.triggered.connect(lambda: webbrowser.open_new_tab("https://space.bilibili.com/695814694/channel/collectiondetail?sid=1610353"))
videoHelp.addAction(videoHelpAction)
help = menu.addMenu(transla.transe("U", "帮助(&H)")) help = menu.addMenu(transla.transe("U", "帮助(&H)"))
runStatusWebSize = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "查询程序在 Wine 的运行情况")) runStatusWebSize = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "查询程序在 Wine 的运行情况"))
h1 = help.addMenu(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "程序官网")) h1 = help.addMenu(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "程序官网"))
@@ -3191,10 +3253,7 @@ help.addSeparator()
wikiHelp = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "程序 Wiki")) wikiHelp = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "程序 Wiki"))
help.addAction(wikiHelp) help.addAction(wikiHelp)
videoHelp = help.addMenu(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "视频教程")) videoHelp = help.addMenu(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "视频教程"))
easyHelp = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "简易使用教程")) videoHelp.addAction(videoHelpAction)
buildHelp = QtWidgets.QAction(QtWidgets.QApplication.style().standardIcon(20), transla.transe("U", "打包教程"))
videoHelp.addAction(easyHelp)
videoHelp.addAction(buildHelp)
help.addSeparator() help.addSeparator()
help.addAction(h5) help.addAction(h5)
help.addAction(h6) help.addAction(h6)
@@ -3217,8 +3276,6 @@ h3.triggered.connect(UpdateThings)
wineRunnerHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://bbs.deepin.org/post/246837")) wineRunnerHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://bbs.deepin.org/post/246837"))
h4.triggered.connect(ThankWindow) h4.triggered.connect(ThankWindow)
wikiHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io/wine-runner-wiki")) wikiHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io/wine-runner-wiki"))
easyHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://www.bilibili.com/video/BV1ma411972Y"))
buildHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://www.bilibili.com/video/BV1EU4y1k7zr"))
h5.triggered.connect(UpdateWindow.ShowWindow) h5.triggered.connect(UpdateWindow.ShowWindow)
h6.triggered.connect(WineRunnerBugUpload) h6.triggered.connect(WineRunnerBugUpload)
fenUpload.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"python3 '{programPath}/ProgramFen.py'"]).start()) fenUpload.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"python3 '{programPath}/ProgramFen.py'"]).start())
@@ -3280,7 +3337,7 @@ if o1.currentText() == "":
wine["没有识别到任何Wine请在菜单栏“程序”安装Wine或安装任意Wine应用"] = "没有识别到任何Wine请在菜单栏“程序”安装Wine或安装任意Wine应用" wine["没有识别到任何Wine请在菜单栏“程序”安装Wine或安装任意Wine应用"] = "没有识别到任何Wine请在菜单栏“程序”安装Wine或安装任意Wine应用"
canUseWine.append("没有识别到任何Wine请在菜单栏“程序”安装Wine或安装任意Wine应用") canUseWine.append("没有识别到任何Wine请在菜单栏“程序”安装Wine或安装任意Wine应用")
o1.addItem("没有识别到任何Wine请在菜单栏“程序”安装Wine或安装任意Wine应用") o1.addItem("没有识别到任何Wine请在菜单栏“程序”安装Wine或安装任意Wine应用")
SetFont(setting["FontSize"])
# Mini 模式 # Mini 模式
# MiniMode(True) # MiniMode(True)
sys.exit(app.exec_()) sys.exit(app.exec_())

View File

@@ -0,0 +1,53 @@
#!/usr/bin/env python3
# 读取设置单独用一个 py 文件
import os
import json
import PyQt5.QtGui as QtGui
# 获取用户主目录
def get_home():
return os.path.expanduser('~')
# 读取文本文档
def readtxt(path):
f = open(path, "r") # 设置文件对象
str = f.read() # 获取内容
f.close() # 关闭文本对象
return str # 返回结果
defultProgramList = {
"Architecture": "Auto",
"Debug": True,
"DefultWine": "deepin-wine6 stable",
"DefultBotton" : get_home() + "/.wine",
"TerminalOpen": False,
"WineOption": "",
"WineBottonDifferent": False,
"CenterWindow": False,
"Theme": "",
"MonoGeckoInstaller": False,
"AutoWine": True,
"RuntimeCache": True,
"MustRead": False,
"BuildByBottleName": False,
"AutoPath": False,
"QemuUnMountHome": False,
"Chinese": True,
"FontSize": 1
}
def SetFont(app):
defaultFont = app.font()
size = setting["FontSize"]
font = QtGui.QFont(defaultFont)
if size == 1:
app.setFont(defaultFont)
return
font.setPixelSize(int(defaultFont.pixelSize() / size))
font.setPointSize(int(defaultFont.pointSize() / size))
app.setFont(font)
try:
setting = json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/WineSetting.json"))
except:
setting = defultProgramList

View File

@@ -2,24 +2,55 @@
if [ "$1" = "remove" ] || [ "$1" = "purge" ];then if [ "$1" = "remove" ] || [ "$1" = "purge" ];then
echo "清理卸载残留" echo "清理卸载残留"
CONTAINER_NAME="@deb_package_name@" BOTTLE_NAME="@public_bottle_name@" #在引号中填写容器名
PACK_NAME="@deb_package_name@" #在引号中填写软件包名
ACTIVEX_NAME="" #activex相关若未使用可不设置
MAKE_AUTOSTART="" #如果先前设置了开机自启则在此处填写1
if [ -z $CONTAINER_NAME ];then
### 以下为功能段,若只用于打包则以下内容可不看,只填写上方即可
make_autostart()
{
for username in $(ls /home)
do
echo /home/$username
if [ -d "/home/$username/.config/autostart" ]
then
rm /home/$username/.config/autostart/$PACK_NAME.desktop
fi
done
}
if [ -n "$MAKE_AUTOSTART" ]; then
make_autostart
fi
if [ -n "$ACTIVEX_NAME" ]; then
rm /usr/lib/mozilla/plugins/libpipelight-$ACTIVEX_NAME.so
fi
if [ -z $BOTTLE_NAME ];then
echo "W: 没有指定容器,跳过清理容器。请手动前往 ~/.deepinwine/ 下删除" echo "W: 没有指定容器,跳过清理容器。请手动前往 ~/.deepinwine/ 下删除"
exit exit
fi fi
if [ -e /opt/deepinwine/tools/kill.sh ];then if [ -e /opt/deepinwine/tools/spark_kill.sh ];then
/opt/deepinwine/tools/kill.sh $CONTAINER_NAME /opt/deepinwine/tools/spark_kill.sh $BOTTLE_NAME
###这里注意,如果没写CONTAINER_NAME,会把QQ杀了 ###这里注意,如果没写BOTTLE_NAME,会把QQ杀了
fi fi
for username in $(ls /home) for username in $(ls /home)
do do
echo /home/$username echo /home/$username
if [ -d /home/$username/.deepinwine/$CONTAINER_NAME ] if [ -d /home/$username/.deepinwine/$BOTTLE_NAME ]
then then
rm -rf /home/$username/.deepinwine/$CONTAINER_NAME rm -rf /home/$username/.deepinwine/$BOTTLE_NAME
fi fi
done done
else else

View File

@@ -1,7 +1,9 @@
{ {
"Version": "3.3.0.1", "Version": "3.5.0",
"Time": "未知", "Time": "未知",
"Thank": [ "Thank": [
"感性 @ёжезийлёзйз 进行 Loongarch 架构的测试(旧世界,远程)",
"感谢 @run@3a4k 提供 3a4000 测试机器(远程)",
"感谢 RacoonGX 的付出与贡献", "感谢 RacoonGX 的付出与贡献",
"感谢 @Amber 编写的《使用wine运行器打包无安装包的软件》https://bbs.deepin.org/post/247720", "感谢 @Amber 编写的《使用wine运行器打包无安装包的软件》https://bbs.deepin.org/post/247720",
"感谢 @豪 提供程序图标", "感谢 @豪 提供程序图标",

Some files were not shown because too many files have changed in this diff Show More