github上,对电脑虚拟机的辅助项目

一 Bottles:一款可轻松实现 Linux 上运行 Windows 软件的工具。

该项目由python写成,提供了清爽易用的 GUI 界面,用户就算不懂任何编程技巧,也可通过wine,轻而易举地在 Linux 系统上,运行 Windows 的游戏和软件。
地址:github.com/bottlesdevs/Bottles

二 使用 WinApps 在 Linux 桌面上无缝运行 Windows 应用程序

WinApps for Linux 使运行 Windows 应用程序变得容易 https://github.com/Fmstrat/winapps,安装说明在https://nowsci.com/winapps/
这个东东严格来说不算是虚拟机,只是先安装qume/kvm虚拟机,然后在其中安装win10, 或win11后开通远程桌而,这个winapps的作用就是利用linux运程桌面可以运行
qemu/kvm虚拟机中的windows程序,比如excel, ppt,或文件管理器,看起来就象是linux的原生应用一样。

New blink 是一款虚拟机可用来跑静态编译的 x86-64 Linux,它适用于不同的操作系统和硬件架构。它和 qemu-x86_64 实现类似功能,除了 blink 不是一个 4 mb 的二进制而是一个约 158 kb 的小东西之外,在某些基准测试中,比如:gcc 模拟,blink 比 Qemu 更快。由于体积小,作为折中的方案,blink 在系统集成方面不如 Qemu 丰富。
GitHub 地址→github.com/jart/blink

四 winlator 模拟器

winlator模拟器一款可将手机变身成为一部真实的pc,可畅玩各种电脑端游戏,兼容性强大,并且对于手机的性能没有过高的要求

https://github.com/dockur/windows

简介:Docker 容器中的 Windows

六 轻量级虚拟机新宠——Multipass

Multipass的底层技术基于Hypervisor,支持KVM、Hyper-V和VirtualBox等虚拟化技术。这意味着无论你的操作系统是Ubuntu、macOS还是Windows,Multipass都能提供稳定而高效的服务。虽然Multipass在功能上可能不及VMware那样全面,但它在轻量化和易用性上展现出独特优势。VMware拥有强大的虚拟化功能,非常适合企业级环境和生产环境的复杂需求。但如果你的需求倾向于轻量级的开发和测试,Multipass则是一个理想的选择。

七 Docker-OSX — 在Docker中运行macOS

https://github.com/sickcodes/Docker-OSX
Docker-OSX是一个开源项目,而且支持多个版本的MacOS,比如说Catalina、Big Sur等。使用Docker部署Docker-OSX毕竟是运行一个系统,所以硬件上不能太差
Docker-OSX 借助 OSX-KVM 和 OpenCorePkg 在 Docker 容器内创建高度实用的 macOS 环境。该项目支持多个 macOS 版本,包括 Catalina、Big Sur、Monterey 和 Ventura。

还有一个类似的项目,dockur/maco

https://github.com/dockur/macos,也是在docker中运行macos,不过这个macos的版本少一些

八 WebVM https://github.com/leaningtech/webvm

浏览器中的linux虚拟机,2025年5月实际部署,以网页出现404失败。

九 xoureldeen/Vectras-VM-Android

Vectras VM是一款基于QEMU的Android虚拟机应用,支持模拟Windows、macOS、Linux和Android等操作系统。https://github.com/xoureldeen/Vectras-VM-Android

Hexo添加菜单与分类之二

想在hexo增加一个与categories或tags平行的类别,好增加菜单的索引肿么办呢?

以 hipaper 主题为例子,比如增加一个叫”fenlei”的类别与菜单,步骤如下:

1
2
3
hexo new page fenlei # 会生产 source/fenlei/index.md文件
vim source/fenlei/index.md

在source/fenlei/index.md文件头部增加如下内容
layout: “fenlei”
fenlei: “”

在 themes/hipaper/layout目录下增加 fenlei.ejs,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<div class="archives-wrap" style="margin: 0px;">
<div class="row">
<!-- Fenlei 云 -->
<div class="archives-tags-wrap">
<%
// 构建 fenlei 数据(仿照 site.tags 结构)
const fenleiData = {};
site.posts.forEach(post => {
if (post.fenlei) {
const fenleiList = Array.isArray(post.fenlei) ?
post.fenlei :
[post.fenlei];
fenleiList.forEach(f => {
const key = f.toString().trim();
if (key) {
if (!fenleiData[key]) {
fenleiData[key] = [];
}
fenleiData[key].push(post);
}
});
}
});
%>
<% if (Object.keys(fenleiData).length) { %>
<blockquote>
<% Object.keys(fenleiData).sort().forEach(fenlei => { %>
<a href="#<%= fenlei %>"
style="font-size: <%= Math.min(22, 14 + fenleiData[fenlei].length * 2) %>px;">
<%= fenlei %> (<%= fenleiData[fenlei].length %>)
</a>
<% }) %>
</blockquote>
<% } %>
</div>

