歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> NoMachine 安裝使用初級教程

NoMachine 安裝使用初級教程

日期:2017/2/28 15:31:08   编辑:Linux教程

Linux 下可用的圖形界面遠程控制軟件很多,很久以前寫過的一個 Linux 下遠程控制簡介,感興趣的可以簡要了解一下。NoMachine 是 Linux 下實現遠程桌面的另一個非常方便的軟件,本文記錄了在 Debian/Ubuntu 下安裝和使用 NoMachine 的一些注意事項。

Linux 下遠程控制簡介PDF版下載見 http://www.linuxidc.com/Linux/2012-10/72045.htm

1 NX 的優點
NX 的原理和 VNC 很接近,同樣也是通過在遠程機器上虛擬一個 Xserver 的方式,將遠程的應用程序繪制的圖像都繪到虛擬的 Xserver 上,再通過 NX 協議將圖像發送到客戶端來,並接受客戶端的鍵盤和鼠標事件。和 VNC 比起來,NX 主要有以下幾大優點:

首先是速度,NX 協議允許對傳輸的圖像進行壓縮,在網絡帶寬有限的情況下,NX 可以動態地犧牲部分圖像質量,獲得更流暢的操作效果,而 VNC 受協議限制,無法做這樣的動態有損壓縮。

其次是安全性,VNC 使用自己單獨的端口,使用自己定義的協議來傳輸數據,並且具有自己的一套密碼認證方案,因此安全性完全取決於它自身實現的健壯性。NX 使用的是系統 SSH 協議,沒有自己單獨的一套身份驗證機制,因此安全性完全依賴於系統 SSH 的安全性,不會引入新的安全隱患。

最後是其它服務的轉發。NX 內置了對於文件共享、打印機共享以及本地聲音系統共享的轉發機制,連接到遠程系統的時候可以非常方便地使用本地的資源。VNC 本身是不支持這些操作的,雖然對於高級用戶而言,通過各種輔助軟件和精妙的配置,以上功能都能實現,但畢竟不如 NX 這樣本身內置了全部支持來得方便。

2 安裝指南
NX 的安裝很簡單,直接到 NX 的官方網站 去,找到適合自己平台的安裝包,直接安裝就可以了。對於客戶端而言,只需要裝 nxclient 就行了。對於服務端而言,需要同時安裝 nxclient、nxnode 和 nxserver,由於服務端的程序用到了客戶端的庫,因此安裝服務端的時候,必須先在服務端也安裝一份客戶端才行。安裝完畢之後服務端會自動啟動,如果沒有什麼高級需求的話,不需要對服務端進行什麼特殊配置。

3 設置分辨率
我們這裡說的“分辨率”,指的是 resolution,即“每英寸對應多少個像素”(DPI),不是 geometry,即“屏幕寬度和高度分別是多少像素”。Geometry 在 NX 登錄的時候可以直接在客戶端設置,登錄之後也可以通過拖拽 NX 的窗口進行調節,不需要通過特殊的設置實現。

NX 默認的分辨率是 75dpi,由於 KDE 和 GNOME 程序都能強制 override 系統分辨率,將默認分辨率設置為 96dpi,因此對於 KDE 和 GNOME 程序而言,系統分辨率不正確並沒有太大問題。但系統裡畢竟還是有一些特殊的程序是不考慮 KDE 和 GNOME 的分辨率設置,直接使用系統分辨率的。

修改 NX 分辨率的方式是,到 NX 的安裝路徑下,找到 etc 目錄 之下的 node.cfg,在文件中查找:AgentExtraOptions 字樣,如果這個單詞在該文件裡完全不存在,則直接在文件尾部添加:

AgentExtraOptions = "-dpi 96"

如果 AgentExtraOptions 已經存在的話,則在原有的 AgentExtraOptions = "..." 的後引號前面加一個空格,補上 -dpi 96,譬如如果原先內容是:

AgentExtraOptions = "-nolisten tcp"

則改為:

AgentExtraOptions = "-nolisten tcp -dpi 96"

4 遠程聲音配置
Linux 下的聲音系統極其混亂,導致在 Linux 下想要讓系統正常發聲,往往需要很費一番周折。在 NX 下的遠程聲音效果並不好,延時很嚴重,而且音質非常糟糕,配置遠程聲音的主要目的是方便播放一些提示音來監聽工作狀態,譬如滇狐喜歡在編譯的時候設置編譯完成後播放一段提示音,這樣在 NX 裡編譯的時候就可以切換到本地玩一些別的事情了。

4.1 客戶端
NX 在遠程播放聲音的時候,是通過把遠程的數據轉發到本地的一個 EsounD 服務器上實現的,因此,它必須現在本地啟動一個 ESD。在 NX 的安裝包裡,提供了一個 NX 實現的 ESD,叫 nxesd,就在 NX 安裝目錄的 bin 底下。

