You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript区分树莓派4的双扩展屏幕以渲染不同UI?

区分树莓派4双屏并渲染不同UI的可行方案

1. 基于Web API的屏幕坐标区分法

window.screen.isExtended只能判断是否多屏,但可以利用屏幕的坐标属性区分不同屏幕——双屏扩展模式下,系统会给每个屏幕分配唯一的坐标区域(即使分辨率、尺寸完全相同)。比如主屏幕通常是left:0, top:0,副屏幕会是left:1920, top:0(以1080p为例),可以通过坐标组合作为屏幕标识。

示例代码:

// 获取当前窗口所在屏幕的唯一标识
function getScreenId() {
  return `${screen.left},${screen.top}`;
}

// 根据标识渲染对应UI
const currentScreenId = getScreenId();
if (currentScreenId === '0,0') {
  renderMainUI(); // 主屏幕UI渲染逻辑
} else if (currentScreenId === '1920,0') {
  renderSecondaryUI(); // 副屏幕UI渲染逻辑
}

2. 结合系统EDID信息的唯一标识法

每个显示器的EDID数据包含唯一序列号,可以通过树莓派系统命令读取,再传递给前端作为区分依据:

  • 先安装工具:sudo apt install edid-decode
  • 读取双屏EDID:分别执行edid-decode /sys/class/drm/card0-HDMI-A-1/edid和edid-decode /sys/class/drm/card0-HDMI-A-2/edid,提取输出中的Serial Number字段
  • 后端用Python/Node.js脚本实时检测当前窗口所在屏幕的EDID,通过AJAX或WebSocket传递给前端,前端根据唯一序列号渲染对应UI

3. Electron屏幕API方案(替代Node Webkit)

如果能接受用Electron构建应用,它提供的screen模块可以直接获取屏幕的唯一ID、EDID、坐标等详细信息,无需依赖系统命令:

示例代码:

const { screen } = require('electron');

// 获取所有连接屏幕的信息
const allDisplays = screen.getAllDisplays();

// 监听窗口所在屏幕变化,切换UI
win.on('move', () => {
  const currentDisplay = screen.getDisplayMatching(win.getBounds());
  if (currentDisplay.id === allDisplays[0].id) {
    // 切换主屏幕UI
  } else {
    // 切换副屏幕UI
  }
});

关键注意事项

  • 必须先在树莓派系统设置中把双屏配置为扩展桌面模式,镜像模式下两个屏幕坐标完全一致,无法区分
  • EDID方案需要确保用户权限足够读取/sys/class/drm/下的文件

内容的提问来源于stack exchange,提问作者Matsu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:50:27