FreeNX

出自 ArchWiki

FreeNX,德语文本,是一个允许您通过互联网从另一台计算机访问您的桌面的系统。该程序是开源的、安全的(基于 SSH)、快速且多功能的。许可证:GPL。它是 NoMachine 的非商业版本,后者现已转换为闭源。一个好的 FreeNX 替代品是 X2Go

安装

nx3-allAURnomachineAUR 获取 FreeNX/Nomachine。服务器和客户端软件包都包含在该软件包中。sshd 守护程序(在 openssh 软件包中可用)必须安装并运行才能正常工作。

配置

服务器

SSHD

为了使 freenx 身份验证工作,sshd 必须正确设置。您需要允许 RSAauthentication、密码身份验证,并且还需要将 nx 公钥包含到 Authorizedkeysfile 中。

如果您不想全局允许密码登录,请在文件末尾添加如下匹配块:/etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords yes
AuthorizedKeysFile /usr/NX/home/nx/.ssh/authorized_keys /usr/NX/home/nx/.ssh/authorized_keys2
#
#
#
Match Address 127.0.0.1
  PasswordAuthentication yes

主要配置

主配置文件位于 /usr/NX/etc/node.cfg

如果您在非默认端口 22 的端口上运行 SSH 守护程序,您将需要取消注释并更新:SSHD_PORT=22

如果您使用 KDE 或 GNOME 桌面环境,则无需编辑此文件,因为带有修改后的 MD5SUM 命令的默认设置在这种情况下应该可以工作。如果您使用另一个窗口管理器,例如 Fluxbox/Openbox 或 Xfce,您可能需要稍微编辑此文件(见下文)。

或者,如果您不使用 CDE 而使用 Xfce,您可以简单地编辑 CDE 行,如下所示,并从客户端启动 cde

CommandStartCDE = "/usr/bin/startxfce4"

要概述安装和卸载过程,请在安装 nx3-allAUR 后运行以下命令

# /usr/NX/scripts/setup/nxserver --help
注意
  • 您还应该在服务器上安装 xdialog,否则当您尝试关闭窗口或按下 Ctrl+Alt+t 时,您将看不到“挂起/终止”对话框。
  • 虽然大多假设您已经拥有它,但 xterm 对于某些事情也是必要的。

密钥

默认情况下,密钥用于对客户端进行服务器身份验证。您可以使用安装期间创建的默认密钥,也可以创建新的密钥对。如果您创建自己的密钥对,请确保将公钥目录添加到 sshd_config 中的 authorizedkeyfiles 以及 node.cfg 中的 SSHAuthorizedKeys。并且不要忘记将私钥发送给客户端。

公钥可以在这里找到,请检查 

/usr/NX/home/nx/.ssh/authorized_keys2

私钥可以在这里找到

/usr/NX/share/keys/server.id_dsa.key

重新生成随机密钥

/usr/NX/bin/nxserver --keygen

您可以通过以下方式检查 nxserver 是否正在运行

/usr/NX/bin/nxserver --status 

您还可以通过以下方式检查是否可以登录所需用户

/usr/NX/bin/nxserver --usercheck USERNAME

启动服务器

从安装开始,nxserver 设置为自动启动,但是,您可能需要在设置后重新启动服务器

/usr/NX/bin/nxserver --restart

客户端

Arch Linux

安装 opennxAURnx3-allAUR 软件包中的一个或两个。

Windows

从 nomachine 的主页获取客户端:https://www.nomachine.com

提示: Nomachine 倾向于从其主页删除旧客户端,如果您的设置适用于客户端,请将其保存在安全的地方。

配置

如上所述,客户端必须包含正确的密钥才能连接到服务器。如果您使用的是安装期间生成的自定义密钥,则需要将客户端密钥复制到以下位置

  • Windows:您的 Windows 安装目录/share/keys/client.id_dsa.key
  • Arch Linux:/usr/lib/nx/share/keys/client.id_dsa.key

移动密钥后,您可能需要使用 nxclient GUI 导入新密钥。从配置对话框中,按下“密钥...”按钮并导入新的客户端密钥。

运行

在 Arch Linux 上安装 nxclient 后,可执行文件在 /usr/lib/nx/bin/ 中可用,符号链接到 /usr/bin/。首次运行 /usr/bin/nxclient 时,用户将被引导完成一个向导。

键盘快捷键

键盘快捷键 描述
Ctrl+Alt+f 切换全屏模式。
Ctrl+Alt+t 显示终止、挂起对话框。
Ctrl+Alt+m 最大化或最小化窗口。
Ctrl+Alt+鼠标 拖动视口,以便您可以查看桌面的不同部分。
Ctrl+Alt+箭头键/小键盘 按像素增量移动视口。
Ctrl+Alt+s 激活“屏幕抓取”模式,以便客户端发起的所有 GetImage 都将转发到真实显示器。

再次按下该序列,nxagent 将恢复到常用的“快速”模式。

Ctrl+Alt+e 延迟图像编码
Ctrl+Alt+Shift+Esc 紧急退出并杀死窗口

