FreeNX

出自 Arch Linux 中文维基

本文內容或本節內容已經過期。

原因: 請提供模板的第一個位置參數以概括原因。 (在Talk:FreeNX討論)

本文或本節需要翻譯。要貢獻翻譯,請訪問簡體中文翻譯團隊

附註: 大量英文段落(在 Talk:FreeNX# 中討論)

NX 是一項令人激動的遠程控制技術。它提供了在高延遲、低帶寬環境中接近本地速度的應用程式響應連結。NX 的核心庫由 NoMachine 在 GPL 授權下提供。FreeNX 是一個 NX 伺服器和客戶端組件的 GPL 實現。

FreeNX - 自由的 NX

安裝[編輯 | 編輯原始碼]

包分為兩部分:

  • freenx (伺服器)
  • nxclient (客戶端)

如果你打算用 freenx 來連接無頭 PC,記得你得有一個配置好的 X 伺服器,這樣你應該就能安裝任何與 xorg 相關聯的包了。

設置[編輯 | 編輯原始碼]

伺服器[編輯 | 編輯原始碼]

自由(免費)的伺服器在 'freenx' 包中。你必須安裝 sshd 守護進程,並且讓它正確運行:

# systemctl enable sshd

要使 freenx 的登錄驗證工作,sshd 必須正確配置。檢查 /etc/ssh/sshd_config 中下列項:

RSAAuthentication yes
AllowUsers someuser nx

NX 的主配置文件位於:

/opt/NX/etc/node.conf

如果你的 ssh 守護進程不是運行在默認的 22 埠,你需要取消注釋並修改:

SSHD_PORT=22
注意: As of OpenSSL 1.0.0, it is necessary to set proper md5sum command in /opt/NX/etc/node.conf:
COMMAND_MD5SUM="md5sum"

如果你在用 Gnome 或 KDE 桌面環境,你不需要編輯此文件,應為修改過的 MD5SUM 與默認配置在這種場合下能夠工作。如果你在使用其它窗口管理器,比如 Fluxbox/Openbox 或 Xfce,你大概需要稍微修改這個文件(見下方)。

安裝完 freenx 包,運行 /opt/NX/bin/nxsetup --help for an overview of the install and uninstall procedures.

注意: You should also install "xdialog" on the server or you will not see the "suspend/terminate" dialog when you try to close the window or hit "ctrl-alt-T":
pacman -S xdialog

密鑰[編輯 | 編輯原始碼]

伺服器需要用密鑰來驗證客戶端。默認情況下,在安裝時會產生一對隨機密鑰,一個是伺服器的,另一個是客戶端的。你需要給每一個想要連接的客戶端(Windows 也好, linux 也好)複製一份客戶端密鑰。

客戶端密鑰能在這兒找到:

/opt/NX/home/nx/.ssh/client.id_dsa.key

Alternatively you can use the default key that is provided by NoMachine with all clients. In this case you do not need to copy a custom generated key to each client. To get the server to accept the default client keys run:

/opt/NX/bin/nxsetup --install --setup-nomachine-key

Recreation of random keys:

/opt/NX/bin/nxsetup --install

Transferring nx keys to another freenx server:

  • /opt/NX/home/nx/.ssh contains the key files
 -rw------- 1 nx root  697  9. Okt 12:55 authorized_keys
 -rw------- 1 nx root  668  9. Okt 11:48 client.id_dsa.key
 -rw------- 1 nx root  609  9. Okt 12:55 server.id_dsa.pub.key
  • Save those files.
  • Add those files to your new server, they need the same permissions, names, group and directory!
 # cp authorized_keys client.id_dsa.key server.id_dsa.pub.key /opt/NX/home/nx/.ssh/
 # chmod 600 /opt/NX/home/nx/.ssh/*
 # chown nx /opt/NX/home/nx/.ssh/*
 # chgrp root /opt/NX/home/nx/.ssh/*
  • Recreate known_hosts file:
 # echo -n 127.0.0.1 > /opt/NX/home/nx/.ssh/known_hosts
 # cat /etc/ssh/ssh_host_rsa_key.pub >> /opt/NX/home/nx/.ssh/known_hosts
 # chmod 633 /opt/NX/home/nx/.ssh/known_hosts
 # chown nx /opt/NX/home/nx/.ssh/known_hosts
 # chgrp root /opt/NX/home/nx/.ssh/known_hosts

啟動伺服器[編輯 | 編輯原始碼]

Once installed the server is effectively running and ready to go, you do not have to do anything manually The only thing that must be running in order to connect is the sshd daemon. This is because the nxserver is actually started by logging into sshd as the special user 'nx'. This user has been set up to use the nxserver as its shell, much like a normal user has bash as the default shell.

You can specify the local addresses sshd should listen for by editing /etc/ssh/sshd_config and adding them in the following format:

ListenAddress host|IPv4_addr|IPv6_addr

The original ListenAddress in sshd_config is 0.0.0.0. This listens to all addresses, however adding any address will take precedent to this and and accept connections from the new address only.

Restart the sshd daemon to put any changes to its configuration into effect:

# systemctl restart sshd

In actual fact, if you check the process list (ps aux) you may not see the nxserver running even though it is. This is because the nxserver is actually started by logging into sshd as the special user 'nx'. This user has been set up to use the nxserver as its shell, much like a normal user has bash as the default shell.

客戶端[編輯 | 編輯原始碼]

Arch Linux[編輯 | 編輯原始碼]

Get the client from pacman:

pacman -S nxclient

Windows[編輯 | 編輯原始碼]

Get the client from nomachine's homepage: https://www.nomachine.com

Tip: Nomachine tends to remove old clients from their homepage, If your setup works with a client save it at a safe place ;)

