使用其它设备作为扩展屏幕
假如入你刚好有两台笔记本,或者笔记本和一个大屏的平板。有什么办法把其中一台计算机的屏幕作为另一台计算机使用呢?
调研后,常见的选择是 spacedesk,效果还可以。不过我使用过程中,即使两台笔记本有线连接到路由器,还是遇到了卡顿的情况。因此在考虑是否有其他选择,要是能够有 sunshine+moonlight 那么顺滑就好了,突然一个想法冒入脑海中——是否能用 sunshine 实现扩展屏幕呢?于是尝试起来。
在第一台笔记本上安装好 sunshine 作为服务端。笔记本 CPU 为 i5 1135g7,轻薄本。由于 intel 的编解码都挺强,外加两台笔记本都是千兆网线连接,所以不太担心性能问题。
第二台笔记本安装好 moonlight,连接。结果发现只串流了第一台笔记本的主屏幕,并且是镜像模式。和所想要的效果不一样。我想要的是新增一个屏幕。怀着这理论上应该是可以做到的想法,搜索了 github 的 issue。结果看到有人讨论能否串流多个显示器。确实,我笔记本连接的另一个 27英寸显示器都无法串流。应该有办法切换吧,我这么想着。
讨论中有人提到 sunshine 默认串流主屏幕,可以运行多个 sunshine instance,每个设置串流不同屏幕。这令我突然想到,岂不是可以在第一台笔记本上安装一个虚拟屏幕,第二台笔记本串流这个虚拟屏幕就可以达到扩展的效果了?
结果非常 Amazing 啊,居然真的就 work 了,效果非常丝滑。甚至我觉得比 spacedesk 的效果还要好,毕竟画面的码率都可以调整。
此文主要记录下这个 usecase,并简单记录配置方法。
Spacedesk¶
说到将平板作为笔记本扩展屏幕,我最早知道的是 spacedesk 这个软件,当时它还是 beta 版本,但是能用,不过对网络要求非常高,偶尔会卡顿。
它自己官网的介绍
spacedesk software turns mobile devices, laptops and desktops into an additional extension display monitor for Windows machines. Windows can smoothly be moved to and from other connected monitors.
确实有很多功能
- wifi extension monitor
- screencast,共享屏幕
- touch screen as PC input
- mobile device as audio input
使用 Sunshine + moonlight 扩展屏幕¶
这里在讨论是否可以串流多个屏幕。如果支持动态切换不同屏幕是最好的(Pico 串流、VD 都支持) Run multiple instances for streaming different displays · Issue #59 · loki-47-6F-64/sunshine (github.com)
评论区找到一个解决办法是运行多个 instance,每个配置使用不同端口,每个 instance 配置串流不同屏幕,然后使用不同客户端连接即可 - https://github.com/loki-47-6F-64/sunshine/issues/59#issuecomment-1709018824
一个很好的使用场景,是在 AVP 等 VR 头显中串流多个虚拟屏幕 Dual screens by using Sunshine + Moonlight : r/VisionPro (reddit.com)
安装虚拟显示器¶
- 最早使用的,有一个控制程序控制是否启用虚拟显示器。但是有点蠢的是自启动后,每次需要点两下才能开启显示器(那我自启动的意义是什么):KtzeAbyss/Easy-Virtual-Display: Effortlessly create virtual displays in Windows, capable of supporting various resolutions and refresh rates, suitable for remote control or graphics card spoofing.在win中轻松创建支持多种分辨率和刷新率的虚拟显示器,可用于远程控制或显卡欺骗。 (github.com)
- star 数更多,直接在设备管理器中安装卸载驱动。貌似不会有自启动问题:itsmikethetech/Virtual-Display-Driver: Add virtual monitors to your windows 10/11 device! Works with VR, OBS, Sunshine, and/or any desktop sharing software. (github.com)
指定 Display¶
display 并不默认就是 1,2,3 顺序编号的。比我我的就设置成了,需要使用 sunshine 安装目录中的 tools\dxgi-info.exe
检测。
Manually specify a display to use for capture. If unset, the primary display is captured. Note: If you specified a GPU above, this display must be connected to that GPU. The appropriate values can be found using the following command:
tools\dxgi-info.exe
D:\Program\Play\Sunshine>tools\dxgi-info.exe
====== ADAPTER =====
Device Name : Intel(R) Iris(R) Xe Graphics
Device Vendor ID : 0x00008086
Device Device ID : 0x00009A49
Device Video Mem : 128 MiB
Device Sys Mem : 0 MiB
Share Sys Mem : 8089 MiB
====== OUTPUT ======
Output Name : \\.\DISPLAY1
AttachedToDesktop : yes
Resolution : 2256x1504
Output Name : \\.\DISPLAY2
AttachedToDesktop : yes
Resolution : 1920x1080
Output Name : \\.\DISPLAY21
AttachedToDesktop : yes
Resolution : 1920x1080
====== ADAPTER =====
Device Name : Intel(R) Iris(R) Xe Graphics
Device Vendor ID : 0x00008086
Device Device ID : 0x00009A49
Device Video Mem : 128 MiB
Device Sys Mem : 0 MiB
Share Sys Mem : 8089 MiB
====== OUTPUT ======
====== ADAPTER =====
Device Name : Intel(R) Iris(R) Xe Graphics
Device Vendor ID : 0x00008086
Device Device ID : 0x00009A49
Device Video Mem : 128 MiB
Device Sys Mem : 0 MiB
Share Sys Mem : 8089 MiB
====== OUTPUT ======
====== ADAPTER =====
Device Name : Microsoft Basic Render Driver
Device Vendor ID : 0x00001414
Device Device ID : 0x0000008C
Device Video Mem : 0 MiB
Device Sys Mem : 0 MiB
Share Sys Mem : 8089 MiB
====== OUTPUT ======
关于键鼠输入¶
刚开始我还使用了 barrier 这个软件,用于在两个笔记本间共享鼠标,但是其实是不需要的。第二台笔记本只用于显示,因此使用鼠标的计算都是在 host 上计算输出的,因此直接使用第一台笔记本的键鼠,就自动工作了。
测试发现第二台笔记本的鼠标被限制在了串流的屏幕区域,但是移动到屏幕边缘时,能在其它屏幕看到。因此感觉只是一个软件限制。
是否能够支持不限制区域,从而支持使用平板等触屏设备作为第一台笔记本输入?