然而,這個聲音服務器直接通過 OSS 接口和聲卡打交道,和本地已有的別的聲音服務器並不能和睦相處。為了保證這個不聽話的 nxesd 運行正常,我們需要通過本地聲音服務器提供的 OSS wrapper 來啟動它的聲音服務器:如果本地的聲音系統是 artsd,則使用 artdsp 作為 wrapper;如果本地的聲音系統是 ESD,則使用 esddsp 作為 wrapper;如果本地的聲音系統是 alsa,則使用 aoss 作為 wrapper;如果本地的聲音系統是 pulseaudio,則使用 padsp 作為 wrapper;如果本地的聲音系統不在上面列出的范圍裡,請自行查找相應的 wrapper 程序。

由於 nxclient 在啟動的時候會自動調用 nxesd,因此,為了將我們的 wrapper 添加進去,我們需要先把 nxesd 改個名,讓 nxclient 無法直接調用到它:

sudo mv nxesd nxesd.bin

然後,我們創建一個腳本,命名為 nxesd,並且給它加上可執行屬性。這樣,nxclient 在調用 nxesd 的時候,調用到的就是我們編寫的腳本了,腳本內容如下:

#!/bin/sh

# Replace "padsp" below to your actual OSS wrapper
exec padsp /usr/NX/bin/nxesd.bin "$@"

記得將其中的 padsp 替換為你真實的 OSS wrapper 程序,並將 /usr/NX/ 替換為你真實的 NX 安裝路徑。

4.2 服務端
NX 在服務端會虛擬出一個 ESD 服務器來,因此,我們需要將所有支持 ESD 的程序設置為通過 ESD 來發聲。

KDE 系統設置裡的“多媒體”中能夠直接識別出“Esound (ESD)”,直接將該選項提到設備列表的最前方即可。

GNOME 默認就是支持 ESD 的,無須進行特別配置。但 GNOME 下還有很多程序是通過 GStreamer 來發聲的,因此我們需要對 GStreamer 作一些配置。運行 gstreamer-properties,在“音頻”的“Default Output”下拉框中選擇:“ESD - Enlightenment 聲音守護程序”即可。至於“Default Input”,隨便選一個就行,譬如“靜音”,不會有人想用遠程的服務器來錄音的。

配置了 KDE 和 GNOME 的聲音環境之後,絕大部分程序應該就可以正常發聲了。還有一個最棘手的,就是網頁裡的 Flash。雖然我們不會在服務器上看網絡視頻,但能聽到網絡聊天程序通過 Flash 發出的提示音也是很重要的事情。Flash 發聲是通過 alsa 接口進行的,並且無法配置成別的接口。因此,為了讓 Flash 能發聲,我們必須在遠程包裝一個 alsa。

ESD 是無法被直接包裝成 alsa 的,但我們可以先把 ESD 包裝成 PulseAudio,然後再把 PulseAudio 包裝成 alsa,這樣 Flash 就能正常播放了。

首先,我們將 ESD 包裝成 PulseAudio,要做到這點,我們需要啟動一個 PulseAudio 服務器,使用 ESD 作為 PulseAudio 服務器的輸出接口。由於 NX 模擬的 ESD 每次啟動監聽的端口都不一樣,因此我們需要通過一個腳本來創建 PulseAudio 的配置文件,以便 PulseAudio 能找到正確的 ESD 端口來進行輸出:

#!/usr/bin/env bash

# Set up the pulseaudio remote sound
cat > ~/.pulse/default.pa <<EOF
#!/usr/bin/pulseaudio -nF

load-module module-esound-sink sink_name=esdoutput server=$ESPEAKER rate=44100
set-default-sink esdoutput
load-module module-esound-protocol-unix
load-module module-native-protocol-unix
load-module module-stream-restore
load-module module-rescue-streams
.nofail
load-module module-x11-publish
EOF
pulseaudio -k
pulseaudio -nF ~/.pulse/default.pa &

將這段腳本設置為每次登錄系統的時候自動運行,這段腳本會從環境變量中獲得正確的 ESD 端口,創建相應的 PulseAudio 配置文件,殺死之前啟動的 PulseAudio 服務器並啟動新的服務器。運行了這段腳本之後,我們就獲得了一個能夠將聲音成功重定向到 ESD 上的 PulseAudio 服務器。

接下來,我們配置 alsa 讓它能將聲音輸出到 PulseAudio 上來。在用戶主目錄下創建 alsa 的配置文件 ~/.asoundrc,內容如下:

pcm.pulse {
type pulse
}
ctl.pulse {
type pulse
}
pcm.!default {
type pulse
}
ctl.!default {
type pulse
}

至此,我們成功模擬出來了一個 alsa 聲音系統,可以將所有來自 alsa 的聲音重定向給 PulseAudio,然後 PulseAudio 把聲音發到虛擬 ESD,然後送回本地的 nxesd,再通過本地的 OSS wrapper 發給本地的聲音服務器然後我們就聽到聲音了。終於,網頁中的 Flash 可以正常發聲了。

Copyright © Linux教程網 All Rights Reserved