Parsec TightVNC 等远程软件连接没有显示器的电脑时黑屏了怎么办?远程办公的时候不想被看到屏幕怎么办,用虚拟显示器来解决问题
1 、 Windows 显示黑屏的缘由
在曾经的 模拟信号 显示时期,主机 和 显示器 之间是通过传递 明度 Y/色差 的方式发送数据的。那时想看电视,需要三根线,分别是 红/蓝/黄 (绿) 对应传输 红绿偏离/蓝绿偏离/色彩明度,传输的数值完全取决于模拟信号的电平高低,而对应 显示器 上则需要经过数学计算转换为 HSL 或 HSB 进而在电视中体现 色相 饱和度 对比度/明度。
在模拟信号时期,因为输出设备的导线是单向直出的,电路并不知道外面有什么设备,只能希望是一个标准的显示器,不管什么时候都是尽可能的提供着信号,希望外接设备用一根导线来保证想需要连接的部分能通讯,所以这时并没有考虑如何检测对端设备,也没有判断对端设备是否符合的条件,于是出现了 VESA DDC1 (VESA Display Data Channel) 用来参照 EDID 协议读取对面显示器的 厂家型号分辨率刷新率 等信息。后来经过多代版本更替,接口虽然变了,但这个协议以及信息读取保留了下来,随着 DVI/HDMI/DP 等数字接口的问世,频率与刷新率的多样化,逐渐普及开来。
这时候有一个一直以来的需求出现了一些变化,那就是休眠。模拟信号时期关掉输出设备后,我们还需要关闭显示器,因为如果不关闭的话,显示器的背光或者阴极射线管始终在通电工作,十分费电且损运行寿命。输出设备能不能告诉显示器该关了,又或者显示器能不能主动请求输出设备停止工作或者发过来信号, EDID 协议表示这都可以,于是此需求友好的推进并实施了
- 对端没有设备 = 不工作
- 对端有设备但不支持 = 不工作
而接下来随着支持 EDID 设备的普及,以及 HDMI/DP 等协议的推广,厂家完全可以实现另外两种情况继续节能环保
- 对端有设备但不符合协议要求 = 不工作
- 对端有设备但接触不良 = 不工作
此时只要两端有一方不能按照 EDID 协议进行握手宣告,那另一方就可以直接不工作了。也就变成了默认黑屏
此时只要 HDMI/DP 不能检测到对方是一个设备,就不提供任何输出信号,进而没有任何显示。
但是无论怎么改,因为 旧 VGA 是模拟信号且不会读取显示器信息,所以为了兼容性 新 VGA 就不可避免的需要一直提供电平输出保障信号传递,也就不可避免的需要一直工作,也就不可避免的 支持 VGA 强制输出。(这点在服务器上有体现,大多数服务器都有 VGA 口,在连接服务器后也就默认有着显示输出)
2 、 Windows 实现虚拟显示器
我们其实有如下的方法实现虚拟显示器
- 显示接口强制输出 VGA(始终尝试在以下对象上进行连接:VGA)
- NVIDIA GRID 的 Virtual Monitoring
- HDMI/DP 显卡欺骗器
- VNC 虚拟显示器
- Windows 间接显示驱动
- 其他实现
Windows 10 1607 以前版本是可以看到所有的显示接口的,所以可以手动选择 始终尝试在以下对象上进行连接:VGA
NVIDIA GRID 只有工程用显卡才支持,消费者级是不可以的。
显卡欺骗器本质就是弄一个写死的数据包假装是一台显示器,但是据厂家陈述对于 CPU 集显 存在兼容问题
VNC 方案具体取决于 软件提供方,比如 UVNC 是支持的 [ 链接 ],而 Tightvnc 是不支持的。
Windows 间接显示驱动,来源 [ 链接 ]
Parsec 新版本已经支持了 Virtual Display ,可以直接登陆进去。
3 、 Amyuni USB Monitor
上面的办法如果觉得不太方便,其实我们可以使用软件的方式来实现
因为在系统层面,显示本质上还是驱动程序进行运算的结果,那么只要有个厂家在写一个含数字签名的驱动时,允许无显示器还能输出信号就好了
Amyuni USB Mobile Monitor 这个厂家就做了一个驱动 [ 链接 ]
按照说明并下载,然后存放到一个目录下,比如本例为 C:\Program Files\usbmmid_v2
存放后进入目录,运行 usbmmidd.bat
即可完成初次配置,或者手动运行下列命令
cd C:\Program Files\usbmmid_v2 deviceinstaller64.exe install usbmmidd.inf usbmmidd
后期使用仅需要运行一条命令即可启用(放进计划任务即可)
C:\Program Files\usbmmid_v2\deviceinstaller64.exe enableidd 1
如果不需要此驱动并想卸载,可以在设备管理器的显示适配器中删除该设备,或者运行下列命令
cd C:\Program Files\usbmmid_v2 deviceinstaller64.exe stop usbmmidd deviceinstaller64.exe remove usbmmid
如果想修改屏幕分辨率,则需要进入注册表修改键值(默认值 @和支持的分辨率值 0-5)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\usbmmIdd\Parameters\Monitors] @="1920,1080" "0"="1024,768" "1"="1366,768" "2"="1600,1200" "3"="1920,1080" "4"="2560,1440" "5"="3840,2160"
4 、其他问题
4.1 、远程后不显示鼠标指针
现象:远程连接后不显示鼠标,但可以移动鼠标并点击屏幕相应区域以及获得反馈
原因:当设备没有任何鼠标输入时,Windows 默认关闭鼠标指针 [ 链接 ]
解决:设置-轻松使用-鼠标-启用鼠标键 (小键盘移动鼠标)
解决:安装触摸板驱动,比如 Wacom