Linux桌面作为USB显示器



我一直在考虑我想开发的项目的可行性,但我不知道这是否可行。我想拿一台标准的linux电脑,当另一台电脑通过USB插入时,让它像USB显示器一样工作;也就是说,如果我用标准的USB电缆将笔记本电脑插入其中,我的笔记本电脑操作系统会将其检测为外部监视器,然后我可以将屏幕镜像到它上。第二步是捕获USB的输出,并将其重定向到linux机器的VGA/DVI/HDMI显示端口,就好像它是自己的显示器一样。第一步似乎比第二步更难,但我对Linux驱动程序开发还很陌生。

我的问题是:

1) 你认为这有可能吗?

2) 你知道有做类似事情的项目吗?

不可能,原因很简单:不能将两个USB主机(如计算机)直接插入。虽然不幸的是,有些USB电缆有两个A端,但尝试使用一个连接两台计算机最多不会有任何效果,而且实际上可能会对一台或两台主机造成损坏。

是的,在2021年,由于USB的进步,即USB-C电缆和USB 3.x标准的多功能性(通过这些电缆实现),您现在可以使用USB进行远程PC显示。

来自cabletmatters网站:

许多薄型笔记本电脑除了充电和数据外,还使用USB-C端口连接外部显示器,因为它比VGA和HDMI等旧视频接口更纤薄。

现在这是可能的,而不是通过USB 2.0,主要原因是USB-C电缆本身。旧的USB 2.0电缆(称为USB-A,对于android手机等,称为microUSB)只有四根内部导线。此外,标准本身指定其中2个用于5伏电力传输。这使得我们只有D+和D-信号用于数据传输。更不用说数据传输速率只是现在的一小部分。

USB标准的五个主要速度如下:

USB 1.0: 1.5 Mbps
USB 1.1: 12 Mbps
USB 2.0: 480 Mbps
USB 3.0 and USB 3.1: 5 Gbps
USB 3.2 gen 2: 10 Gbps

快进到USB 3.x环境。虽然USB-C电缆仍然具有上述四个原始信号,但它还提供了额外的5个信号!正如人们可以想象的那样,仅仅由于这一变化,所有的可能性都是存在的。

顺便说一句,如果你对USB3感兴趣,这两篇文章都值得一读。尤其是第一本:它真的是一本优秀的读物。我被它们迷住了,差点忘了我在研究一个问题。:)

编辑:添加只是为了清晰和完整——在上面的问题中,有第二部分,但这在某种程度上已经融入了这个解决方案,因为在提到的设备中,USB外围设备的默认显示端口。换句话说,在这些新设备上,USB实际上取代了OP希望USB模拟的设备。

要用USB将两台机器连接在一起,您需要一根特殊的USB电缆。由于USB识别设备的方式,这并不像背靠背式那么简单。

通常情况下,背面USB电缆实际上有一个网络芯片,使其有效地连接USB以太网以太网USB。

一旦你有了网络链接,你就可以使用类似VNC的东西来镜像屏幕

要让Linux不作为主机,USB芯片必须支持小工具模式。这意味着它是"小工具"而不是主机。Linux完全支持小工具模式。您可以在内核(编译)设置中启用驱动程序。例如,这是Linux在智能手机等设备上的正常工作方式。但你的台式电脑可能没有什么理由拥有支持这一点的芯片组。

但所有这些其实并不重要,因为这样的显示器无论如何都不是通过USB连接的。他们只使用USB-C连接器的电线,就好像它是HDMI/DisplayPort电缆一样。它被称为"备用模式"。其中USB芯片禁用自身,连接被切换到另一个芯片(或SoC模块)。

但所有这些仍然无关紧要,因为您只需使用USB-C到HDMI或-DisplayPort电缆并将其插入HDMI或DisplayPort插座即可
正如您可能已经注意到的,您的电脑没有为传入连接提供这样的连接器。只适用于外向型。

但不用担心,因为您只需使用HDMI或DisplayPort捕获卡或适配器即可
我见过的最便宜的只花了13欧元。

这正是你想要的
并且特别支持显示引导输出和控制台输出,即使没有X运行


另一种解决方案是通过网络共享显示设备。这对于Plan9来说是正常的,它是Unix的继任者,但遗憾的是,它从未走出实验室。它的协议9P在Linux上得到部分支持。但我找不到任何关于如何在9P上共享显示设备节点并使其工作的解释。尤其是加速渲染将是一个问题。将获得BIOS/UEFI/引导消息。但这与VNC没有什么不同。


但是,考虑到人们在发现这个问题时也会像我一样寻找什么,我绝对应该提到scrcpy使用您的电脑作为Android设备的显示器进行连接!它通过adb工作,基本上捕捉设备的屏幕,并通过adb将其流式传输为视频。它甚至可以通过wifi工作,一旦通过USB设置
总的来说,它运行得非常好,我用它来正常使用屏幕坏了的智能手机已经一年多了。电话,视频,一切
只需确保,您确实启用了USB调试,并在屏幕中断前授权您的电脑。^^…请注意,在引脚输入等过程中,scrcpy显示将为黑色。PIN输入仍然有效,所以您只需盲输入即可。不过从来都不是问题。你甚至可以通过scrcpy用电脑键盘输入pin,或者在其他一切都失败的情况下使用adb shell input text $pin。(如果您输入错误,请锁定屏幕,解锁,然后重试。)

当然,没有什么能阻止您将显示输出作为视频流从一台电脑流式传输到另一台电脑。只要你的视频压缩是由GPU之类的硬件加速的,它就不应该很慢。如果它在一部简单的智能手机上运行得非常快,当然不会,就像scrcpy所证明的那样。


所以,是的,只要它不比光旅行快,对我来说,就没有"不可能"这回事。)

最新更新