采用 FreeNX 的 NX 服务器

<>

NX 是一个终端机及远程访问的方案,它构建于 NoMachine 的企业级开源科技。亏得那开发于 X 窗口系统上的超卓压缩、灵活性工作阶段、及资源管理技术,再整合 Linux/Unix 世界内强大的分享、打印及音讯功能,NX 令你跨网络连接执行任何图像应用程序时,仿如身处在 CentOS(服务器)计算机面前。

进行连接时,你需要有一台服务器计算机(你将要连接及在其上打开桌面的计算机),与及一台客户端计算机(你将要用来对服务器进行连接的计算机)。

1. 在服务器上安装 NX/FreeNX

现时 EPEL + nux-dextop 软件库内备有供 CentOS 6 用的 NX 和 FreeNX 组件。

首先,同时安装这两个软件库:[root@server ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

[root@server ~]# rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm

要安装稳定版的 NX/FreeNX,请在服务器上执行这个指令:

[root@server ~]# yum install freenx-server nxagent

一些其他的软件包会由于依赖关系而被安装。

注:有时候,有些问题会导致你须要在 NX 服务器上同时安装 No Machine 客户端。如果你遇到问题,例如不能关闭客户端,请下载最新的 No Machine Linux 客户端 RPM (见下面的 Linux 连结),并将它安装在你的 NX 服务器上。这些问题在最新版本里(即 NX > 3 及 freenx > 0.7)已经甚少出现。

2. 设置

NX 采用 ssh 协议来连接到远程服务。假若你以金钥核对身份,你必须按照以下步骤把你的用户名称加进 NX 的用户名单内:

请确定 /etc/nxserver/node.conf 文件内包含以下一行(检查该行没有被注释掉):

ENABLE_PASSDB_AUTHENTICATION="1"

请把自己加进 nxserver 数据库内。假设你的用户名称是 bob,请以 root 的身份执行以下指令:

[root@server ~]# /usr/libexec/nx/nxserver --adduser bob

你应该会看见以下输出:

NX> 100 NXSERVER - Version 3.2.0-74-SVN OS (GPL,using backend: not detected)
NX> 1000 NXNODE - Version 3.2.0-74-SVN OS (GPL,using backend: not detected)
NX> 716 Public key added to: /home/bob/.ssh/authorized_keys2
NX> 1001 Bye.
NX> 999 Bye

第一次运行上述命令时,你也许会看到消息:“No such file or directory”。这是意料之中的,并非出现问题。

设置 bob 的密码:

[root@server ~]# /usr/libexec/nx/nxserver --passwd bob

它便会有如下输出,只要求密码一次:NX> 100 NXSERVER - Version 3.2.0-74-SVN OS (GPL,using backend: not detected)

New password:

Password changed.

NX> 999 Bye

查看文件 /etc/ssh/sshd_config。如果你之前定义了 AllowUsers,下面你需要把用户 nx 和 bob 添加进这一行。

AllowUsers nx bob

这样便完成了。你的远程机器已准备好接纳 NX 客端登录。

3. 安装 NX 的客户端

centos 链接别的服务器端口 centos远程连接其他服务器_客户端

你可择选安装 opennx 或来自 NoMachine 的 nxclient。

3.1. 安装 opennx

注:如果你已经安装了 NoMachine 的 nxclient,你必须先把它卸装,然后才安装 opennx。客户端的现有设置应该会留下来给 opennx。

CentOS-6 用的 Opennx 已收录在 centos-extras 软件库。要进行安装,请在客端机器上执行这个指令:

[root@client ~]# yum install opennx

打开 NX 连接向导。输入 Session「工作阶段」名称、hostname「主机名称」(或 IP 地址)、Port「端口」号码,并选择你的 Type of Internet Connection「互联网连接类型」,然后选择 Next「下一步」。

centos 链接别的服务器端口 centos远程连接其他服务器_远程连接centos 服务器_02

选择 connection type「连接类型」、你想使用的 desktop「桌面」系统、与及 size of the desktop「桌面尺寸」。完成后选择 Next「下一步」。

centos 链接别的服务器端口 centos远程连接其他服务器_CentOS_03

在下一个对话窗口,确保 Enable SSL encryption of all traffic「启用以 SSL 加密所有通讯」已获选择,然后选择 Next「下一步」。

选择你是否需要 Create shortcut on desktop「在桌面上创建捷径」 ,然后选择 Show the Advanced Configuration dialog「显示进段设置对话框」并选择 Finish「完成」。

centos 链接别的服务器端口 centos远程连接其他服务器_客户端_04

在高级设置对话框的 General「一般」页签内,你应该看见你所输入的项目及一个 Key...「金钥…」按键。你须要 ssh 到将要连接的服务器,然后进入 /etc/nxserver/ 这个目录并打开 client.id_dsa.key 这个文件(你必项是 root 用户才能打开这个文件)。复制所有文字(包括 BEGIN DSA PRIVATE KEY 及 END DSA PRIVATE KEY 这两行)。按 Key...「金钥…」按键,删除原有的文字,然后将服务器上 client.id_dsa.key 的信息贴在 Key Management「管理金钥」文字方块内,接着选择 Save「存储」。你然会返回 Session properties「工作阶段属性」对话框。选择 OK「确定」后便大功告成。

centos 链接别的服务器端口 centos远程连接其他服务器_CentOS_05

centos 链接别的服务器端口 centos远程连接其他服务器_CentOS_06

你现在应该能够通过客户端连接到服务器并打开你的桌面。

3.2. 安装 NoMachine 的 nxclient

注: 3.5.x、3.1.x 及 3.0.x 版的 Nomachine 客户端可以配合 CentOS 所提供的 FreeNX/NX 方案。

请选择适合你的操作系统的客户端,按照 No Machine 网站上的指引安装在你的操作系统上,然后利用以下的指示来连接到你的 NX 服务器。

打开 NX 连接向导。输入Session「工作阶段」名称、hostname「主机名称」(或 IP 地址)、Port「端口」号码,并选择你的 Type of Internet Connection「互联网连接类型」,然后选择 Next「下一步」。

centos 链接别的服务器端口 centos远程连接其他服务器_远程连接centos 服务器_07

选择 connection type「连接类型」、你想使用的 desktop「桌面」系统、与及 size of the desktop「桌面尺寸」。如果你想以 SSL 加密,切勿选择「停用加密」这个项目。使用 SSL 除了将交通加密外,更会只采用你指定的 SSL 端口来连接。意思就是由防火墙外连接时,你只须打开 SSL 连接端口给对内的交通。完成后请按 Next「下一步」。

centos 链接别的服务器端口 centos远程连接其他服务器_远程连接centos 服务器_08

选择你是否需要 Create shortcut on desktop「在桌面上创建捷径」,然后选择 Show the Advanced Configuration dialog「显示高级设置对话框」并选择 Finish「完成」。

centos 链接别的服务器端口 centos远程连接其他服务器_服务器_09

在高级设置对话框的 General「一般」页签内,你应该看见你所输入的项目及一个 Key...「金钥…」按键。你须要 ssh 到将要连接的服务器,然后进入 /etc/nxserver/ 这个目录并打开 client.id_dsa.key 这个文件(你必项是 root 用户才能打开这个文件)。复制所有文字(包括 BEGIN DSA PRIVATE KEY 及 END DSA PRIVATE KEY 这两行)。按 Key...「金钥…」按键,删除原有的文字,然后将服务器上 client.id_dsa.key 的信息贴在 Key Management「管理金钥」文字方块内,接着选择 Save「存储」。

centos 链接别的服务器端口 centos远程连接其他服务器_centos 链接别的服务器端口_10

centos 链接别的服务器端口 centos远程连接其他服务器_centos 链接别的服务器端口_11

你现在应该能够通过客户端连接到服务器并打开你的桌面。请参阅 NoMachine 支持来取得更多信息。

4. 疑难解答

利用微软 Windows 的 NX 客户端连接到 CentOS 上的 NX 服务器(0.5.0-8)似乎有困难。这就是所谓的「备份存储」问题。

这个问题已经在 0.5.0-9(或以上)版本的 CentOS 组件中得到修正。它们可以在 Extras 软件库内找到。它不应再构成问题,但我们会将信息保留,供使用旧版本的人们作为参考。

备份存储问题:

Thorsten Sandfuchs 发现一些关于备份存储的问题。当你尝试以一个 2.0.0 客户端连接到一个不支持 2.0.0 备份存储的 0.5.0 安装,问题便会浮现。这是由于 Nomachine 更改了 backingstore-option 的行为。1.5.0 客户端传送 "always, when_requested" 等文字,而 freenx 会直接将这个符串转送给 nxagent-call。新版本的客户端现在传送 "backingstore=1",导致 1.5.0 版的 nxagent 发出一个警告及一个 "no argument required for -bs" 或 "Error: NX Agent exited with exit status 1." 的错误。你可以在这里阅读整段信息:Backingstore or 2.0.0-client and 1.5.0 backend and freenx-0.5

查看 nxnode 并在 node_start_agent() 函数内,于这行之后

[ -n "$backingstore" ] && B="-bs $backingstore"

加入下列数行:

# backingstore = { "when_requested", "always", ... }
[ -n "$backingstore" -a "$ENABLE_2_0_0_BACKEND" != "1" -a "$backingstore" != "1" ] && B="-bs $backingstore"
# backingstore = 1 (new nxclient 2.0.0 doesn't send any strings in the option-string for backingstore anymore)
[ -n "$backingstore" -a "$ENABLE_2_0_0_BACKEND" != "1" -a "$backingstore" = "1" ] && B="+bs"
# backingstore = 1 and 2.0.0-Backend EXPERIMENTAL
[ -n "$backingstore" -a "$ENABLE_2_0_0_BACKEND" = "1" ] && B="-bs $backingstore"

这个方法适用于 2.0.0-98 版的 nxclient。

--Predseda3D 15:12 Aug 2, 2006 (BST)

Windows Vista 上的 NX 客户端高(100%)处理器负荷:

某些用户报告 NoMachine NX 微软 Windows 客户端在 Vista 上执行时导致高(100%)处理器负荷。据称在 NX 客户端停用 DirectDraw 能够解决这个问题。请看以下的讨论:https://www.centos.org/forums/viewtopic.php?t=19396

$DISPLAY 中的 $HOSTNAME:

如果在 $DISPLAY 变量中包含了一个类似 "myhost:1000.0" 的主机名, 那么执行 xhost + 的时候会失败:

$ xhost +
xhost: unable to open display "myhost:1000.0"

解决方案: 编辑 /etc/nxserver/node.conf 并且更改此行:

#AGENT_EXTRA_OPTIONS_X="-nolisten tcp"

为:

AGENT_EXTRA_OPTIONS_X=""

不能连接:

如果 nx 在最后一步连接失败并停了下来,请检查你在服务器上的主目录。删除所有 .Xauthority* 档(或把它们移往别处)然后重试。要是这样没有帮助,请尝试删除 /tmp/.X11-unix。

ESXi5/VMTools 及 FreeNX:

当你在一台 ESXi5 主机上安装 CentOS6.x 时,NX-Session 有可能在安装 VMTools 后不能再运作。桌面会跳出,但繁忙图示会无限期地逗留在划面上。据 NoMachine 称这是 VMTools 8.6.0 版的错误。解决方法可参考此连结。

更新装有 FreeNX 的 C6 至一台 ESXi5 主机:

把一台运行 C6 的虚拟机器上的 VMTools 从 ESX4 升级至 ESXi5 亦可能令 GNOME-Desktop 出现问题。同样地桌面会跳出,但繁忙图示会无限期地逗留在划面上。似乎删除 ESX4 的 VMTools 时,它未能正确地撤消 vmwlegacy_drv.so。创建以下的连结可解决这个问题:

在 x64:ln -s /usr/lib64/xorg/modules/drivers/vmwlegacy_drv.so.old.0 /usr/lib64/xorg/modules/drivers/vmwlegacy_drv.so

在 i386:ln -s /usr/lib/xorg/modules/drivers/vmwlegacy_drv.so.old.0 /usr/lib/xorg/modules/drivers/vmwlegacy_drv.so

5. 杂记

图像界面的考虑

假若你在远程服务器上安装 FreeNX,你亦需要在这台机器上安装桌面环境,才能执行远程工作阶段。一个简单地安装 Gnome 的方法就是执行以下指令:

CentOS 5:yum groupinstall 'GNOME Desktop Environment' 'X Window System'

CentOS 6:yum groupinstall 'Desktop' 'X Window System'

注:如果你运用 CentOS 5,yum groupinstall "GNOME Desktop Environment" 可能会投诉 libgaim.so.0 被遗漏。这是一个已知的错误。详情请参阅 CentOS-5 常见问题集。

你也必须安装相关的字体及确保 font 服务在运行中(CentOS 上)

SSH 的考虑

centos 链接别的服务器端口 centos远程连接其他服务器_客户端_12

以下信息只供 CentOS 5.x 应用。请你切勿在 CentOS 6.x 上如此做,它有可能导致 ssh 不能访问该台机器。

FreeNX 预期能用 ssh 连接到 127.0.0.1,也就是当地主机的地址。如果你没有更改缺省的 sshd_config,sshd 守护程序应该可以在这个 IP 地址上找到。

然而,如果你更改了 /etc/ssh/sshd_config 内的 ListenAddress 那一行,这可能会构成一个问题。请该定 sshd 存在于 127.0.0.1 上。你可以这样检查

netstat -an |grep 22

所得的结果应该与下面相若

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

tcp 0 0 :::22 0.0.0.0:* LISTEN

(上面假设你采用缺省的端口 22 作为 ssh 连接。)这个输出表示 sshd 正在所有地址上侦听。

基于各种原因,人们有时会修改 sshd_config 在特定的地址来侦听。如果你看见的类似

tcp 192.168.1.20:22 0.0.0.0:* LISTEN

那就意味着 sshd 只侦听 192.168.1.20 这个地址上的连接。这样做会导致 FreeNX 连接到 127.0.0.1 时失败。

要修正这个问题,请在 /etc/ssh/sshd_config 内加入另一行 ListenAddress 行。它应该包含

ListenAddress 127.0.0.1

(这个 ListenAddress 记录应该独占一行。)

如果你用远程连接,采用 screen 这个指令。你将要重新引导 sshd,而这样做会中断远程的 ssh 工作阶段。(还有其它方法可以重新引导 sshd 常注程序而又不会中断你的连接,但 screen 是其中一个最容易的办法。如果你未安装它,请先用 yum install screen 来安装。)

screen

这样做会带给你一个指令提示。重新引导 sshd。

/etc/init.d/sshd restart

再次利用 netstat -an 来检查它现在是否于 127.0.0.1 上耹听。

netstat -an

你现应该看见类似这样的输出

tcp 192.168.1.20:22 0.0.0.0:* LISTEN

tcp 127.0.0.1:22 0.0.0.0:* LISTEN

FreeNX 现在将会能够连接。

再重复一遍,加入 127.0.0.1 侦听地址这一步只适用于 CentOS 5.x。切勿在 CentOS 6.x 上如此做。

还有请记住,(不论是哪一版的 CentOS),要是你利用 sshd_config 内的 AllowUsers 或其它访问控制系统来管理谁能登录机器内,务请你把 nx 这个用户加进列表中。

不采用 yum 下载 FreeNX 的 rpm

你也可从这里下载 RPM:

访问 KVM 客端的另一个选择

假如你要连接到一台 QEMU 虚拟机器(KVM 客端),你可按照 Spice-libvirt 的指引采用 spice。

Translation of revision 117--