escrcpy 虚拟显示屏(Virtual Display)完全指南:--new-display 系列参数解析与实战 escrcpy 虚拟显示屏Virtual Display完全指南--new-display 系列参数解析与实战【免费下载链接】escrcpy Display and control your Android device graphically with scrcpy.项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy虚拟显示屏Virtual Display是 scrcpy 提供的核心能力之一它允许你在 Android 设备上创建一块与主屏幕完全独立的虚拟屏幕并将设备上的应用投射到这块屏幕上进行镜像与控制。escrcpy 作为基于 scrcpy 的图形化客户端在其启动应用功能中完整集成了--new-display、--display-ime-policy、--no-vd-destroy-content等系列参数。本文以 docs/en/reference/scrcpy/virtual_display.md 为主线结合 escrcpy 的源码实现系统讲解虚拟显示屏的创建、应用启动、系统装饰控制、销毁策略与输入法策略帮助你掌握这套参数的完整用法与底层原理。一、虚拟显示屏是什么普通模式下scrcpy 镜像的是设备的主屏幕display 0。而虚拟显示屏Virtual Display则是通过 scrcpy 在设备端动态创建的一块全新屏幕它可以拥有独立的尺寸、分辨率和像素密度dpi与主屏幕互不影响。这一特性最典型的应用场景包括启动第二个实例在镜像主屏幕的同时另开一块虚拟屏运行其他应用多任务并行将不同应用分别投射到不同的虚拟屏上互不干扰演示与录屏在固定分辨率如 1920×1080的虚拟屏上运行应用保证输出画面规格统一替代启动器部分设备支持在虚拟屏内运行启动器Launcher形成独立的桌面环境。在 escrcpy 中该功能集中体现在启动应用Launch模块中。你可以在desktop的控制栏 launch/index.vue 看到对应的入口选择应用后会调用useStartApp而useStartApp默认会以新建虚拟显示屏的方式启动应用详见下文源码分析。二、新建虚拟显示屏--new-display2.1 基础用法要新建一块虚拟显示屏来替代镜像设备屏幕使用--new-display参数scrcpy --new-display1920x1080 scrcpy --new-display1920x1080/420 # 强制设为 420 dpi scrcpy --new-display # 使用主屏幕尺寸和像素密度 scrcpy --new-display/240 # 使用主屏幕尺寸和 240 dpi参数格式为--new-display宽x高/dpi其中写法含义--new-display1920x1080新建 1920×1080 的虚拟屏dpi 沿用默认值--new-display1920x1080/420新建 1920×1080、420 dpi 的虚拟屏--new-display不带值使用主屏幕的尺寸和密度--new-display/240使用主屏幕尺寸但密度强制为 240 dpi重要行为虚拟显示屏会在 scrcpy 程序退出时被销毁属于临时资源不会在设备上留下任何残留这也符合 scrcpy非侵入式的设计理念。2.2 escrcpy 中的尺寸/密度解析实现escrcpy 在 display/index.js 中实现了对宽x高/dpi格式的解析与序列化parse(input)使用正则^\\s*(\\d...)x×(?:/...)?$解析宽、高与可选密度宽高支持x或×分隔符三个数值都必须为正数否则返回nullstringify(options)将{ width, height, density, landscape }对象重新拼装为宽x高/dpi字符串。特别地当landscape为true时自动将宽高调整为宽 ≥ 高的横屏比例为false时则保持宽 ≤ 高的竖屏比例。该工具函数被启动链路复用useStartApp在解析用户配置中的--new-display值后会先parse再结合横竖屏标记重新stringify从而保证无论用户输入什么方向都能生成正确的虚拟屏规格。2.3 escrcpy 内置的虚拟屏规格库escrcpy 在偏好设置中内置了大量开箱即用的虚拟屏规格见 models/preference/launch/index.js 中newDisplay的options涵盖桌面、Mac、超宽屏、iPad、iPhone、三星、Pixel、Surface、折叠屏等类别例如Desktop1280x720/160、1920x1080/160、2560x1440/160、3840x2160/160、5120x2880/320、7680x4320/320等Mac2560x1664/224MacBook Air 13、3024x1964/254MacBook Pro 14、6016x3384/218Pro Display XDR 32等Ultrawide2560x1080/160、3440x1440/160、5120x2160/160等iPhone1334x750/326iPhone SE、2532x1170/460iPhone 12 Pro、2868x1320/460iPhone 17 Pro Max等Samsung1440x2960/529Galaxy S8、1080x2400/405Galaxy A51/71等。同时该偏好项还支持自定义格式占位符提示为Device Size, Format: 1920x1080/420, 1920x1080, /240与命令行参数的三种写法完全对应。该偏好项的提示语tips明确指出用于调整虚拟显示屏的尺寸与分辨率启动应用依赖此选项。三、在虚拟显示屏中启动应用--start-app3.1 为什么需要手动启动应用部分设备会在虚拟显示屏中自带启动器Launcher此时虚拟屏会自动呈现一个可用桌面。但更多设备不会在虚拟屏中提供启动器此时虚拟屏是空白的你必须手动启动一个 Android 应用虚拟屏才会产生可镜像的内容。3.2 组合用法scrcpy --new-display1920x1080 --start-apporg.videolan.vlc这条命令创建一块 1920×1080 的虚拟屏并直接在其中启动 VLC 播放器。--start-app的详细语法如强制停止前缀、?按名称匹配、?组合用法可参考 device.md。应用本身也可以是启动器。例如用开源项目 Fossify Launcher 在虚拟屏中构建一个干净的桌面环境scrcpy --new-display1920x1080 --no-vd-system-decorations --start-apporg.fossify.home注意此处搭配了--no-vd-system-decorationsFossify Launcher 自带桌面 UI若再叠加系统装饰会出现界面冲突因此需要显式关闭系统装饰。3.3 escrcpy 的启动链路源码分析escrcpy 的启动应用功能由 use-start-app/index.js 驱动其核心逻辑如下resolveScrcpyRuntime中若shouldCreateNewDisplay为真默认会从偏好配置中读取--new-display值并拼接commands newDisplay ? --new-display${newDisplay} : --new-display即配置了具体规格就带上规格否则退化为裸参数--new-display沿用主屏规格。相关逻辑见 middleware/scrcpy/index.js 的launch函数。若配置了packageName继续追加--start-app${packageName}。最终由createMirrorProcess拼装完整命令并交给sheller执行等价于scrcpy --serial设备号 --window-title标题 --new-display1920x1080 --start-apporg.videolan.vlc就绪判定当使用虚拟屏启动时主进程通过正则/New display:.?\(id(\d)\)/i匹配 scrcpy 输出从中解析出新建虚拟屏的 display id并返回给渲染进程见 middleware/scrcpy/index.js 中的readyPattern与getReadyValue。若在创建虚拟屏之前进程退出则会抛出 scrcpy exited before new display was created 错误。对于多用户secondary user场景escrcpy 会先通过虚拟屏启动 scrcpy 拿到displayId再执行am start-activity --user uid --display displayId -n component将应用引导到该虚拟屏上见openSecondaryUserApp。在 escrcpy 界面上应用选择器还提供了在主屏幕启动onMainStartClick的快捷入口它会显式传入useNewDisplay: false以绕过虚拟屏、直接在主屏幕上启动应用见 launch/index.vue。四、系统装饰--no-vd-system-decorations4.1 参数作用默认情况下虚拟显示屏的系统装饰System Decorations是启用的——也就是虚拟屏会带有系统默认的标题栏/装饰 UI。但某些设备上这套装饰可能渲染异常出现破碎的 UI或者你希望禁用虚拟屏中默认的启动器界面此时可用scrcpy --new-display --no-vd-system-decorations4.2 注意事项关闭系统装饰后虚拟屏将退回空白画布模式必须配合--start-app启动应用才有画面关键限制如果关闭装饰后没有启动任何应用虚拟屏不会渲染任何内容scrcpy 将完全不会产生视频帧。因此使用--no-vd-system-decorations时务必同时指定要启动的应用。在 escrcpy 的 Fossify Launcher 示例中--no-vd-system-decorations与--start-app正是成对出现的原因即在于此。五、关闭时销毁策略--no-vd-destroy-content默认行为下当虚拟显示屏被关闭例如退出 scrcpy 或关闭镜像窗口时运行在虚拟屏中的应用会被一并销毁。若希望在关闭虚拟屏时把应用迁移到主显示屏继续运行而不是销毁使用scrcpy --new-display --no-vd-destroy-content也就是说参数关闭虚拟屏时的行为默认不加参数销毁虚拟屏中正在运行的应用--no-vd-destroy-content保留应用内容将其转移至主显示屏escrcpy 将这一选项开放为偏好设置项noVdDestroyContent对应 models/preference/launch/index.js类型为 Switch并在界面提示中补充了一条重要警告在桌面模式下启用此功能可能导致 UI 渲染问题Enabling this in desktop mode may cause UI rendering issues见 en-US.json 中preferences.launch.noVdDestroyContent.tips。原因是虚拟屏应用通常按虚拟屏尺寸进行布局迁移到主屏后布局可能错位。因此在桌面/镜像场景下建议保持默认的销毁行为。六、输入法策略--display-ime-policy6.1 参数作用默认情况下虚拟显示屏上的输入法IME软键盘会显示在设备的默认显示屏上。这在纯镜像场景下通常没有问题但如果你希望在本地当前镜像的显示屏上弹出输入法则需要指定scrcpy --display-id1 --display-ime-policylocal scrcpy --new-display --display-ime-policylocal第一行适用于已有多个显示屏、通过--display-id选择镜像目标的情况第二行适用于新建虚拟屏的情况。6.2 escrcpy 中的默认值与版本限制在 escrcpy 中displayImePolicy偏好项的默认值即为local见 models/preference/launch/index.jsvalue: local即 escrcpy 默认让输入法跟随当前活动显示屏以规避虚拟屏中的输入法显示问题。同时界面对该选项标注了版本兼容性警告此功能仅支持 scrcpy v3.2 及以上版本在低版本中使用将导致错误见 en-US.json 中preferences.launch.displayImePolicy.tips。因此在使用该参数前请确认你安装的 scrcpy 版本 ≥ 3.2本仓库文档 index.md 标注的基准版本即为 v3.2。七、相关参数与偏好配置总览将虚拟显示屏相关参数与 escrcpy 偏好项汇总如下scrcpy 参数escrcpy 偏好项类型默认值说明--new-display宽x高[/dpi]newDisplaySelect含自定义未设置新建虚拟屏支持内置规格库与自定义格式--start-app包名启动应用时自动追加——在虚拟屏中启动应用--no-vd-system-decorations——关闭默认启用装饰禁用虚拟屏系统装饰--no-vd-destroy-contentnoVdDestroyContentSwitch关闭关闭虚拟屏时保留/迁移应用而非销毁--display-ime-policylocaldisplayImePolicySelectlocal输入法跟随当前显示屏需 scrcpy ≥ 3.2八、实战组合示例以下是一些可直接落地的组合命令1. 在 1920×1080 虚拟屏中运行 VLC 播放视频scrcpy --new-display1920x1080 --start-apporg.videolan.vlc2. 用 Fossify Launcher 构建独立桌面环境scrcpy --new-display1920x1080 --no-vd-system-decorations --start-apporg.fossify.home3. 关闭虚拟屏时保留应用迁移至主屏scrcpy --new-display --no-vd-destroy-content --start-apporg.videolan.vlc4. 在虚拟屏中使用本地输入法scrcpy --new-display --display-ime-policylocal --start-apporg.mozilla.firefox在 escrcpy 图形界面中你无需手工拼写这些命令进入偏好设置 → 启动Launch区域配置虚拟显示屏Virtual Display规格、输入法显示策略Input Method Display Policy与关闭时保留内容Preserve Content on Destroy开关再通过控制栏的应用选择器选择应用即可escrcpy 会自动完成--new-display、--start-app与设备串号的拼接具体实现见 middleware/scrcpy/index.js。九、小结虚拟显示屏是 scrcpy 在设备主屏之外开辟的第二屏幕配合--start-app可以实现独立的应用运行与镜像--no-vd-system-decorations控制装饰与启动器 UI--no-vd-destroy-content决定关闭时的内容去留--display-ime-policy解决虚拟屏输入法显示位置问题。escrcpy 不仅在偏好设置中内置了覆盖主流设备的虚拟屏规格库还在启动链路中实现了 display id 的解析回传与多用户场景的二次引导让这套命令行能力以图形化的方式开箱即用。需要深入源码的读者可继续阅读 use-start-app/index.js 与 middleware/scrcpy/index.js并结合 虚拟屏参数速查文档 与 设备与应用启动文档 对照验证。【免费下载链接】escrcpy Display and control your Android device graphically with scrcpy.项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考