CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Trang chủHướng dẫnCách cài đặt và cấu hình VNC trên Ubuntu 22.04

Cách cài đặt và cấu hình VNC trên Ubuntu 22.04

CyStack blog 11 phút để đọc
CyStack blog22/09/2025
Reading Time: 11 minutes

Virtual Network Computing (VNC) là một hệ thống kết nối cho phép bạn sử dụng bàn phím và chuột để tương tác với môi trường máy tính để bàn trên một máy chủ từ xa. Nó giúp người dùng chưa quen thuộc với giao diện dòng lệnh dễ dàng quản lý tệp, phần mềm và cài đặt trên máy chủ từ xa hơn.

 cài đặt và cấu hình VNC

Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình VNC trên Ubuntu 22.04 với TightVNC và kết nối đến nó một cách an toàn thông qua một SSH tunnel. Sau đó, bạn sẽ sử dụng một chương trình VNC client trên máy tính cục bộ của mình để tương tác với máy chủ thông qua một môi trường máy tính để bàn đồ họa.

Điều kiện tiên quyết

Để hoàn thành hướng dẫn này, bạn cần:

  • Một máy chủ Ubuntu 22.04 với một người dùng quản trị không phải root và một tường lửa được cấu hình với UFW. Để thiết lập, hãy làm theo hướng dẫn thiết lập máy chủ ban đầu cho Ubuntu 22.04 của chúng tôi.
  • Một máy tính cục bộ đã cài đặt VNC client. VNC client bạn sử dụng phải hỗ trợ các kết nối qua SSH tunnels.
    • Trên Windows, bạn có thể sử dụng TightVNC, RealVNC hoặc UltraVNC.
    • Trên macOS, bạn có thể sử dụng chương trình Screen Sharing tích hợp sẵn, hoặc có thể sử dụng một ứng dụng đa nền tảng như RealVNC.
    • Trên Linux, bạn có thể chọn từ nhiều tùy chọn, bao gồm vinagre, krdc, RealVNC hoặc TightVNC.

Bước 1: Cài đặt môi trường máy tính để bàn và máy chủ VNC

Theo mặc định, một máy chủ Ubuntu 22.04 không đi kèm với một môi trường máy tính để bàn đồ họa hoặc một máy chủ VNC đã được cài đặt, vì vậy bạn sẽ bắt đầu bằng cách cài đặt chúng.

Bạn có nhiều lựa chọn khi chọn máy chủ VNC và môi trường máy tính để bàn. Trong hướng dẫn này, bạn sẽ cài đặt các gói cho môi trường máy tính để bàn Xfce mới nhất và gói TightVNC có sẵn từ kho lưu trữ chính thức của Ubuntu.

Cả Xfce và TightVNC đều nổi tiếng là nhẹ và nhanh, điều này sẽ giúp đảm bảo kết nối VNC sẽ mượt mà và ổn định ngay cả trên các kết nối internet chậm hơn.

Sau khi kết nối đến máy chủ của bạn bằng SSH, hãy cập nhật danh sách các gói của bạn:

sudo apt update

Bây giờ hãy cài đặt Xfce cùng với gói xfce4-goodies, chứa một vài cải tiến cho môi trường máy tính để bàn:

sudo apt install xfce4 xfce4-goodies

Trong quá trình cài đặt, bạn có thể được nhắc chọn một trình quản lý hiển thị (display manager) mặc định cho Xfce. Display manager là một chương trình cho phép bạn chọn và đăng nhập vào một môi trường máy tính để bàn thông qua một giao diện đồ họa. Bạn sẽ chỉ sử dụng Xfce khi kết nối bằng VNC client, và trong các phiên Xfce này, bạn sẽ đã đăng nhập với tư cách là người dùng Ubuntu không phải root của mình. Vì vậy, đối với mục đích của hướng dẫn này, lựa chọn display manager của bạn không quan trọng. Chọn một trong hai và nhấn ENTER.

Sau khi cài đặt hoàn tất, hãy cài đặt máy chủ TightVNC:

sudo apt install tightvncserver

Tiếp theo, chạy lệnh vncserver để đặt mật khẩu truy cập VNC, tạo các tệp cấu hình ban đầu và khởi động một phiên máy chủ VNC:

vncserver

Bạn sẽ được nhắc nhập và xác minh mật khẩu để truy cập máy của bạn từ xa:

Output
You will require a password to access your desktops.

Password:
Verify:

Mật khẩu phải dài từ sáu đến tám ký tự. Mật khẩu dài hơn 8 ký tự sẽ tự động bị cắt.

Sau khi bạn xác minh mật khẩu, bạn sẽ có tùy chọn tạo mật khẩu chỉ xem. Người dùng đăng nhập bằng mật khẩu chỉ xem sẽ không thể điều khiển phiên VNC bằng chuột hoặc bàn phím của họ.

