采用 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 的客户端
你可择选安装 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「下一步」。
选择 connection type「连接类型」、你想使用的 desktop「桌面」系统、与及 size of the desktop「桌面尺寸」。完成后选择 Next「下一步」。
在下一个对话窗口,确保 Enable SSL encryption of all traffic「启用以 SSL 加密所有通讯」已获选择,然后选择 Next「下一步」。
选择你是否需要 Create shortcut on desktop「在桌面上创建捷径」 ,然后选择 Show the Advanced Configuration dialog「显示进段设置对话框」并选择 Finish「完成」。
在高级设置对话框的 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「确定」后便大功告成。
你现在应该能够通过客户端连接到服务器并打开你的桌面。
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「下一步」。
选择 connection type「连接类型」、你想使用的 desktop「桌面」系统、与及 size of the desktop「桌面尺寸」。如果你想以 SSL 加密,切勿选择「停用加密」这个项目。使用 SSL 除了将交通加密外,更会只采用你指定的 SSL 端口来连接。意思就是由防火墙外连接时,你只须打开 SSL 连接端口给对内的交通。完成后请按 Next「下一步」。
选择你是否需要 Create shortcut on desktop「在桌面上创建捷径」,然后选择 Show the Advanced Configuration dialog「显示高级设置对话框」并选择 Finish「完成」。
在高级设置对话框的 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「存储」。
你现在应该能够通过客户端连接到服务器并打开你的桌面。请参阅 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 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--