离开全屏

几乎每个全屏模式下的 nx 应用程序的右上角都有一个魔术像素。左键单击像素,应用程序窗口将图标化。

恢复提示

  • 恢复有点实验性,会话恢复后可能会出现崩溃。您必须找出哪些应用程序喜欢恢复,哪些不喜欢 ;) 。
  • 在 Linux 和 Windows 会话之间恢复不起作用。更新:版本 3.2.0-14 似乎能够恢复 Windows 挂起的会话。
  • 如果恢复失败,请让它超时,不要使用取消按钮,否则会话将保持打开状态并消耗服务器上的 RAM。要杀死此类会话,请使用 Session Admin 程序杀死它们。

修复 DPI 设置

如果您希望在所有客户端会话中具有相同的字体大小/dpi 大小,请设置 X 资源 Xft.dpi。例如,将以下行放入用户的 ~/.Xresources 中会使其“桌面”变为 100dpi。

Xft.dpi: 100

FreeNX 连接到现有显示器

通常,当连接到 NX 服务器时,会创建一个新的 X 会话。有时,连接到现有 X 会话(例如,root 会话)可能很有用。这在默认设置下使用 NX 是不可能的,但可以使用 tightvncAURx11vnc 来实现。在 NX 服务器系统上安装它们。

x11vnc 将服务于 X 会话,我们必须创建一个文件 $HOME/.x11vncrc 来为 x11vnc 提供一些选项,例如

display :0
shared
forever
localhost
rfbauth /home/user/.x11vnc/passwd

创建 VNC 密码文件

$ mkdir $HOME/.x11vnc
$ x11vnc -storepasswd PASSWORD $HOME/.x11vnc/passwd
$ chmod 600 $HOME/.x11vnc/passwd

创建一个 shell 脚本,如果 x11vnc 服务未运行,则启动它,并启动软件包 tightvnc 提供的 vncviewer。

注意: 以下脚本中的变量 $VNC_PORT 定义了 X 显示,该显示配置为 $HOME/.x11vncrc 下的 display :05900 是 root 会话,如果您想使用 display :1,请使用端口 5901,依此类推
#!/bin/sh
VNC_VIEWER=vncviewer
VNC_SERVER=x11vnc
VNC_RESOLUTION=1024x786
VNC_PASSWD=/home/USER/.x11vnc/passwd
VNC_PORT=5900

if [ -z "$(pgrep ${VNC_SERVER})" ]; then
	echo $VNC_SERVER not running, starting...
	exec $VNC_SERVER &
	sleep 5
fi

exec $VNC_VIEWER -geometry $VNC_RESOLUTION -passwd $VNC_PASSWD localhost::$VNC_PORT

使用您选择的文本编辑器保存此脚本,例如在 $HOME/shell/nxvnc.sh 下。使其可执行并创建一个符号链接,例如

$ chmod +x $HOME/shell/nxvnc.sh
# ln -s /home/USER/shell/nxvnc.sh /usr/local/bin/nxvnc

此时,您可能想要测试当前配置

$ /usr/local/bin/nxvnc

如果 x11vnc 服务和 vncviewer 会话已启动,则您的配置工作良好。您现在可以使用 NX 客户端和以下选项连接到当前的 X 会话

Login, Password, Host, Port: your default entries
Desktop: Unix -> Custom
 - Settings:
   - Run the following command: /usr/local/bin/nxvnc
   - New virtual desktop
Display:
  - Fullscreen or Custom with you preferred resolution

您现在可以通过 NX 客户端连接到当前的 X 会话。

FreeNX 连接到现有显示器 (opensuse.org)

设置非 KDE 或 GNOME 桌面管理器

本文或章节需要语言、wiki 语法或风格方面的改进。请参阅 Help:Style 以获取参考。

原因: 第一人称。(在 Talk:FreeNX 中讨论)

在遵循本节中的任何内容之前,请确保服务器工作设置并接受连接。本节仅处理 NXClient 登录后出现的问题。

连接到 GNOME 和 KDE 会话非常简单(一旦服务器设置好),但是连接到其他窗口管理器(Fluxbox、Xfce 等)则略有不同。

选择“自定义”并使用诸如 startx 或 startfluxbox 之类的命令将导致在 !M 徽标后出现空白屏幕,或者客户端显示错误,抱怨缺少 X 服务器。解决此问题的一种方法是使用命令“startx”打开一个会话,然后使用另一个命令来启动您选择的窗口管理器。

如果您不想这样做,您可以通过安装像 SLIM 或 XDM 这样的登录管理器来启动 X。我建议使用 SLiM,因为它体积小巧。

(作者注:这就是我在我的 arch 安装上让 fluxbox、xfce 和其他窗口管理器工作的方式 - 但是,我现在已经从 inittab 中删除了 slim,并将运行级别设置回 3,但我仍然可以使用 NXClient 完美登录。如果您以这种方式使您的系统工作,可以尝试一下,如果您像我一样有一台低内存机器。)

