我需要在一个物理显示器上创建镜像假显示。我安装了fakexrandr现在我的笔记本电脑的 1366x768(最大/首选)显示器上有两个假显示器(683x768)。
当我运行xrandr --output eDP1~1 --same-as eDP1 --verbose
命令时出现此错误:
* 也xrandr --fb 683x768
打印同样的错误。
菲利普·伯恩特(所有者/创建者fakexrandr) 说“实际应用任何设置都取决于图形驱动程序。”这个问题。但这对我来说不是一个令人满意的答案。
为了追踪这个问题,我在两个物理显示器上记录了输出xrandr --verbose
。你可以关注提交这个存储库查看 输出的行为xrandr --verbose
。
- 完成此操作后,我意识到
xrandr --output eDP1~1 --same-as eDP1
命令正在尝试分配current 683x768
给Screen 0:
。但我的笔记本电脑上的图形驱动程序或物理显示器没有683x768
输出选项/支持。也许这可能是问题所在。(我不确定这段话的准确性,也许它完全是错误的。)
总而言之:屏幕截图中此错误的实际原因是什么?此问题的解决方法是什么?
答案1
RandR 是 X11 服务器的扩展,用于在服务器客户端(= 应用程序)和图形驱动程序之间传达输出配置。大多数应用程序实际上并不使用该协议,而是使用一个名为的库libXrandR
。FakeXRandR 用一个仍然向图形驱动程序询问配置的库替换了这个库,但随后修改结果以欺骗应用程序,让它们相信存在的配置与实际完全不同。由于如果有人试图更改其中一个虚假输出,这必然会导致错误,因此它会尝试通过将虚假输出上的任何配置请求替换为对原始物理输出的更改请求来缓解最严重的问题。但是,如果您尝试应用仅存在于虚假输出上的分辨率,这些方法当然仍会失败。
一个很好的类比可能是这样的情况:你有一辆相当老旧的汽车,时速可以达到 50 公里。现在你想在一条要求时速达到 100 公里的街道上行驶。FakeXRandR 寻求的解决方案是替换转速表上的数字,这样当你实际行驶速度为 50 公里时,指针现在显示 180 公里。如果你在交通管制处被拦下,你可以说“看,警官,我的车速表显示我可以开到 180 公里,所以我没问题”,他可能会接受这一点。但实际上你仍然不能开得更快,因为要做到这一点,你必须更换发动机,而不是仪表板上的一些印刷数字。
总结:FakeXRandR 不适合用来完成您的任务。
如果您确实需要在 RandR 级别执行此操作,则必须修补图形驱动程序,包括 X11 和内核代码。我在另一份关于 FakeXRandr 的错误报告中写了一些关于在哪里可以找到的信息。如果您只想让屏幕的右半部分镜像左半部分,那么一个更简单的解决方案是使用高级合成窗口管理器,例如康比兹。合成管理器在应用程序窗口和您实际看到的内容之间添加了一个重定向层。在这种情况下,这允许它们绘制每个窗口两次,首先在输出的左侧,然后在右侧;这将有效地克隆您的输出。已经有一个可用于此的插件(安装所有 compiz 包,尤其是compizconfig-设置管理器、ccsm,然后搜索您需要的内容),或者至少应该能够编写一个不需要太多努力就能完成您需要的操作。