采用 FreeNX 的 NX 服务器

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

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

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

现时 CentOS Extras 软件库内备有供 CentOS 5 及 CentOS 6 用的 NX 和 FreeNX 组件。

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

[root@server ~]# yum install nx freenx 

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

2. 设置

freenx-0.7.3-9.el5.centos 或 freenx-0.7.3-9.el6.centos 这两个 freenx 组件都附带有 /etc/nxserver/node.conf 档。假如你拥有旧版本,你必须通过复制 node.conf.sample 档来创建它:

[root@server ~]# cd /etc/nxserver ; cp node.conf.sample node.conf 

NX 采用 ssh 协议来连接到远程服务,但我们仍须把你的用户名称加进 NX 的用户名单内:

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

ENABLE_PASSDB_AUTHENTICATION="1" 

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

[root@server ~]# nxserver --adduser bob

你应该会看见以下输出:

NX> 100 NXSERVER - Version 1.5.0-60 OS (GPL)
NX> 1000 NXNODE - Version 1.5.0-60 OS (GPL)
NX> 716 Public key added to: /home/bob/.ssh/authorized_keys2
NX> 1001 Bye.
NX> 999 Bye 

设置 bob 的密码:

[root@server ~]# nxserver --passwd bob

它便会有如下输出,只要求密码一次:

NX> 100 NXSERVER - Version 1.5.0-60 OS (GPL)
New password:
Password changed.
NX> 999 Bye 

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


3. 安装 NX 的客户端

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

3.1. 安装 opennx

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

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

[root@client ~]# yum install opennx


opennx2.png


opennx3.png



opennx5.png


opennx6.png opennx7.png


3.2. 安装 NoMachine 的 nxclient

NoMachine 不客许发行他们的客户端,因此你必须從他们的网站下载。客户端备有 LinuxMac OSXSolaris微软 Windows 版本。

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

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


nxclient1new.jpg


nxclient2new.jpg


nxclient3new.jpg


nxclient4new.jpg nxclient5new.jpg


4. 疑难解答

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

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

来自 FreeNX 常见问题集

备份存储问题:

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 能够解决这个问题。请看以下的讨论:

http://www.centos.org/modules/newbb/viewtopic.php?topic_id=14363&forum=38

$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=""

http://www.centos.org/modules/newbb/viewtopic.php?topic_id=29356&forum=37

不能连接:

如果 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 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:

CentOS5: i386:http://mirror.centos.org/centos/5/extras/i386/RPMS/ x86_64:http://mirror.centos.org/centos/5/extras/x86_64/RPMS/

CentOS6: i386:http://mirror.centos.org/centos/6/extras/i386/Packages/ x86_64:http://mirror.centos.org/centos/6/extras/x86_64/Packages/

访问 KVM 客端的另一个选择

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

Translation of revision 111--

zh/HowTos/FreeNX (last edited 2013-04-12 14:35:14 by TimothyLee)