如何将第二台计算机用作额外的监视器(Linux Fedora 24)?

我的目标

我想要使用我运行着Fedora 24的笔记本电脑作为我的台式机的第二个显示器,也是运行着Fedora 24的。


我尝试过的方法以及不太理想之处,或者说:为什么这不是一个重复的问题

Xdmx

在互联网和本网站上进行了搜索后,我发现有很多与this one类似的帖子,它们基本上都包含了相同的几个步骤:

  1. 在两台计算机上安装Xdmx
  2. 使用-X选项从一台计算机上的另一台计算机上进行ssh登录。
  3. 使用以下命令将接收ssh的计算机转换为监视器:
    startx -- /usr/bin/Xdmx :1 +xinerama -display :0.0 -display localhost:10.0 -norender -noglxproxy

这样做首先会使得两台计算机的屏幕变黑几秒钟,然后给我一个长长的错误消息,最后以以下内容结尾:

xinit: XFree86_VT property unexpectedly has 0 items instead of 1
xinit: connection to X server lost

waiting for X server to shut down 
Couldn't get a file descriptor referring to the console

谷歌搜索这个错误会返回2015年7月的这篇博客文章,其中一个用户按照我所做的完全相同的步骤进行操作,只是使用的是Ubuntu而不是Fedora,并且最终得到了和我一样的结果。截至2016年10月,该文章上有六条评论,所有六条评论都声称他们按照相同的步骤操作,并且遇到了相同的错误。

Fedora远程桌面

虽然这使我能够从一台计算机控制另一台计算机,但它要求我在主机计算机上使用图形界面来控制笔记本电脑。为了有效地使用图形界面,它必须占用一个显示器上大量的空间。因此,当我想要使用主机显示器时,我必须将远程桌面切换出去。因此,我实际上并没有获得一个额外的显示器,因为我无法同时使用两个显示器进行两个不同的任务。这更类似于切换工作区,而这是我已经能够做到的。此外,我也无法在屏幕之间移动程序。

Ssh -X

和上述内容一样。是的,我可以控制我的另一台电脑,但是我必须主动使用主机显示器来控制我的笔记本电脑显示器。 Synergy。 这个程序实际上很有效,但它只允许共享鼠标和键盘。无法在显示器之间移动程序,所以它并不完全符合我的要求。而且,作为一个吝啬的大学生,许可费用是20美元。对于这个价格,我可以直接买一个二手显示器,那样我就可以在不同的显示器之间移动程序了。在Fedora的dnf软件仓库中有一个自由开源版本,但那个版本已经过时了。

@fixer1234 第一台电脑是一体机,而第二台是笔记本电脑。所以,两者都没有可拆卸的屏幕。抱歉,我可能应该明确指出重新连接显示器不是一个选项。 - FabulousGlobe
我记得的很多解决方案都是针对Windows的,但也有一堆以前的Linux问题。我只是用"use laptop as monitor is:q linux"作为搜索字符串,得到了86个结果。所以这是一个起点。没有深入挖掘,以下是一些相关内容:http://superuser.com/questions/661385/use-laptop-as-a-remote-display-for-linux(接受的答案指向Fedora参考),http://superuser.com/questions/51031/how-can-i-use-my-laptop-as-a-2nd-monitor,http://superuser.com/questions/143833/how-can-i-use-my-laptops-monitor-as-my-pcs-only-monitor(续) - fixer1234
可能有一些不同的情况,但是理论上是可以适应的吗?在这个超级用户网站上有一个问题:如何将Linux桌面扩展到另一个X窗口显示器? - fixer1234
@fixer1234 嘿,谢谢你的例子,但恐怕我实际上不能使用它们。第一种方法是使用远程桌面来控制另一台电脑。我已经成功实现了这个功能,但它并没有给我提供第二个屏幕,而是让我从主要电脑上控制笔记本电脑。这需要将笔记本电脑的桌面显示在我的电脑上。第二种方法涉及到DMX,似乎在过去几年中神秘地停止工作了。第三种方法再次只是远程控制,对用户来说很好用,因为他没有实际的监视器。第四种方法又是Xdmx。 - FabulousGlobe
@fixer1234 我不想使用远程桌面的原因是它无法提供我所寻求的好处,即能够同时查看两个独立的事物。 - FabulousGlobe
让我们在聊天中继续这次讨论。 - FabulousGlobe
1我的建议如下:(1)使用 xrandr --fb <width>x<height> 来增加桌面电脑的显示区域,以适应两个显示器的组合尺寸;(2)在桌面上启动一个VNC服务器;(3)从笔记本电脑上使用VNC连接到桌面,并设置显示区域,以查看桌面上最右边(在桌面显示器上不可见)的部分。 - agtoever
2个回答