<!-- Fenlei 文章列表 -->
<% Object.keys(fenleiData).sort().forEach(fenlei => { %>
<div class="archives-wrap">
<div class="archive-year-wrap" id="<%= fenlei %>">
<h1 class="archive-tag"><%= fenlei %></h1>
</div>
<div class="archives">
<% fenleiData[fenlei].sort((a, b) => b.date - a.date).forEach(post => { %>
<%- partial('_partial/archive-post', {post: post, index: true}) %>
<% if (post.subtitle && post.subtitle.length) { %>
<h3 class="post-subtitle">
<%- post.subtitle %>
</h3>
<% } %>
<% }) %>
</div>
</div>
<% }) %>
</div>
</div>

<style>
/* 保持与 tags 相同的样式 */
.archives-tags-wrap a {
margin-right: 15px;
line-height: 2;
display: inline-block;
}
</style>

编辑 themes/hipaper/config.yml文件,增加菜单
menu:
fenlei: fenlei

以后在撰写markdown文件里,文件头要增加 fenlei: “你的内容”

streamlit学习笔记八-----一些特别的插件

一些有用的streamlit插件

1.垂直划块库,
安装pip install streamlit-vertical-slider
网址 https://github.com/sqlinsights/streamlit-vertical-slider
2. 把一些字符串组成各种图案,美化网页用
安装pip install steamlit-wordcloud
网址 https://github.com/rezaho/streamlit-wordcloud
3.登录插件
安装pip install st-login-form
使用说明 https://st-lgn-form.streamlit.app/
4.时间轴插件
安装 pip install streamlit-timeline
说明网址 https://github.com/innerdoc/streamlit-timeline

streamlit学习笔记九-----streamlit新版支持原生多页面二

本文介绍 st.Page 与 st.navigation方法结合,这个方法复杂但灵活,首先推荐

1
2
$ pip install streamlit --upgrade #先升级到最新版 streamlit

假设主页面的文档main_page.py如下:

1
2
3
4
5
6
7
8
import streamlit as st

def page_2():
st.title("页面三测试")

pg = st.navigation([st.Page("test1.py"), st.Page("test2.py"),st.Page(page_2,title="这个页面是个函数") ],position="sidebar")
pg.run()

另两个页而的文件 test1.py与test2.py与main_page.py在同一个目录下,不用另建目录。

  1. 这里先用st.Page声明了页面
    st.Page(
    pages, # 如果是字符串,就是声明的页面目录+文件名; 也可以是本页内定仪的一个函数
    title, # 页面标题,可以不用
    icon, # 页面图标,特殊字符串,也可以不用
    url_path, # 就是页面是一个www.**.时用
    default, # True,则页面不是一个web, 可以不用
    )
  2. 再把st.Page声明的页面传送到st.navigation([st.Page(“test1.py”),st.Page(“test2.py”),st.Page(test_3函数),st.Page(“test4.py”),…..])中,以便在.run时过行。
    st.navigation(
    pages, # 是一个列表或字典
    position, # 没有声明就是=“sidebar”,表示导航在侧边栏中,如果=“hidden”,则隐藏导航栏
    expanded, # False,如果菜单多了,可以折叠; True,不折叠菜单
    )

上面的例了中,pages是一个列表,如果要对页而进行分类,则可以用字典,便如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import streamlit as st

def page_1():
st.title("页面三测试")

def page_2():
st.title("页面四测试")

pages = {
"测试页面": [
st.Page("test2.py", title="这个是测试文件2"),
st.Page("test3.py", title="这个是测试文件3"),
],
"测试函数": [
st.Page(page_2, title="测试函数2"),
st.Page(page_1, title="测试函数1"),
],
}

pg = st.navigation(pages)
pg.run()

winapps笔记

安装完成后,要运行excel,

1
2
3
4
5
$ sudo winapps manual excel
$ sudo winapps manual powerpoint
$ sudo winapps manual "C:\Program Files (x86)\Thunder Network\Thunder\Program\ThunderStart.exe" # 运行讯雷
$ sudo winapps explorer # 执行文件资源管理器,在C:\Windows\System32目录下

KVM虚拟机下的Win11挂载linux下的共享目录方法一

在debian 12下安装好了KVM/qemu虚拟机,并安装好了win10后,发现win10无法访问linux主机下的文件,不象virtualbox下,设置下共享目录就行,如何办呢?

