当前位置: 首页 > article >正文

LookingGlass使用

背景

Looking Glass 是一款开源应用程序,可以直接使用显卡直通的windows虚拟机。
常见环境是Linux host+windows guest,基本部署结构图:
在这里插入图片描述

编译

git clone --recursive https://github.com/gnif/LookingGlass.git

编译client

mkdir client/build
cd client/build
cmake ../
make

编译后生成looking-glass-client可执行程序。

编译host

mkdir host/build
cd host/build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain-mingw64.cmake ..
make

编译后生成looking-glass-host.exe可执行程序。

安装

host安装:

  1. 安装IVSHMEM设备驱动
  2. 安装Looking Glass服务或者直接拷贝looking-glass-host.exe可执行程序到桌面
    更方便的方法是从https://looking-glass.io/downloads下载最新的安装包安装,后面如果自己有重新编译的话直接替换looking-glass-host.exe即可。

client安装:
无需安装,直接执行looking-glass-client程序即可启动

运行

采用virt-manager工具

  1. 安装 qemu-system、virt-manager
  2. virt-manager新建Windows 10桌面
  3. 添加ivshmem
<shmem name='looking-glass'>
  <model type='ivshmem-plain'/>
  <size unit='M'>32</size>
</shmem>
  1. 取消memballoon
<memballoon model="none"/>
  1. 添加一个virtio的keyboard
<input type='keyboard' bus='virtio'/>
  1. 选择透传的pci设备,主要是显卡

其他需要注意的地方:需要手动设置下cpu的拓扑,默认是4socket,Windows只能认2socket

  1. 启动win10虚拟机
  2. linux端运行client程序连接window使用
    最终的使用效果:
    在这里插入图片描述
    在1080P的分辨率下播放视频,windows虚拟机cpu占用率很低(有物理gpu的加持)。

限制

笔者使用的物理显卡是NVIDIA GTX1060,测试下来发现windows虚拟机必须要连接屏幕或者hdmi欺骗器后looking-glass才能显示画面。

使用场景

本地是linux主机,有核显和独显,依赖windows上吃GPU性能的软件(比如steam游戏),利用looking-glass方案就不需要来回切换系统了,直接Linux上启动windows虚拟机,用客户端连上使用。

总结

looking-glass主要利用了以下几点来实现本地使用windows虚拟机:

  1. qemu ivshmem设备实现host和guest之间的内存共享
  2. 透传显卡带来的guest图形能力提升
  3. spice协议带来的键鼠声音同步

当然,它本质上就是一个桌面屏幕共享工具,网上的方案也很多。

它的优点:

  1. 开源,可定制
  2. 性能不错

它的缺点:

  1. 只能本地部署

参考

https://looking-glass.io/docs/B5.0.1/install/
https://blog.csdn.net/level_code/article/details/123271626


http://www.kler.cn/a/468294.html

相关文章:

  • 文件上传漏洞 (网络安全)
  • 清除数字栈
  • Haskell语言的多线程编程
  • 【网络协议】开放式最短路径优先协议OSPF详解(一)
  • 【踩坑指南2.0 2025最新】Scala中如何在命令行传入参数以运行主函数
  • Redis两种主要的持久化方式是什么?
  • [react+ts] useRef获取自定义组件dom或方法声明
  • Windows 11 上配置VSCode 使用 Git 和 SSH 完整步骤
  • Go语言的 的反射(Reflection)核心知识
  • springboot远程链接Hadoop
  • launch.json传递True值
  • CSS3 框大小
  • Python基于wordcloud库绘制词云图
  • 基于SpringBoot的旅游网站的设计与实现(源码+数据库+文档)
  • 深入探索:将 Elasticsearch 与 Ruby 工具结合使用
  • Postgresql源码(139)vim直接修改postgresql表文件的简单实例
  • 字玩FontPlayer开发笔记3 性能优化 大量canvas渲染卡顿问题
  • CSS——6. 导入样式
  • GraphRAG实践:neo4j试用
  • Xcode 16.1: Warning: unable to build chain to self-signed root for signer
  • 降维算法之PCA(PrincipalComponent Analysis,主成分分析)
  • Python实现一个简单的 HTTP echo 服务器
  • 举例说明AI模型怎么聚类,最后神经网络怎么保存
  • Linux 基础七 内存
  • 自动驾驶控制算法-横纵向控制仿真
  • 【pyqt】(二)基础框架