6 tháng 10, 2010

Cài đặt FreeNX

Giới thiệu

Kết nối từ xa (remote access) bằng nxclient cho phép truy cập đồ hoạ qua đường ssh. Trên máy ở xa (remote server) chạy phần nxserver và, tất nhiên, sshd (ssh server). Nguyên bản NoMachine cung cấp phần xem (client viewer) miễn phí cho cả Linux, Windows, còn phần cho máy chủ (remote server) thì có bản miễn phí với tính năng hạn chế bớt, và bản thương mại (commercial). Tôi sử dụng thì thấy NX chạy tốt hơn dùng RDP (kết nối từ xa có kèm Windows) và VNC. Tại đây trình bày cách làm với hệ Linux, có sử dụng FreeNX là phần mã nguồn mở miễn phí cho máy chủ (remote). NX có nhiều dạng thức chạy, tuy nhiên ở đây chỉ trình bày dạng thức default thôi.

Cài máy ở xa (remote server)

Với Debian/Ubuntu

Trước hết bổ xung deb http://ppa.launchpad.net/freenx-team/ppa/ubuntu/ intrepid main cho /etc/apt/sources.list (thay intrepid bằng repo tương ứng, Debian Lenny dùng intrepid là OK).

# apt-get install freenx-server

Với Arch Linux

# pacman -S freenx

Thực ra, khi cài phần server thì phần mã (code) của client cũng được cài (vì cần thư viện dùng chung).

Đặt cấu hình cho máy ở xa (remote server)

Có hai phần, một là đặt cấu hình cho bản thân nxserver, hai là đặt cấu hình cho sshd (nếu cần). Nhìn chung, cấu hình chạy theo chế độ default là chạy luôn.

Khi máy trạm (client viewer) kết nối vào, là sẽ vào và chứng thực qua đường ssh với tên người dùng là nx. Như vậy, trước hết kiểm tra xem đã có người dùng này chưa:

# grep '^nx:' < /etc/passwd
nx:x:107:114:FreeNX Server,,,:/var/lib/nxserver/home/:/usr/bin/nxserver

Nghĩa là, người dùng này khi chạy sẽ vào thư mục riêng là /var/lib/nxserver/home/, và chạy /usr/bin/nxserver thay cho shell thông thường (thông thường là bash). Nếu không thấy người dùng nx này, thì cần tạo nó ra với lệnh sau, nếu là Arch Linux:

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

Còn với Debian:

# /usr/lib/nx/nxsetup --install --setup-nomachine-key

Phần --install sẽ tạo người dùng nx và chuẩn bị thư mục nhà (home) cho nó. Phần --setup-nomachine-key là sao chép (copy) chìa khoá (key) của hãng nomachine vào thư mục ~/.ssh/ của người dùng nx. Khoá (key) này cũng có kèm sẵn trong chương trình xem (client viewer). Cái này chỉ dùng khi chứng thực (authentication) của kết nối ssh thôi. Nếu muốn tăng tính an toàn, thì ta có thể không dùng key có sẵn của hãng, và tự tạo bộ key cho riêng mình. Tất nhiên, lúc đó ta phải tự sao chép key được tạo trên máy chủ (remote server) đến những máy trạm (client viewer). Tại đây, ta dùng sẵn key của hãng cho tiện. Muốn kiểm tra xem đã có key chưa:

# ls -l ~nx/.ssh/

và sẽ thấy file nào đó tên là client.id_dsa.key.

Như vậy, chứng thực ssh cho người dùng nx sẽ là dùng key (chứ không phải dùng mật khẩu). Như vậy, trong /etc/ssh/sshd_config cũng cần có cấu hình tương ứng. Nói chung cái này đã được cài đặt đúng. Tuy nhiên có thể kiểm tra lại. Ví dụ:

# cat /etc/ssh/sshd_config 
.
.
.
Port 7777
ListenAddress 0.0.0.0
PubkeyAuthentication yes
UsePAM yes
Compression yes
AllowUsers joe nx
.
.
.