Đây là một tùy chọn hữu ích nếu bạn muốn trình diễn một điều gì đó cho người khác bằng máy chủ VNC của bạn, nhưng điều này không bắt buộc.

Quá trình sau đó sẽ tạo các tệp cấu hình mặc định cần thiết và thông tin kết nối cho máy chủ. Ngoài ra, nó khởi chạy một phiên máy chủ mặc định trên cổng 5901.

Cổng này được gọi là cổng hiển thị, và được VNC gọi là :1. VNC có thể khởi chạy nhiều phiên trên các cổng hiển thị khác, với :2 đề cập đến cổng 5902, :3 đề cập đến 5903, v.v.

Output
Would you like to enter a view-only password (y/n)?n
xauth:  file /home/sammy/.Xauthority does not exist

New 'X' desktop isyour_hostname:1

Creating default startup script /home/sammy/.vnc/xstartup
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log

Lưu ý rằng nếu bạn muốn thay đổi mật khẩu hoặc thêm mật khẩu chỉ xem, bạn có thể làm như vậy với lệnh vncpasswd:

vncpasswd

Tại thời điểm này, máy chủ VNC đã được cài đặt và đang chạy. Bây giờ bạn sẽ cấu hình nó để khởi chạy Xfce và cho phép chúng ta truy cập vào máy chủ thông qua một giao diện đồ họa.

Bước 2: Cấu hình máy chủ VNC

Máy chủ VNC cần biết các lệnh nào để chạy khi nó khởi động. Cụ thể, VNC cần biết nó nên kết nối với môi trường máy tính để bàn đồ họa nào.

Các lệnh mà máy chủ VNC chạy khi khởi động nằm trong một tệp cấu hình có tên là xstartup trong thư mục .vnc dưới thư mục chính của bạn. Startup script đã được tạo khi bạn chạy lệnh vncserver ở bước trước, nhưng bạn sẽ tạo của riêng mình để khởi chạy Xfce desktop.

Vì bạn sẽ thay đổi cách máy chủ VNC được cấu hình, trước tiên hãy dừng phiên máy chủ VNC đang chạy trên cổng 5901 với lệnh sau:

vncserver -kill :1

Đầu ra sẽ trông như thế này, mặc dù bạn sẽ thấy một PID khác:

Output
Killing Xtightvnc process ID17648

Trước khi bạn sửa đổi tệp xstartup, hãy sao lưu tệp gốc:

mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

Bây giờ hãy tạo một tệp xstartup mới và mở nó trong một trình soạn thảo văn bản, chẳng hạn như nano:

nano ~/.vnc/xstartup

Sau đó thêm các dòng sau vào tệp:

~/.vnc/xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

Dòng đầu tiên là một shebang 🤓. Trong các tệp văn bản thuần túy có thể thực thi được trên các nền tảng nix, một shebang cho hệ thống biết trình thông dịch nào để chuyển tệp đó cho việc thực thi. Trong trường hợp này, bạn đang chuyển tệp cho trình thông dịch Bash. Điều này sẽ cho phép mỗi dòng kế tiếp được thực thi như các lệnh, theo thứ tự.

Lệnh đầu tiên trong tệp, xrdb $HOME/.Xresources, yêu cầu khung GUI của VNC đọc tệp .Xresources của người dùng máy chủ. .Xresources là nơi người dùng có thể thực hiện các thay đổi đối với một số cài đặt nhất định của máy tính để bàn đồ họa, như màu sắc terminal, chủ đề con trỏ và hiển thị phông chữ.

Lệnh thứ hai yêu cầu máy chủ khởi chạy Xfce. Bất cứ khi nào bạn khởi động hoặc khởi động lại máy chủ VNC, các lệnh này sẽ tự động thực thi.

Lưu và đóng tệp sau khi thêm các dòng này. Nếu bạn đã sử dụng nano, hãy làm như vậy bằng cách nhấn CTRL + X, Y, sau đó ENTER.

Để đảm bảo rằng máy chủ VNC sẽ có thể sử dụng tệp khởi động mới này một cách đúng đắn, bạn sẽ cần làm cho nó có thể thực thi được:

chmod +x ~/.vnc/xstartup

Sau đó khởi động lại máy chủ VNC:

vncserver -localhost

Lưu ý rằng lần này lệnh bao gồm tùy chọn -localhost, tùy chọn này liên kết máy chủ VNC với giao diện loopback của máy chủ của bạn. Điều này sẽ khiến VNC chỉ cho phép các kết nối có nguồn gốc từ máy chủ nơi nó được cài đặt.