配置[編輯 | 編輯原始碼]

As mentioned above, the client must contain the correct key to connect to the server. If you are using the custom keys generated during install, you need to copy the client key to the following locations:

  • Windows: <yourinstalldironwindows>/share/keys/client.id_dsa.key
  • Arch Linux: /opt/NX/share/keys/client.id_dsa.key

After moving the keys you may have use the nxclient GUI to import the new keys. From the configuration dialog press the 'Key...' button and import the new client key.

運行[編輯 | 編輯原始碼]

After installing nxclient on Arch Linux, executables are available in /opt/NX/bin. At the first run of /opt/NX/bin/nxclient, the user will be led through a wizard.

鍵盤快捷鍵[編輯 | 編輯原始碼]

CTR+ALT+F          Toggles full-screen mode. 
CTRL+ALT+T         Shows the terminate, suspend dialog.
CTRL+ALT+M         Maximizes of minimizes the window 
CTRL+ALT+Mouse     Drags the viewport, so you can view different portions 
                   of the desktop. 
CTRL+ALT+Arrows 
or                 Moves the viewport by an incremental amount of pixels. 
CTRL+ALT+Keypad 
CTRL+ALT+S         It will activate "screen-scraping" mode, so all the GetImage
                   originated by the clients will be forwarded to the real
                   display. This should make happy those who love taking
                   screenshots ;-). By pressing the sequence again, nxagent
                   will revert to the usual "fast" mode.
CTRL+ALT+E         lazy image encoding
CTRL+ALT+Shift+ESC Emergency-exit and kill-window

退出全屏[編輯 | 編輯原始碼]

There is a magic-pixel in the top right corner of nearly every nx-application in fullscreenmode. Right-click the pixel and application-window gets iconified.

Tips on resume[編輯 | 編輯原始碼]

  • Resume is a bit experimental, crashes might appear after session has resumed. You have to find out which apps like resuming and which do not ;) .
  • Resuming between Linux and Windows sessions does not work. UPDATE: It appears that version 3.2.0-14 is able to resume Windows-suspended sessions.
  • If resume fails let it time out and do not use the cancel button, else sessions will stay open and consume RAM on server. To kill such sessions use the Session Admin program to kill them.

修復 DPI 設置[編輯 | 編輯原始碼]

If you like to have the same font-sizes/dpi sizes on all your client session, set the X resource "Xft.dpi". For example putting the following line into a user's "~/.Xresources" makes her/his "desktop" a 100dpi. Xft.dpi: 100

在已有屏幕上使用 FreeNX[編輯 | 編輯原始碼]

Usually, when connecting to a NX server, a new X session is created. Sometimes it might be useful, to connect to an existing X session, e.g. the root session. This is not possible with NX in default setup, but can be reached, using tightvnc and x11vnc. Do the following steps on the NX server system.

# pacman -S tightvnc x11vnc

x11vnc will serve the X session, we have to create a file $HOME/.x11vncrc to give x11vnc some options, e.g.:

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

Create the VNC password file:

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

Create a shell script, which starts the x11vnc service, if not running and starts the vncviewer provided by the package tightvnc.

注意: The variable $VNC_PORT in the following script defines the X display, which is configured as display :0 under $HOME/.x11vncrc, 5900 is the root session, if you want to use display :1 use the port 5901 and so on
#!/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

Save this script with a texteditor of your choice, e.g. under $HOME/shell/nxvnc.sh. Make it executable and create a symbolic link, e.g:

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

At this point, you might want to test the current configuration: $ /usr/local/bin/nxvnc

If the x11vnc service and a vncviewer session is started, you configuration works well. You are now able to connect to the current X session using your NX client with following options:

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

You are able to connect to your current X session via NX client now.

FreeNX to existing display (opensuse.org)

設置非 KDE 或非 Gnome 桌面管理器[編輯 | 編輯原始碼]