注意: 上述信息可能不再正确。一旦连接和身份验证有效(并且我的机器上安装了 xterm),startfluxbox 就被添加到自定义命令行中,选择了新窗口,它立即启动了。

替代修复方案

一个简单的修复方案,无需求助于上述方法,似乎涉及对配置文件进行简单的编辑。这应该适用于 Fluxbox/Openbox/XFCE 或任何其他使用 .xinitrc 启动文件来调用 startx 的窗口管理器。

只需以 root 身份编辑配置文件 /etc/nxserver/node.conf 并更改

#USER_X_STARTUP_SCRIPT=.Xclients

USER_X_STARTUP_SCRIPT=.xinitrc

记住从行首删除 # 符号。

然后在客户端的配置设置下,选择 自定义 作为桌面,然后单击设置

  • 在第一组中选择 - 在服务器上运行默认的 X 客户端脚本
  • 在第二组中选择 - 新的虚拟桌面

问题

键盘映射问题

键盘布局总是回退到 en_US。

登录后,使用您的布局运行 setxkbmap。

示例

 $ setxkbmap -layout br

或创建文件 /usr/share/X11/xkb/keymap.dir

 # touch /usr/share/X11/xkb/keymap.dir

创建此文件将修复下次登录的问题。

调试问题

编辑 nxserver 配置文件 /etc/nxserver/node.conf 并更改

 #SESSION_LOG_CLEAN=1

 SESSION_LOG_CLEAN=0

然后您可以在以下位置查看/调试日志文件

 $HOME/.nx/T-C-hostname-display-session-id

用于成功连接

 $HOME/.nx/F-C-hostname-display-session-id

用于失败的连接。

身份验证通过,但连接失败

如果您正在尝试启动 KDE,请编辑 /etc/nxserver/node.conf 并搜索

 COMMAND_START_KDE=startkde

替换为

 COMMAND_START_KDE=/usr/bin/startkde

密钥更改

在 GUI 设置中将密钥更改为新生成的密钥。

密码错误 / 无法连接 / 基于密钥的身份验证

  • 如果您已更改 ssh 守护程序以在备用端口上运行,请务必修改 /etc/nxserver/node.conf 中的 SSHD_PORT。
  • 如果您在身份验证完成后始终收到密码错误或无法连接,并且您确定您输入的密码正确,请检查您的服务器是否可以使用 ssh 通过 localhost 连接到自身。
  • 如果您搞砸了您的密钥文件,请创建新的密钥文件或修复旧的密钥文件,这可能是由错误的 known_hosts 文件引起的。
  • 如果您收到密码错误或登录错误,请在 /etc/nxserver/node.conf 中放入 ENABLE_PASSDB_AUTHENTICATION="1",并通过以下命令添加用户
# /usr/bin/nxserver --adduser [username]
# /usr/bin/nxserver --passwd [username]
  • 如果您在 ssh 中禁用了密码身份验证而改用基于密钥的身份验证,则上述命令也是必需的。

NX 在会话启动时崩溃

如果您的 NX 客户端显示 NX 徽标,然后消失并显示连接问题对话框。

NX 徽标后黑屏

如果您看到 NX 徽标 (!M) 然后看到黑屏。

可以通过运行登录管理器来解决此问题 - 问题是 X11 没有启动,并且似乎“startx”或类似命令无法从 freenx 客户端工作。请按照以下说明设置登录管理器并在启动时加载它:显示管理器

盲点:如果这不能解决您的问题,请注意 freenx 和 bash_completion 不能很好地协同工作。我只有在从 .bashrc 中删除 bash_completion 后才能使一切正常工作。

使用非 KDE 或 GNOME 桌面管理器时出现 GDM/XDM 会话菜单错误(在非 Arch Linux 用户中更常见)

问题:出现一个会话菜单,内容是关于“chooseSessionListWidget”。窗口管理器永远不会加载。

仔细检查 .xinitrc 是否可执行,如果不是,请使其可执行

stat -c "%A" ~/.xinitrc

请记住,此命令应与本页上关于设置非 KDE 或 GNOME 桌面管理器的相关说明一起执行。

无法连接,因为找不到命令 sessreg

如果您在连接时遇到以下错误

 /usr/bin/nxserver: line 941: sessreg: command not found
 NX> 280 Exiting on signal: 15

那么您必须安装软件包 xorg-sessreg

Cairo 1.12.x 恢复中断

最新的 cairo 更新破坏了渲染扩展。恢复会话后,挂起之前的所有字符都不会被渲染。要解决此问题,请将以下单行添加到 /etc/nxserver/node.conf

 AGENT_EXTRA_OPTIONS_X="-norender"

Eclipse 在编辑文件时崩溃

The program 'Eclipse' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadValue (integer parameter out of range for operation)'.
(Details: serial 8414 error_code 2 request_code 149 minor_code 26)

使用以下命令启动 eclipse(请参阅 [1]

$ eclipse -vmargs -Dorg.eclipse.swt.internal.gtk.cairoGraphics=false