Trong bước tiếp theo, bạn sẽ thiết lập một SSH tunnel giữa máy tính cục bộ của bạn và máy chủ của bạn, về cơ bản là đánh lừa VNC nghĩ rằng kết nối từ máy tính cục bộ của bạn có nguồn gốc trên máy chủ của bạn.

Chiến lược này sẽ thêm một lớp bảo mật bổ sung xung quanh VNC, vì những người dùng duy nhất có thể truy cập nó là những người đã có quyền truy cập SSH vào máy chủ của bạn.

Bạn sẽ thấy đầu ra tương tự như thế này:

Output
New 'X' desktop isyour_hostname:1

Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log

Với cấu hình đã có, bạn đã sẵn sàng kết nối đến máy chủ VNC từ máy tính cục bộ của mình.

Bước 3: Kết nối đến máy tính để bàn VNC một cách an toàn

Bản thân VNC không sử dụng các giao thức an toàn khi kết nối. Để kết nối an toàn đến máy chủ của bạn, bạn sẽ thiết lập một SSH tunnel và sau đó yêu cầu VNC client của bạn kết nối bằng cách sử dụng tunnel đó thay vì thực hiện một kết nối trực tiếp.

Tạo một kết nối SSH trên máy tính cục bộ của bạn chuyển tiếp một cách an toàn đến kết nối localhost cho VNC. Bạn có thể làm điều này thông qua terminal trên Linux hoặc macOS với lệnh ssh sau:

ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

Đây là ý nghĩa của các tùy chọn trong lệnh ssh này:

  • L 59000:localhost:5901: Công tắc L chỉ định rằng cổng đã cho trên máy tính cục bộ sẽ được chuyển tiếp đến máy chủ và cổng đã cho trên máy chủ đích (localhost:5901, có nghĩa là cổng 5901 trên máy chủ đích, được xác định là your_server_ip). Lưu ý rằng cổng cục bộ bạn chỉ định là hơi tùy ý; miễn là cổng không bị ràng buộc với một dịch vụ khác, bạn có thể sử dụng nó làm cổng chuyển tiếp cho tunnel của mình.
  • C: Cờ này cho phép nén, có thể giúp giảm thiểu tiêu thụ tài nguyên và tăng tốc mọi thứ.
  • N: Tùy chọn này yêu cầu ssh rằng bạn không muốn thực thi bất kỳ lệnh từ xa nào. Cài đặt này hữu ích khi bạn chỉ muốn chuyển tiếp cổng.
  • l your_username your_server_ip: Công tắc l cho phép bạn chỉ định người dùng bạn muốn đăng nhập với tư cách là người dùng khi bạn kết nối đến máy chủ. Hãy chắc chắn thay thế your_usernameyour_server_ip bằng tên của người dùng không phải root và địa chỉ IP của máy chủ của bạn.

Lưu ý: Lệnh này thiết lập một SSH tunnel chuyển tiếp thông tin từ cổng 5901 trên máy chủ VNC của bạn đến cổng 59000 trên máy tính cục bộ của bạn thông qua cổng 22 trên mỗi máy, đây là cổng mặc định cho SSH.

Giả sử bạn đã làm theo hướng dẫn thiết lập máy chủ ban đầu cho Ubuntu 22.04 trong phần điều kiện tiên quyết, bạn sẽ đã thêm một quy tắc UFW để cho phép các kết nối đến máy chủ của bạn qua OpenSSH.

Điều này an toàn hơn so với việc chỉ đơn giản mở tường lửa của máy chủ để cho phép các kết nối đến cổng 5901, vì điều đó sẽ cho phép bất kỳ ai cũng có thể truy cập máy chủ của bạn qua VNC.

Bằng cách kết nối qua một SSH tunnel, bạn đang giới hạn quyền truy cập VNC cho những máy đã có quyền truy cập SSH vào máy chủ.

Nếu bạn đang sử dụng PuTTY để kết nối đến máy chủ của mình, bạn có thể tạo một SSH tunnel bằng cách nhấp chuột phải vào thanh trên cùng của cửa sổ terminal, sau đó nhấp vào tùy chọn Change Settings….

vnc putty topbar arrow

Tìm nhánh “Connection” trong menu cây ở phía bên trái của cửa sổ PuTTY Reconfiguration. Mở rộng nhánh SSH và nhấp vào Tunnels. Trên màn hình Options controlling SSH port forwarding, nhập 59000 làm Source Port và localhost:5901 làm Destination, như thế này:

vnc putty reconf local

Sau đó nhấp vào nút Add, và sau đó nút Apply để thực hiện tunnel.

Khi tunnel đang chạy, hãy sử dụng một VNC client để kết nối đến localhost:59000. Bạn sẽ được nhắc xác thực bằng mật khẩu bạn đã đặt ở Bước 1.