一 在 virt-manager 中设置挂载标签

  1. 首先,确保你的客户虚拟机已关闭。从 virt-manager GUI 中,选择虚拟机并单击“打开(Open)”以调出控制台设置。

  2. 单击工具栏中显示虚拟硬件详细信息的图标。然后单击左侧面板上的“内存(Memory)”。选择选项“启用共享内存(Enable shared memory)”。单击“应用(Apply)”。
    查看XML选项,确保 XML 在 XML 选项卡中显示,如下所示。
    type=”memfd”/>
    mode=”shared”/>

  3. 启用共享内存
    单击底部的“添加硬件(Add hardware)”。

    从添加新硬件窗口的左侧面板中选择“文件系统(Filesystem)”。

    然后在详细信息选项卡中选择 “驱动(Driver)” 为 “virtiofs”。单击“浏览(browse) > 浏览本地(browse local)”并从 Linux 系统中选择主机路径。

    在“目标路径(Target path)”中,输入你想要的任何名称。它只是一个文件标签,将在挂载过程中使用。目标路径中的此名称将作为 Windows 中的驱动器挂载,即资源管理器中的我的电脑。
    为 Windows 添加文件系统挂载
    单击“完成(Finish)”。
    在 virt-manager 主窗口中,右键单击 Windows 虚拟机,然后单击“运行(Run)”启动虚拟机。如果未显示虚拟机,请单击“显示图形控制台”(工具栏中的监视器图标)

  4. 设置 WinFSP – 适用于 Windows 的 FUSE, 确保 Windows 虚拟机(客户机)正在运行。
    首先,我们需要安装 WinFSP(Windows File System Proxy)– FUSE for Windows。这使你能够毫无困难地挂载任何类 UNIX 文件系统。
    从客户 Windows 计算机打开 WinFSP 的 GitHub 页面。
    下载 WinFSP .msi 安装程序。
    在 Windows 虚拟机上安装软件包。安装软件包时请确保选择 “Core”。完成安装。

  5. WinFSP 设置, 创建 VirtIO-FS 服务
    网页进入https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/, 进入stable-virtio文件夹,并下载virtio-win-guest-tools.exe。
    下载完后,点击安装,安装时选择viofs.
    安装完成后,重新启动虚拟机。

  6. 检测安装完成情况。
    重启后,在开始菜单中搜索打开“设备管理器”。
    进入系统设备并查找 “VirtIO FS 设备”。它应该被识别并且驱动程序应该由 Red Hat 签名。
    注意:(可选)如果你看到感叹号,即未检测到驱动程序,请按照 virtio-fs.gitlab.io 说明下载 ISO 文件、安装它并手动检测驱动程序。

  7. 打开开始菜单并搜索“服务”。
    向下滚动找到 “VirtIO-FS Service”。右键单击并单击“开始”启动该服务。
    或者,你可以以管理员身份从 PowerShell/命令提示符运行以下命令来启动服务。

    1
    2
    3
    sc create VirtioFsSvc binpath="C:\Program Files\Virtio-Win\VioFS\virtiofs.exe" start=auto depend="WinFsp.Launcher/VirtioFsDrv" DisplayName="Virtio FS Service"

    sc start VirtioFsSvc
  8. 启动 Virt IO 服务

    服务启动后,打开资源管理器,你应该看到你在上面第一步中创建的挂载标签,该标签应映射为 Z 驱动器。

以上摘抄自 https://www.163.com/dy/article/IA96BL2L0511CPOJ.html

KVM虚拟机启动时显示网络 'default' 未激活”的错误

在使用 KVM 启动虚拟机时,如果遇到“所需操作无效:网络 ‘default’ 未激活”的错误,通常是因为 KVM 的默认虚拟网络(default)没有启动或配置不正确。以下是解决该问题的步骤:

  1. 检查默认网络状态
    首先,检查 default 网络的状态,确认它是否已启动。
    1
    2
    3
    4
    5
    6
    7
    sudo virsh net-list --all

    输出示例:

    名称 状态 自动启动 持久
    --------------------------------------------------
    default 不活跃 yes yes
    如果 default 网络的状态是“不活跃”,则需要启动它。
  2. 启动默认网络

如果 default 网络未启动,可以使用以下命令启动它:

1
sudo virsh net-start default

然后再次检查网络状态,确认它已启动:

1
2
3
4
5
6
7
sudo virsh net-list --all

输出示例:

名称 状态 自动启动 持久
--------------------------------------------------
default 活跃 yes yes
  1. 设置默认网络自动启动

为了确保 default 网络在系统重启后自动启动,可以设置其自动启动属性:

1
sudo virsh net-autostart default
  1. 检查网络配置

如果 default 网络仍然无法启动,可能需要检查其配置文件。默认网络的配置文件通常位于 /etc/libvirt/qemu/networks/default.xml。

你可以使用以下命令查看配置文件:

1
sudo virsh net-dumpxml default

确保配置文件中的设置正确无误。如果有问题,可以尝试重新定义网络:

1
2
sudo virsh net-define /etc/libvirt/qemu/networks/default.xml
sudo virsh net-start default
  1. 重启 libvirtd 服务

如果以上步骤仍然无法解决问题,可以尝试重启 libvirtd 服务:

1
sudo systemctl restart libvirtd