RustDesk 如何在无显示器的 Windows 10 机器上使用虚拟显示器驱动?
【免费下载链接】rustdeskAn open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.项目地址: https://gitcode.com/GitHub_Trending/ru/rustdesk
在一台没有接显示器的 Windows 10 机器上部署 RustDesk 被控端时,系统可能检测不到任何显示设备,远端画面无法生成。RustDesk 通过虚拟显示器驱动解决这个问题:基于 Win10 的 Indirect Display Driver Model,使用 RustDeskIddDriver 项目提供的驱动,在没有物理显示器时"插"一块虚拟显示器出来。libs/virtual_display/dylib/README.md 明确说明:虚拟显示器可用于没有显示器的计算机。
本文给出完整操作路径:确认系统版本 → 准备驱动文件 → 安装驱动 → 让 RustDesk 自动挂出 headless 虚拟显示器 → 核对结果。
适用版本与前提
动手前先核对系统是否满足条件,这是文档和源码中明确的硬门槛:
- 源码中 src/virtual_display_manager.rs 的
is_virtual_display_supported()只在 Windows 上生效,且要求is_windows_version_or_greater(10, 0, 19041, 0, 0),即 Windows 10 版本 19041 或更高;其他操作系统一律返回不支持。 - libs/virtual_display/dylib/README.md 列出的已测试平台为 19041 和 19043。
- 同文档注明:Win10 1607 之前的版本不适用这套驱动,README 指向了另一种 indirect_display 实现方法,本文不覆盖该路径。
驱动文件方面,libs/virtual_display/dylib/src/win10/mod.rs 定义了驱动安装路径:
RustDeskIddDriver/RustDeskIddDriver.inflibs/virtual_display/dylib/src/lib.rs 的get_driver_install_abs_path()会把该相对路径拼到可执行文件所在目录之后,并且要求文件实际存在,否则安装会直接失败(报错文本为RustDeskIddDriver/RustDeskIddDriver.inf not exists)。所以安装驱动前,先确认 RustDesk 程序目录下存在这个.inf文件。
另有一条源码注释(见 libs/virtual_display/dylib/src/lib.rs):必须先创建设备、再安装驱动。RustDesk 的主流程已经自动处理了这一步,手动调用时不需要单独执行。
安装驱动
主路径:用 RustDesk 自带的--install-idd参数。src/core_main.rs 中,程序启动时识别该参数后:
- 仅在 Windows 下处理;
- 先检查
is_virtual_display_supported(),不满足版本要求时直接跳过(静默退出,不装); - 满足时调用
rustdesk_idd::install_update_driver(),其内部先create_device(),再执行install_update_driver(),Device is already created的报错会被忽略(设备已创建属正常情况)。
也就是说,在版本合格(19041 及以上)的机器上,带着这个参数运行一次 RustDesk 即可完成驱动安装或更新;版本不达标时命令没有任何可见效果,这正是版本前提重要的原因。
可选分支:用仓库内的示例程序做交互式操作。libs/virtual_display/dylib/examples/idd_controller.rs 是一个 Windows 交互式示例,前置条件是当前工作目录下存在RustDeskIddDriver/RustDeskIddDriver.inf(示例用Path::new(DRIVER_INSTALL_PATH).canonicalize()取当前目录下的绝对路径,取不到会打印Failed to get absolute path of driver install并退出)。运行后按提示键操作:
i:安装或更新驱动u:卸载驱动c/d:创建 / 销毁设备1、2、3:plug in 虚拟显示器 0、1、2(随后设置 1920x1080@60 与 1024x768@60 两档模式)4、5、6:plug out 虚拟显示器 0、1、2x:退出
RustDesk 自动挂出 headless 虚拟显示器
驱动就位后,被控端无需人工干预。src/server/display_service.rs 的try_get_displays_()在每次枚举显示器时做如下处理,条件为:
- RustDesk 平台处于已安装状态(
crate::platform::is_installed()); is_virtual_display_supported()为真(Windows 10 19041 及以上)。
当检测到没有任何显示器时,日志输出(debug 级别):
no displays, create virtual display随后调用virtual_display_manager::plug_in_headless()挂出 headless 虚拟显示器。从 src/virtual_display_manager.rs 看,该路径固定使用 1920x1080@60 的显示模式,并占用虚拟显示器索引 0;索引 1 到 4 保留给远端对端请求(VIRTUAL_DISPLAY_MAX_COUNT = 5)。如果 plug in 失败,日志输出 error 级别:
plug in headless failed <错误信息>headless 的挂/摘由管理器记录索引名配对完成,失败时仅记录Plug out monitor failed日志。
结果验证
验证分两层:
驱动安装结果:示例程序的输出是同步回显(以下为文档示例输出,实际文本会随
GetLastMsg()错误信息变化):Install or update driver begin, <绝对路径> Install or update driver done, reboot is not requiredreboot_required由驱动接口回传,示例如实打印"需要/不需要重启";安装失败时打印驱动返回的错误文本。虚拟显示器生效:示例程序执行 plug in 成功时输出
Plug in monitor done,失败时打印驱动错误信息。而在正式运行中,判断依据是上文no displays, create virtual display这条日志是否出现,以及之后能否正常收到远端画面(display 列表重新枚举后包含新虚拟显示器)。
限制说明
- 19041 以下版本的 Windows 10:
is_virtual_display_supported()返回 false,--install-idd不执行任何动作,自动 headless 路径也不会触发;Win10 1607 之前的机器需要 README 提到的另一套方法。 - 注意 src/virtual_display_manager.rs 顶部的实现开关
IDD_IMPL:当前默认值为amyuni_idd,headless 的自动路由会走该实现;而--install-idd参数固定操作的是rustdesk_idd路径(即 RustDeskIddDriver 驱动)。二者属于源码层面的实现选择,按仓库当前代码为准。 - 仓库中
virtual_display主库(libs/virtual_display/src/lib.rs)通过动态加载dylib_virtual_display.dll调用上述功能,加载失败只会打Failed to load library告警并让相关功能不可用,不会崩溃。
完成上述步骤后,无显示器的 Windows 10 机器上:驱动由--install-idd或示例程序安装,RustDesk 服务在无显示器时自动挂出 1920x1080@60 的 headless 虚拟显示器,被控端画面即可正常提供给远端。
【免费下载链接】rustdeskAn open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.项目地址: https://gitcode.com/GitHub_Trending/ru/rustdesk
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考