Như cấu hình trên, sshd sẽ nghe ở cổng (port) 7777, và chỉ cho người dùng tên là joe (người dùng bình thường) hoặc tên là nx (người dùng đặc biệt) được phép kết nối và chứng thực. Trong trường hợp dùng cổng (port) khác với cổng 22 (cổng mặc định default của sshd) thì cần báo cho nxserver biết. Cấu hình của nó ở file /etc/nxserver/node.conf đối với Debian, hoăc file /opt/NX/etc/node.conf đối với Arch Linux.

# cat /etc/nxserver/node.conf
.
.
.
SSHD_PORT=7777
.
.
.

Sau khi mọi thứ OK thì khởi động lại dịch vụ (server). Với Arch Linux: /etc/rc.d/sshd restart. Với Debian: /etc/init.d/freenx-server restart; /etc/init.d/sshd restart

Cài đặt máy trạm (client viewer)

Chạy nxclient (với Arch Linux thì là ở /opt/NX/bin/nxclient):

Lập cấu hình kết nối:

Nếu là nối trực tiếp với máy localhost, thì có thể vào thẻ (tab) Advance để bỏ bớt phần nén số liệu và mã hoá số liệu đường truyền, và đặt tốc độ kỳ vọng (expected speed) lên mức nhanh nhất là kết nối kiểu LAN. Trong cấu hình có phần định nghĩa Key (chìa khoá). Vì ta dùng chìa khoá là cái có sẵn của NoMachine, nên không cần thay đổi gì, dùng mặc định (default) là được. Còn nếu tự tạo chìa khoá riêng thì phải cắt dán (copy & paste) vào đó:

Cần phải cho nxclient biết rằng ngay sau khi kết nối thì nó cần chạy chương trình gì trên máy chủ (remote server) để khởi động:

Lần đầu tiên chạy, thì nên chọn Run the console, tức là chạy mỗi màn hình văn bản (text) để biết rằng kết nối thành công. Như ở bên hình trên, thì tôi chạy script là /home/tri/.vnc/xstartup, nghĩa là chạy giống như của vnc, vì tôi dùng NX thay cho vnc vẫn dùng trước đây. Ngoài ra, ta có thể chạy khởi động KDE hoặc Gnome bằng các script tương ứng. Một ví dụ của .vnc/xstartup trên máy chủ (remote server) như sau:

$ cat ~/.vnc/xstartup
#!/bin/bash

cd

export PATH=~/bin:$PATH
export http_proxy=http://proxy:8888
export no_proxy='localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16'
export LANG=en_US.UTF-8
export EDITOR=vim
export BROWSER=firefox

if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then
 eval `dbus-launch --sh-syntax --exit-with-session`
fi

gnome-settings-daemon &>/dev/null

( sleep 3; lxpanel )&
exec openbox

Kết quả:


Khi chương trình cuối cùng trong script kết thúc, thì phiên làm việc (session) cũng tự động kết thúc. Cái này hơi khác với VNC một chút.

Nếu muốn quản lý các phiên làm việc (session) của NX thì chạy nxclient --admin. Ta có thể disconnect một phiên, và sang một máy trạm (client viewer) khác nối vào làm tiếp.

Lặt vặt:

  • Nếu cài tối thiểu (minimalist) thì lưu ý là cần đủ một số chương để X có thể chạy được (không nhất thiết là xorg-server, có thể là x11vnc), vì khi cài freenx, lúc kiểm tra phụ thuộc (dependency) thì không có check điều này. Chẳng hạn xfonts-base cần có, v.v.
  • Nếu khi chạy các phím arrow không chạy, thì có thể là thiếu phần ánh xạ bàn phím (key map). Có thể Google để tìm cách chỉnh lại. Ví dụ: $ sudo apt-get install xkb-data và sau đó (chạy một lần là đủ) setxkbmap.

Tham chiếu: