我希望设置一台运行 Debian Linux 的无头工作站机器。我想在另一台机器上运行 XServer。想想瘦客户端,虽然“瘦客户端”机器实际上相当强大。在最大程度上,我希望瘦客户端机器感觉就像我在本地做所有事情,而实际上将所有文件(除了配置、缓存和可能的 ssh 私钥,我想)存储在远程工作站上,并在远程工作站上进行所有 CPU 处理。两台计算机连接到 LAN。
因此,瘦客户端用于键盘输入、鼠标输入和显示 GUI。其他一切(桌面管理器、所有软件、所有处理)都在工作站上。
我该如何实现这一点?VNC 并不合适,因为它要求(或似乎要求)我在工作站上本地登录,然后远程回显桌面。我可以使用 ssh,但这要求我在瘦客户端计算机上运行完整的桌面环境,但我真的希望在那里尽可能少地运行。
我不需要有人指导,只是不确定我有什么选择。这显然是可能的,我们在 90 年代初期就这样做过,只是我不知道怎么做。瘦客户端拥有足够的硬盘空间、足够的 CPU 能力和 32GB 的 RAM,只是工作站更强大。而且控制得更好。但放在壁橱里,没有显示器。
答案1
在客户端上,您需要足够的操作系统来启动、加载库、管理本地视频/键盘/鼠标以及运行 X 服务器。在远程无头机上,按常规方式安装所需的任何程序,并在其上配置欢迎程序(gdm、kdm、mdm、xdm 是典型的选择,具体取决于桌面环境等),以允许通过 XDMCP 协议进行查询。完成后,在本地客户端上启动 X 服务器并告诉它查询远程主机上的欢迎程序。应用程序从远程主机运行,用户交互在本地客户端上进行。
您甚至可以在本地机器上运行完整的操作系统,当您需要远程的某些东西时,您可以使用Xnest
在当前 X 服务器中嵌套第二个 X 服务器,查询远程主机,并将第二个桌面作为应用程序运行,就像 VNC 的工作方式一样。
答案2
您的问题提出了许多概念,其详细讨论需要一本书以上的篇幅(...因为大多数“概念”起源于 XWindow 的早期并发展到现在...)。
因此,我不想因为要向你提供详细的答案而显得疯狂。
尽管如此,我将通过触及一些您在 Unix/Linux/XWindows 系统下进行应用程序远程处理时应该清楚记住的要点来解决这个问题:
这 ”X 窗口系统“是几乎所有显示某种 GUI 的 Linux 应用程序的基础。在邀请您自己检查详细信息(您可以搜索超过 30 年的历史)的同时,我想强调一个非常重要的点:根据设计,X11 的架构使得每个应用程序都可以在一台主机上运行,同时在另一台完全不同的主机上呈现(就 GUI 而言). 这无需程序员付出任何明确的努力。
这与人们在 Win32 平台下习惯的做法截然不同,几十年前人们就在 Win32 平台下只添加了一个显式层(RDP 和相关的终端服务)来提供类似的行为(但在 Win 3.XX、Windows 95、Windows 98、Windows NT 以及可能在更高版本的系统中肯定缺失了。更不用说许可问题了……)
所以这意味着——一般来说——在 90 年代初期,你可以坐在一台X-终端并让它显示您在另一台服务器上运行的应用程序。这正是您在 OP 中指出的解耦。
所以,回到你的问题,你当然可以在你电脑里的大型机上运行你的 X11 应用程序,并在其他地方呈现它的 GUI。
这够了吗?不幸的是还不够……让我来解释一下原因:
“远程应用程序“ 对比 ”远程桌面“:有时在我的桌面上(我指的是笔记本电脑显示器上显示的图形内容,我正在运行完整的 Ubuntu 桌面)显示正在其他地方运行的应用程序的 GUI 就足够了。例如,我有普通的桌面,但是……“firefox”窗口与在另一台机器上运行的“firefox”相关。在这种情况下,我正在桌面环境中访问远程应用程序。
其他时候,我更希望远程系统呈现整个桌面,而不是单个应用程序。因此,远程系统需要解决更多问题,因为...还有一些“特殊”窗口(覆盖整个显示器且或多或少没有任何边框的窗口)需要呈现,最重要的是,呈现整个桌面应用程序集(菜单栏、状态栏等)。在这种情况下,我正在访问整个远程桌面。
根据您的问题,不清楚您是否对“远程应用程序”、“远程桌面”或两者感兴趣。
是全部吗?不幸的是,还没有。
- “运输“:很明显,将应用程序逻辑(在服务器机器上运行)与 GUI(在远程显示器上显示)分离意味着需要可靠的网络通信通道。当 X11 开发时,可能我还没有出生(顺便说一句:我 46 岁了!)。没有互联网。也没有“网络连接风险”的概念。因此,X11 协议中绝对没有安全点。因此,如果您坐在 IP 为 的 X-Terminal 前
a.b.c.d
,您只需telnet e.f.g.h
从那里启动类似以下内容的程序:
xclock --display a.b.c.d:0.0
然后 xclock 窗口突然出现。此时,如果你的朋友正坐在终端前y.z.x.w
,而你给他一个root
shell e.f.g.h
,你(从a.b.c.d
)可以简单地:
telnet e.f.g.h
su -
xterm --display y.z.x.w:0.0 &
突然,你的朋友看到了一个 xterm 窗口弹出,具有 root 权限,且无需输入任何密码!
请记住,我们谈论的是 Win32 系统尚不存在的时代。最多也就是 Windows 3.11 时代。
现在快进 20 年。互联网来了。随之而来的是安全问题。突然间,很多人发现在未加密的 X11 会话中,很容易获取“视频”、“鼠标”和“键盘”。
已经实施了几种解决方案(其中很多对我来说仍然很模糊/未知),但迄今为止最好的一个是SSH-X11-转发感谢它,直到现在,在 2017 年,每天当我坐在办公桌前时,我都会:
- 将我的笔记本放在扩展坞上并打开它(在我的桌子的一角);
- 登录我的台式计算机(保持电源开启状态,显示/会话处于“锁定”状态),连接两个 27 英寸的大显示器;
- 从我的桌面
ssh
到我的笔记本;ssh -X [email protected]
- 从结果终端启动
thunderbird &
;
因此,我在笔记本电脑上安装并运行了我的雷鸟(包含所有相关档案),并在更舒适的 2 x 27 英寸显示屏上显示。
尽管 X11 推出已有 30 多年,但仍然不需要任何形式的许可!
就这些了吗?还没有 :-)
X.客户端对阵X-服务器:想想我每天用我的雷鸟做的事情,你应该看到:
thunderbird
是 X-Client在我的笔记本上运行,前面没有人坐着;- 我的Linux 桌面 PC 是 X-server,从客户端接收 X11 流,并在本地显示器上呈现它。
因此,这听起来像是客户端和服务器的角色颠倒了。这正是所谓的“瘦客户端”的情况:它们是不是从网络角度来看,客户端是“服务器”。这就是为什么为了在您的设备上运行远程 X11 应用程序,您需要一个 X-Server:因为您需要一个 X-Server,能够理解来自网络(...来自客户端)的 X11 流并正确呈现结果显示。
在之前的回答中您已经被告知巢,实际上我想补充一下西风: 他们是:
从本地 XServer 的角度来看,标准 X11 应用程序。因此,它们通常在本地显示器上“本地”呈现;
它们是 X-Server,从某种意义上说,它们能够接收远程应用程序(典型的是整个远程桌面)的 X11 流,并在单个窗口内呈现它。
一般来说,没有什么可以阻止您使用机器上已安装的 XServer,而无需 Xephyr 或 Xnest。换句话说,您可能希望使用安装在您自己的 Linux 主机上的 XServer 连接到请求接收整个 X11 桌面流的远程主机。一般来说,它会很简单:
- 退出 X11,返回文本 CLI(无 GUI);
- 只需启动一种:
X -query a.b.c.d
其中a.b.c.d
是主机的 IP 地址,其中 XDMCP 协议已配置并启用(或多或少)。
本站的专家会说我把事情过于简单化了……他们是对的!所以,请将上述方法 ( X -query
) 仅作为进一步调查的依据。
我们讲完了吗?是的...但在讲完之前,我还要补充几点:
协议效率:X11 是 30 多年前开发的,绝对是一种性能不佳的协议:在带宽低于 100Mbps 的情况下使用它,你会遇到很多麻烦(顺便说一句:在我的办公室,我的笔记本电脑和台式机之间有千兆连接)。YMMW,但请在实验时记住这一点(
xclock
当您在远程 VPS 上启动它时,窗口甚至会在 30 秒后出现)。我毫不犹豫地承认,微软的 RDP 在很多年后才出现,对带宽的占用要大得多。从这个角度来看,RDP 确实比 X11 更优越;为了解决第 5 点,多个项目已经做出了很多努力。我认为,主要努力包括:NX和相关的 FreeNX(不幸的是,它实际上似乎是一个失败的项目);
我认为,在当今(2017 年),尝试实现整个桌面的远程化(没有 Xnest 或更好的 Xephyr)比以前复杂得多……而且肯定比仅远程化您需要的应用程序复杂得多。这是因为当前的桌面环境发展到了一个更高的水平……它们在“适应”远程 X11 显示器方面存在很多问题(想想你可以用它制作的惊人动画康普兹类技术,以及实现良好远程渲染的相关要求。此外,还存在 X11 协议固有漏洞所要求的安全问题)。
就这样。
我确实知道我绝对没有回答你的问题:我只希望给你一些关于这个美妙的 X11 世界的真实见解......你会很高兴自己去发现 :-)
答案3
在瘦客户端上启用自动登录。在瘦客户端桌面上设置您选择的远程登录程序的启动应用程序。考虑使用 RDP,它也可以轻松连接到您可能拥有的任何 Windows 服务器。
瘦客户端需要足够的 GUI 来运行 X 服务器或同等服务器。存在专门的、轻量级的、只读的根瘦客户端发行版,如 LTSP。或者只是ssh -X
临时运行远程程序。
请记住,程序是在服务器上运行的。如果用户想要找到文件,他们需要养成保存到网络共享的习惯。此外,如果版本不同或用户选择的主题不同,GUI 看起来可能会有所不同。