Before following anything in this part, make sure the server working setup and accepting connections. This section only deals with problems once NXClient has logged on.

It is quite simple (once the server is setup) to connect to Gnome and KDE sessions, however connecting to other window managers (fluxbox, xfce, whatever) is slightly different.

Choosing "custom" and using a command like startx of startfluxbox will either result in a blank screen after the !M logo or the Client to present an error complaining about lack of a X server. A way around this is open a session with the command "startx", and the another with the command to start your window-manager-of-choice.

If you do not want to do this, you can start X by installing a login manager like SLIM or XDM. I would recomend using SLiM because of its small size.

(Authors note: This is how I got fluxbox, xfce and others to work on my arch installation- however, I have now removed slim from inittab and set the run level back to 3, and yet I can still login perfectly with NXClient. Possibly try this if you get your system working this way, if like me you have a low memory machine.)

Alternative fix[編輯 | 編輯原始碼]

A simple fix without resorting to the above seems to involve a simple edit to the config file. This should work for fluxbox/openbox/xfce or any other window manager that uses the .xinitrc startup file in a call to startx.

Simply edit the config file (as root):

/opt/NX/etc/node.conf

and change

#USER_X_STARTUP_SCRIPT=.Xclients

to

USER_X_STARTUP_SCRIPT=.xinitrc

Remember to remove the # symbol from the start of the line.

Then in the client under configuration settings, choose Custom as the desktop, and click on settings:

  • In the first group select - Run the default X client Script on server
  • In the second group select - New virtual desktop

問題[編輯 | 編輯原始碼]

調試問題[編輯 | 編輯原始碼]

Edit the nxserver config file:

 vi /opt/NX/etc/node.conf

Change:

 #SESSION_LOG_CLEAN=1

to

 SESSION_LOG_CLEAN=0

Then you can look/debug the log files in:

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

For succesfull connections and:

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

For failed ones.

驗證 OK, 但連接失敗[編輯 | 編輯原始碼]

If you are trying to startkde

 vi /opt/NX/etc/node.conf

And search for:

 COMMAND_START_KDE=startkde

Replace for:

 COMMAND_START_KDE=/usr/bin/startkde

按鍵改變[編輯 | 編輯原始碼]

Change the key in GUI setup to new generated key.

Xorg 7[編輯 | 編輯原始碼]

Be aware that you have to remove the /usr/X11R6 directory, else strange things can happen.

密碼錯誤 / 沒有可用連接[編輯 | 編輯原始碼]

  • If you have changed your ssh daemon to run on an alternate port, be sure to modify SSHD_PORT within /opt/NX/etc/node.conf.
  • If you get always wrong password or no connection after authentication was done and you are sure that you typed it correct, check that your server can connect to itself using localhost by ssh.
  • If you messed up your key files, create new ones or fix the old ones, it is probably caused by a wrong known_hosts file.
  • If you get wrong password or login, put ENABLE_PASSDB_AUTHENTICATION="1" in /opt/NX/etc/node.conf and add a user by
# /opt/NX/bin/nxserver --adduser [username]
# /opt/NX/bin/nxserver --passwd [username]

在啟動 session 時 NX 崩潰[編輯 | 編輯原始碼]

If your NX Client shows the NX logo then disappears with a Connection Problem dialog afterwards.

Then it could be due to missing fonts. Mostly applies if you have installed Arch Linux base and then installed freenx after without the whole X11 set.

Solution until FreeNX Dependencies is fixed is to install xorg-fonts-misc on your NX Server (pacman -S xorg-fonts-misc) and your NX should work.

Note: This does not apply to freenx 0.6.1-3 and above, fix has been incorporated in it and following versions.

顯示 NX 徽標之後黑屏[編輯 | 編輯原始碼]

If you see the NX logo (!M) then a blank screen.

This problem can be solved by running a login manager- The problem is that X11 is not started, and it appears that "startx" or similar do not work from the freenx client. Follow these instructions to setup a login manager and load it at startup: Display manager

Blind: If this does not resolve your issues, be aware that freenx and bash_completion do not play well together. I only got things to work after removing bash_completion from the .bashrc.

GDM/XDM Session Menu Error with non-KDE or Gnome Desktop Managers (more common with non-Arch Linux users)[編輯 | 編輯原始碼]

Problem: A session menu comes up talking about "chooseSessionListWidget." A window manager never loads.

Fix :

Double check to see if ~/.xinitrc is executable.

 ls -la ~/ | grep .xinitrc

If the file is not executable, simply

 chmod +x ~/.xinitrc

Keep in mind this command should be executed along with pertinent instructions on this page about "Setting up non-KDE or Gnome desktop managers"

Cannot connect because command sessreg not found[編輯 | 編輯原始碼]

If you get the following error while connecting

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

then you have to install the package xorg-server-utils.