我使用的是Ubuntu 18.10和这个shell工具 https://github.com/mrenrich84/vnc_virtual_display_linker 如果你在Fedora 24上使用x11和x11vnc,可以试试看。 我用它来给我的Android平板做第二个屏幕(你只需要在第二个屏幕设备上安装一个VNC客户端)。 我的电脑的鼠标和键盘也可以在第二个屏幕上使用。

VNC上的虚拟监视器

xdmx 对我也没有效果,但是我通过使用我的自己编写的代码(源自VNC Virtual Display Linker Python代码)和x11vnc成功实现了它。在这个过程中,我遇到了一些问题,但最终成功运行如下所示。

简化说明:

请注意本回答末尾的注释和注意事项。

  1. 定义:"服务器"将是您想要扩展屏幕的计算机,"客户端"将是您想要用作屏幕的计算机(或平板电脑,任何能够部署VNC客户端的设备)。
  2. 所需软件:在服务器上安装x11vncgtf,在客户端上安装VNC客户端。
  3. 您需要知道客户端的屏幕尺寸(我们将称之为:CLIENT_WIDTHCLIENT_HEIGHT),以及服务器的屏幕尺寸(我们将称之为:SERVER_WIDTHSERVER_HEIGHT)。
  4. 在服务器上,在终端中运行gtf CLIENT_WIDTH CLIENT_HEIGHT 60(用相应的值替换CLIENT_WIDTHCLIENT_HEIGHT)。例如,对于gtf CLIENT_WIDTH CLIENT_HEIGHT 60,示例为
# 1384x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 86.62 MHz
Modeline "1384x768_60.00"  86.62  1384 1456 1600 1816  768 769 772 795  -HSync +Vsync
从之前的结果中复制Modeline前面的内容(在本例中为"1384x768_60.00" 86.62 1384 1456 1600 1816 768 769 772 795 -HSync +Vsync),并将其作为参数用于xrandr --newmode命令。例如,在这种情况下,我们需要在服务器上运行xrandr --newmode "1368x768_60.00" 85.86 1368 1440 1584 1800 768 769 772 795 -HSync +Vsync。 在第5步中,我们已经在xrandr中创建了一个新模式,现在我们需要将其添加到虚拟屏幕中,方法如下:xrandr --addmode VIRTUAL1 "1368x768_60.00"(请记住使用您自己新创建的模式名称,即包含引号的值)。 运行x11vnc -usepw -nocursorshape -nocursorpos -noxinerama -solid -repeat -forever -clip CLIENT_WIDTHxCLIENT_HEIGHT+SERVER_WIDTH+0。例如:x11vnc -usepw -nocursorshape -nocursorpos -noxinerama -solid -repeat -forever -clip 1368x768+1920+0。这将在端口5900上创建一个VNC服务器,您可以连接到该服务器。 最后,从您的其他计算机(或任何VNC客户端,推荐使用krdc用于Linux机器)连接到服务器。现在您应该能够享受扩展屏幕了。

注意事项和考虑因素:

  • 在第8步中,使用krdc时建议选择“中等质量”选项,即使您使用的是有线网络:低质量和高质量选项都会产生错误。
  • 我在WiFi网络上尝试过,它可以正常工作,但是在有线网络上更流畅。
  • 在第7步启动VNC服务器时,我遇到了问题,屏幕开始闪烁,无法看清屏幕上的操作。为了解决这个问题,我通过VNC服务器连接(此时扩展屏幕已经工作),打开“显示器”工具(系统自带的工具,可以查看连接的显示器),然后选择“统一输出”,再选择“断开统一输出” (下面是Kubuntu中此选项的示例)。然后一切正常运行。

Unify Outputs


xrandr --addmode VIRTUAL1 "1920x1080_60.00" xrandr: 无法找到输出 "VIRTUAL1"由于许多在线找到的技巧似乎在nvidia上不起作用,您应该添加更多关于您的设置的细节,例如您使用的是哪种图形驱动程序? - undefined

  • 相关问题