Khi bạn đã kết nối, bạn sẽ thấy máy tính để bàn Xfce mặc định. Nó sẽ trông giống như thế này:

vnc xfce

Bạn có thể truy cập các tệp trong thư mục chính của mình bằng trình quản lý tệp hoặc từ dòng lệnh, như được thấy ở đây.

vnc files

Nhấn CTRL + C trong terminal cục bộ của bạn để dừng SSH tunnel và quay lại lời nhắc của bạn. Điều này cũng sẽ ngắt kết nối phiên VNC của bạn. Bây giờ bạn có thể cấu hình máy chủ VNC của mình để chạy như một systemd service.

Bước 4: Chạy VNC như một dịch vụ hệ thống

Bằng cách thiết lập máy chủ VNC để chạy như một systemd service, bạn có thể bắt đầu, dừng và khởi động lại nó khi cần, giống như bất kỳ dịch vụ nào khác.

Bạn cũng có thể sử dụng các lệnh quản lý của systemd để đảm bảo rằng VNC bắt đầu khi máy chủ của bạn khởi động.

Đầu tiên, tạo một tệp đơn vị mới có tên /etc/systemd/system/vncserver@.service:

sudo nano /etc/systemd/system/vncserver@.service

Ký hiệu @ ở cuối tên sẽ cho phép chúng ta truyền một đối số mà bạn có thể sử dụng trong cấu hình dịch vụ. Bạn sẽ sử dụng điều này để chỉ định cổng hiển thị VNC bạn muốn sử dụng khi bạn quản lý dịch vụ.

Thêm các dòng sau vào tệp. Hãy chắc chắn thay đổi giá trị của User, Group, WorkingDirectory và tên người dùng trong giá trị của PIDFILE để khớp với tên người dùng của bạn:

/etc/systemd/system/vncserver@.service
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy

PIDFile=/home/sammy/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

Lệnh ExecStartPre dừng VNC nếu nó đã chạy. Lệnh ExecStart bắt đầu VNC và đặt độ sâu màu là 24-bit với độ phân giải 1280×800. Bạn cũng có thể sửa đổi các tùy chọn khởi động này để đáp ứng nhu cầu của bạn. Ngoài ra, lưu ý rằng lệnh ExecStart lại bao gồm tùy chọn -localhost.

Lưu và đóng tệp.

Tiếp theo, làm cho hệ thống nhận biết tệp đơn vị mới:

sudo systemctl daemon-reload

Bật tệp đơn vị:

sudo systemctl enable vncserver@1.service

Số 1 sau ký hiệu @ biểu thị số hiển thị mà dịch vụ sẽ xuất hiện trên đó, trong trường hợp này là :1 mặc định như đã thảo luận ở Bước 2.

Dừng phiên máy chủ VNC hiện tại nếu nó vẫn đang chạy:

vncserver -kill :1

Sau đó bắt đầu nó như bạn sẽ bắt đầu bất kỳ dịch vụ systemd nào khác:

sudo systemctl start vncserver@1

Bạn có thể xác minh rằng nó đã bắt đầu với lệnh này:

sudo systemctl status vncserver@1

Nếu nó bắt đầu một cách chính xác, đầu ra sẽ trông như thế này:

Output
● vncserver@1.service - Start TightVNC server at startup
     Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-04-18 16:57:26 UTC; 20s ago
    Process: 97088 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2)
    Process: 97092 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :1 (code=exited, status=0/SUCCESS)
   Main PID: 97103 (Xtightvnc)
      Tasks: 77 (limit: 4665)
     Memory: 146.7M
        CPU: 4.459s
     CGroup: /system.slice/system-vncserver.slice/vncserver@1.service
. . .

Máy chủ VNC của bạn hiện đã sẵn sàng để sử dụng bất cứ khi nào máy chủ của bạn khởi động, và bạn có thể quản lý nó bằng các lệnh systemctl như bất kỳ dịch vụ systemd nào khác.

Tuy nhiên, sẽ không có bất kỳ sự khác biệt nào ở phía client. Để kết nối lại, hãy bắt đầu SSH tunnel của bạn một lần nữa:

ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

Sau đó tạo một kết nối mới bằng phần mềm VNC client của bạn đến localhost:59000 để kết nối đến máy chủ của bạn.

Kết luận

Giờ đây bạn đã có một máy chủ VNC được bảo mật và đang chạy trên máy chủ Ubuntu 22.04. Bạn có thể quản lý các tệp, phần mềm và cài đặt của mình với một giao diện đồ họa thân thiện với người dùng, và bạn sẽ có thể chạy phần mềm đồ họa như trình duyệt web từ xa.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất