اوبنتولینوکس

آموزش نصب و پیکربندی VNC روی اوبونتو 22.04 و 24.04

مقدمه

VNC (مخفف Virtual Network Computing) یک پروتکل دسترسی گرافیکی از راه دور است. این پروتکل به‌روزرسانی‌های فریم‌بافر (Framebuffer) را به صفحه نمایش محلی شما استریم می‌کند و هم‌زمان رویدادهای کیبورد و ماوس را به ماشین راه‌دور فوروارد می‌کند؛ چیزی که با انتظارات مدیران سیستم از مدیریت فایل‌ها، مرورگرها و ابزارهای دسکتاپ بدون حضور فیزیکی کنار کنسول هم‌خوانی دارد.

این آموزش اوبونتو 22.04 و نسخه‌های LTS را پوشش می‌دهد. مسیر نصب استاندارد خط فرمان را با پکیج‌های TigerVNC از مخازن اوبونتو می‌سازید، آن‌ها را برای نشست‌های سبک با Xfce همراهی می‌کنید و در صورت استانداردسازی روی GNOME، به‌صورت اختیاری از آن استفاده می‌کنید. TigerVNC از کدبیس تاریخی TightVNC انشعاب گرفته و به‌روزرسانی‌های خود را در اوبونتو عرضه می‌کند؛ بنابراین در آموزش‌های مدرن جایگزین TightVNC شده اما گردش کار آشنای vncserver را حفظ می‌کند. رمز عبور VNC را با vncpasswd تنظیم و دیسپلی :1 را اختصاص می‌دهید، ترافیک را داخل یک تونل SSH قرار می‌دهید و یک یونیت systemd برای سرور VNC ثبت می‌کنید تا ری‌استارت‌ها تکرارپذیر بمانند.

VNC با پروتکل Remote Desktop (RDP) متفاوت است؛ چرا که روی انتقال خام فریم‌بافر تمرکز دارد، نه پشته‌های مذاکره متمرکز بر ویندوز که در کلاینت‌های RDP رایج‌اند. فوروارد X از طریق SSH، پنجره‌های منفرد X11 را از طریق SSH ارسال می‌کند، در حالی که VNC یک بوم نشست کامل تحویل می‌دهد که حتی با قطع‌شدن کلاینت شما باقی می‌ماند. زمانی VNC را انتخاب کنید که می‌خواهید یک دسکتاپ اختصاصی روی سرور داشته باشید و فشرده‌سازی مبتنی بر مستطیل (Rectangle) را بپذیرید. زمانی فوروارد X از طریق SSH را انتخاب کنید که فقط به چند اپلیکیشن محدود نیاز دارید و از قبل به امنیت X11 روی شبکه‌تان اعتماد دارید.

در سراسر این آموزش، TigerVNC به آدرس 127.0.0.1 متصل (Bind) می‌ماند و شما از طریق فوروارد پورت SSH به آن دسترسی پیدا می‌کنید؛ به‌جای اینکه پورت TCP 5901 را مستقیماً در معرض دید قرار دهید.

نکات کلیدی

  • TigerVNC سرور VNC پیشنهادی برای اوبونتو 22.04 و 24.04 است. این پکیج در مخازن پیش‌فرض عرضه می‌شود، اصلاحات امنیتی بالادستی را دنبال می‌کند و جانشین پکیج‌های قدیمی TightVNC در آموزش‌های قدیمی‌تر است.
  • ترافیک VNC به‌صورت پیش‌فرض رمزنگاری نشده است. TigerVNC را با فلگ -localhost yes به 127.0.0.1 متصل کنید و از طریق یک تونل SSH به آن دسترسی داشته باشید؛ هرگز پورت 5901 را مستقیماً در معرض نمایش قرار ندهید.
  • Wayland با TigerVNC ناسازگار است. روی هر هاست اوبونتو 22.04 یا 24.04 که GDM3 را اجرا می‌کند، قبل از پیکربندی VNC مقدار WaylandEnable=false را در /etc/gdm3/custom.conf تنظیم کنید. سرورهای هدلس (Headless) بدون GDM3 تحت تأثیر قرار نمی‌گیرند.
  • شماره دیسپلی VNC به پورت TCP 5900 به‌علاوه شماره دیسپلی نگاشت می‌شود. دیسپلی :1 روی پورت 5901 گوش می‌دهد، دیسپلی :2 روی 5902 و به همین ترتیب.
  • یک یونیت systemd الگویی (Templated) با نام vncserver@.service راه‌اندازی خودکار هنگام بوت و مدیریت استاندارد systemctl را هندل می‌کند. عدد Instance بعد از @، شماره دیسپلی است؛ نه نام کاربری.

پیش‌نیازها

برای دنبال کردن این آموزش به موارد زیر نیاز دارید:

  • یک سرور اوبونتو 22.04 یا 24.04 — مثلاً یک سرور مجازی از پارمین کلود — با دسترسی sudo، یک کاربر غیر root و UFW پیکربندی‌شده. اگر هنوز این کار را انجام نداده‌اید، ابتدا راهنمای راه‌اندازی اولیه سرور با اوبونتو 22.04 را کامل کنید.
  • دسترسی SSH به آن سرور. برای امن‌سازی اختیاری: راهنمای راه‌اندازی کلیدهای SSH روی اوبونتو 22.04.
  • یک کامپیوتر محلی با TigerVNC Viewer، RealVNC Viewer، Remmina یا کلاینت دیگری که به‌محض فعال‌شدن تونل SSH آماده اتصال باشد. برنامه macOS Screen Sharing هم وقتی روی پورت فورواردشده localhost تنظیم شود، کار می‌کند.

انتخاب یک سرور VNC برای اوبونتو

پروژه سرور را با نحوه تحویل دسکتاپ‌هایتان هم‌راستا کنید. نشست‌های مجازی برای سرورهای ابری پارمین کلود مناسب‌اند، در حالی که سرورهای آینه‌ای (Mirror) برای ایستگاه‌های کاری کنار میز مناسب‌ترند.

TigerVNC (پیشنهادی)

TigerVNC در مخازن اوبونتو با نام‌های tigervnc-standalone-server و tigervnc-common عرضه می‌شود و اصلاحات امنیتی بالادستی را سریع دنبال می‌کند. روی سرورهای هدلس، وقتی رم بیکاری (Idle) پایین می‌خواهید، آن را با XFCE همراه کنید.

TightVNC

دستورالعمل‌های TightVNC هنوز در وبلاگ‌های قدیمی‌تر دست‌به‌دست می‌شوند، اما TigerVNC در اوبونتو جانشین آن مجموعه شده است. روی TigerVNC بمانید؛ مگر اینکه الزامات انطباقی، تطابق بایت‌به‌بایت با مستندات قدیمی را الزام کنند.

RealVNC

RealVNC برای تیم‌هایی مناسب است که اتصال ابری واسط‌دار (Brokered) و بسته‌های سیاست سازمانی می‌خواهند. وقتی این توافق برایتان منطقی است، پکیج‌های .deb فروشنده را نصب کنید؛ در غیر این صورت TigerVNC نیازهای صرفاً مخزنی را پوشش می‌دهد.

x11vnc

x11vnc به یک دیسپلی Xorg موجود متصل می‌شود، به‌جای اینکه یک فریم‌بافر Xvnc جدید بسازد. وقتی به همکاری روی کنسول فیزیکی نیاز دارید از آن استفاده کنید؛ نه روی سرورهای هدلیسی که از صفر ساخته می‌شوند.

مقایسه سرورهای رایج VNC

سرور VNCپشتیبانی اوبونتو 22.04پشتیبانی اوبونتو 24.04پشتیبانی Waylandاحراز هویتمجوزوضعیت نگهدارینکات
TigerVNCبله (مخازن پیش‌فرض)بله (مخازن پیش‌فرض)خیر (فقط Xorg)رمز عبور VNC، X.509GPL-2.0فعالپیشنهادی برای سرورهای هدلس
TightVNCبله (مخزن universe، بدون نگهداری بالادستی)بله (مخزن universe، بدون نگهداری بالادستی)خیر (فقط Xorg)رمز عبور VNCGPL-2.0راکد (آخرین نسخه بالادستی: 2009)کاربردی اما بدون پچ‌های امنیتی بالادستی
x11vncبله (مخازن پیش‌فرض)بله (مخازن پیش‌فرض)خیر (فقط Xorg)رمز عبور VNC، SSL اختیاریGPL-2.0محدودنیازمند نشست Xorg موجود؛ مناسب هدلس نیست
RealVNCبله (.deb دستی)بله (.deb دستی)جزئی (حالت مستقیم روی Xorg؛ حالت رله ابری موجود)رمز عبور VNC، حساب RealVNCتجاری (پلن شخصی رایگان)فعالرله ابری نیازمند حساب است؛ حالت مستقیم بدون حساب کار می‌کند

توجه: اگر قبلاً نسخه اوبونتو 20.04 این آموزش را دنبال کرده‌اید، مراحل زیر TightVNC را با TigerVNC جایگزین کرده و هم برای اوبونتو 22.04 و هم 24.04 اعمال می‌شوند. برای مرجع قدیمی، راهنمای نصب و پیکربندی VNC روی اوبونتو 20.04 را ببینید.

مرحله ۱ — نصب محیط دسکتاپ

این مرحله، پشته گرافیکی‌ای را نصب می‌کند که نشست VNC شما راه‌اندازی خواهد کرد. Xfce مصرف رم و CPU را محدود می‌کند که همین موضوع، نشست‌های XFCE را روی سرورهای کوچک پارمین کلود پاسخگو نگه می‌دارد.

ایندکس پکیج‌ها را به‌روز کنید:

sudo apt update

خروجی:

Hit:1 http://security.ubuntu.com/ubuntu jammy-security InRelease
Hit:2 http://archive.ubuntu.com/ubuntu jammy InRelease
Reading package lists... Done

نام رمز (Codename) در خروجی، نسخه اوبونتوی شما را منعکس می‌کند. اوبونتو 22.04 مقدار jammy و اوبونتو 24.04 مقدار noble را نشان می‌دهد. هر دو مورد طبیعی هستند.

Xfce را به‌همراه ابزارهای کمکی نصب کنید:

sudo apt install xfce4 xfce4-goodies

خروجی:

Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  xfce4 xfce4-goodies
0 upgraded, 2 newly installed, 0 to remove, 0 not upgraded.
Need to get 12.4 MB of archives.
After this operation, 45.2 MB of additional disk space will be used.
Do you want to continue? [Y/n]

اگر نصب‌کننده درباره یک مدیر نمایش (Display Manager) پیش‌فرض سوال بپرسد، در یک سرور هدلس که فقط Xfce را از طریق VNC راه‌اندازی می‌کنید، هر گزینه‌ای قابل قبول است.

پایه اختیاری GNOME برای خوانندگانی که قصد دارند نشست مبتنی بر GNOME داشته باشند: فقط در صورتی که رم بالاتر و الزام Xorgِ مرحله ۲ را بپذیرید، ubuntu-desktop یا gnome-session را نصب کنید.

مرحله ۲ — مدیریت Wayland در اوبونتو 22.04 و 24.04

اوبونتو 22.04 و 24.04 در صورت نصب بودن GNOME و GDM3، به‌صورت پیش‌فرض از Wayland استفاده می‌کنند؛ اما TigerVNC دیسپلی‌های مجازی Xorg می‌سازد و نمی‌تواند یک نشست Wayland را به اشتراک بگذارد. این مرحله GDM3 را به Xorg سوئیچ می‌کند تا نشست محلی GNOME و TigerVNC از یک پروتکل دیسپلی مشترک استفاده کنند؛ که همین موضوع از کنسول‌های خالی (Blank) هنگام عیب‌یابی مشکلات گرافیکی روی خود ماشین جلوگیری می‌کند.

قبل از ادامه، بررسی کنید که GDM3 فعال است یا خیر:

systemctl is-active gdm3

خروجی:

active

اگر خروجی inactive یا Unit gdm3.service could not be found باشد، GDM3 روی این هاست در حال اجرا نیست. از بقیه این مرحله صرف‌نظر کرده و به مرحله ۳ بروید.

پیکربندی GDM را ویرایش کنید:

sudo nano /etc/gdm3/custom.conf

زیر بخش [daemon]، مطمئن شوید فایل شامل این خط است:

/etc/gdm3/custom.conf

WaylandEnable=false

برای اعمال این تنظیم، ریبوت کنید:

sudo reboot

خروجی:

Connection to your_server_ip closed by remote host.

پس از بازگشت سرور، در صورت داشتن کنسول فیزیکی یا سریال از طریق آن وارد شوید، در آنجا یک ترمینال باز کنید و نوع نشست را بررسی کنید:

echo $XDG_SESSION_TYPE

خروجی:

x11

توجه: وقتی اوبونتوی Server را بدون GDM مستقر می‌کنید و فقط نشست‌های مجازی TigerVNC را راه‌اندازی می‌کنید، از این مرحله صرف‌نظر کنید. وقتی gdm3 نصب است و GNOME به‌صورت محلی روی همان ماشین مجازی اجرا می‌شود، این مرحله را نگه دارید.

مرحله ۳ — نصب سرور TigerVNC

این مرحله هم برای اوبونتو 22.04 و هم اوبونتو 24.04 بدون هیچ تفاوتی در دستورات اعمال می‌شود. اوبونتو 22.04 دارای TigerVNC نسخه 1.12.x و اوبونتو 24.04 دارای نسخه 1.13.x است.

sudo apt install tigervnc-standalone-server tigervnc-common

خروجی:

Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  tigervnc-common tigervnc-standalone-server
0 upgraded, 2 newly installed, 0 to remove, 0 not upgraded.
Need to get 1,284 kB of archives.
After this operation, 4,980 kB of additional disk space will be used.
Do you want to continue? [Y/n]

اطلاعات Build را چاپ کنید:

vncserver --version

خروجی موردانتظار روی اوبونتو 22.04 (اوبونتو 24.04 نسخه 1.13.x را با تاریخ Build جدیدتری نشان می‌دهد):

TigerVNC Server version 1.12.0, built Apr  8 2022 00:00:00
Copyright (C) 1999-2022 TigerVNC Team and many others (see README.rst)
See https://www.tigervnc.org for information on TigerVNC.
Underlying X server release 12101004, The X.Org Foundation

رشته‌های دقیق نسخه با انتشار Buildهای امنیتی اوبونتو تغییر می‌کنند، اما همیشه باید بعد از نصب، یک بنر TigerVNC ببینید.

مرحله ۴ — پیکربندی سرور VNC

این مرحله رمزهای عبور و هوک‌های راه‌اندازی را تعریف می‌کند تا هر دیسپلی، دسکتاپ شما را به‌طور قابل‌اتکا راه‌اندازی کند.

تنظیم رمز عبور VNC

ابزار تعاملی را اجرا کنید:

vncpasswd

خروجی:

Password:
Verify:
Would you like to enter a view-only password (y/n)? n

TigerVNC رمز عبور را به‌صورت یک رشته بایتی مختل‌شده در ~/.vnc/passwd ذخیره می‌کند. این پروتکل بدون توجه به آنچه تایپ می‌کنید، رمزهای عبور را به ۸ کاراکتر کوتاه می‌کند؛ پس از یک مقدار یکتا استفاده کنید و از رمز عبور حساب سیستمی خود استفاده مجدد نکنید.

ساخت ~/.vnc/xstartup

قبل از ویرایش، نشست‌های سرگردان را متوقف کنید:

vncserver -kill :1

خروجی:

Killing Xvnc process ID 17555

اگر به‌جای آن پیام Can't find را دیدید، ادامه دهید؛ چون هیچ نشستی فعال نبوده است.

اسکریپت راه‌اندازی XFCE

فایل راه‌اندازی را باز کنید:

nano ~/.vnc/xstartup

آن را با این محتوا پر کنید:

~/.vnc/xstartup

#!/bin/bash
xrdb $HOME/.Xresources 2>/dev/null
startxfce4 &

اسکریپت راه‌اندازی GNOME (فقط Xorg)

nano ~/.vnc/xstartup

از این محتوا استفاده کنید:

~/.vnc/xstartup

#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec dbus-run-session -- gnome-session

GNOME رم بیشتری نسبت به Xfce مصرف می‌کند؛ اگر این مسیر را انتخاب کردید، سوآپ را زیر نظر بگیرید.

تنظیم دسترسی اجرا

اسکریپت را قابل اجرا علامت‌گذاری کنید:

chmod +x ~/.vnc/xstartup

این دستور در صورت موفقیت، خروجی‌ای تولید نمی‌کند. دسترسی را با ls -la ~/.vnc/xstartup بررسی کنید:

ls -la ~/.vnc/xstartup

خروجی:

-rwxr-xr-x 1 sammy sammy 60 May  3 14:00 /home/sammy/.vnc/xstartup

مرحله ۵ — راه‌اندازی و تست سرور VNC

این مرحله تأیید می‌کند که سرور TigerVNC قبل از خودکارسازی راه‌اندازی، در حال گوش دادن است.

دیسپلی :1 را راه‌اندازی کنید که به پورت TCP 5901 نگاشت می‌شود؛ چون VNC به پورت 5900 به‌علاوه شماره دیسپلی متصل می‌شود:

vncserver :1 -geometry 1920x1080 -depth 24 -localhost yes

خروجی:

New 'server.example.com:1 (sammy)' desktop is server.example.com:1

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

دیسپلی‌های فعال را فهرست کنید:

vncserver -list

خروجی:

TigerVNC server sessions:

X DISPLAY #     PROCESS ID
:1              18442

تأیید کنید که Listenerها فقط به لوپ‌بک (Loopback) متصل شده‌اند:

ss -tlnp | grep 5901

خروجی:

LISTEN 0      5            127.0.0.1:5901      0.0.0.0:*    users:(("Xvnc",pid=18442,fd=9))

اگر ss چیزی چاپ نکرد، فایل‌های ~/.vnc/*.log را با tail بررسی کنید؛ چون این فایل‌ها بیشتر مواردی را که TigerVNC در آن‌ها راه‌اندازی نمی‌شود، توضیح می‌دهند.

مرحله ۶ — ساخت یک سرویس Systemd برای VNC

این مرحله کنترل چرخه حیات را به systemd می‌سپارد تا TigerVNC بعد از به‌روزرسانی‌های کرنل بازگردد.

یونیت الگو (Template) را بسازید:

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

محتوای زیر را وارد کنید:

/etc/systemd/system/vncserver@.service

[Unit]
Description=TigerVNC for display %i
After=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 :%i -geometry 1920x1080 -depth 24 -localhost yes
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

در ExecStart باید مقدار -localhost yes پاس داده شود، نه یک فلگ تنها (-localhost)؛ تا TigerVNC اتصال‌های TCP با مبدأ راه‌دور را بدون SSH رد کند.

متادیتای systemd را بارگذاری مجدد کنید:

sudo systemctl daemon-reload

سرویس را برای دیسپلی ۱ فعال و راه‌اندازی کنید:

sudo systemctl enable vncserver@1.service

خروجی:

Created symlink /etc/systemd/system/multi-user.target.wants/vncserver@1.service → /etc/systemd/system/vncserver@.service.
sudo systemctl start vncserver@1.service

راه‌اندازی موفق، خروجی‌ای تولید نمی‌کند. بلافاصله بعد از آن، systemctl status را اجرا کنید تا مطمئن شوید سرویس بالا آمده است.

وضعیت زمان اجرا را بررسی کنید:

sudo systemctl status vncserver@1.service

خروجی:

● vncserver@1.service - TigerVNC for display 1
     Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
     Active: active (running) since <day> <date> <time> UTC; 5s ago
    Process: 20111 ExecStartPre=/usr/bin/vncserver -kill :1 (code=exited, status=2)
    Process: 20115 ExecStart=/usr/bin/vncserver :1 -geometry 1920x1080 -depth 24 -localhost yes (code=exited, status=0/SUCCESS)
   Main PID: 20126 (vncserver)
      Tasks: 86 (limit: 4647)
     Memory: 168.2M
        CPU: 4.932s
     CGroup: /system.slice/system-vncserver.slice/vncserver@1.service
             └─20126 /usr/bin/Xvnc :1 -localhost=yes ...

وقتی این الگو را گسترش می‌دهید، برای عملیات بیشتر، راهنمای استفاده از systemctl برای مدیریت سرویس‌ها و یونیت‌های systemd را ببینید.

مرحله ۷ — اتصال امن از طریق تونل SSH

این مرحله TigerVNC را از اینترنت عمومی دور نگه می‌دارد و در عین حال به کلاینت دسکتاپ شما اجازه اتصال می‌دهد.

هشدار: پورت TCP 5901 را در UFW یا فایروال‌های ابری باز نکنید. اسکنرهای خودکار دائماً در حال بررسی VNC هستند. پورت را بسته نگه دارید و به SSH تکیه کنید. هنگام تنظیم قوانین، راهنمای راه‌اندازی فایروال با UFW روی اوبونتو را ببینید.

از ترمینال لینوکس یا macOS روی لپ‌تاپ خود، اجرا کنید:

ssh -L 59000:localhost:5901 -C -N -f sammy@your_server_ip
  • -L 59000:localhost:5901 بعد از موفقیت احراز هویت، پورت محلی 59000 را به localhost:5901 روی هاست راه‌دور متصل می‌کند.
  • -C فشرده‌سازی را برای آپلینک‌های خانگی کندتر فعال می‌کند.
  • -N به SSH می‌گوید یک شل راه‌دور اجرا نکند تا نشست فقط به فورواردینگ اختصاص بماند.
  • -f بعد از احراز هویت، SSH را به پس‌زمینه می‌برد تا خط فرمان شما برگردد، در حالی که تونل متصل می‌ماند.
  • sammy@your_server_ip کاربر و هاست راه‌دور را به شکل user@host مشخص می‌کند.

نمای کلی ASCII از مسیر فورواردینگ:

[Laptop]  VNC viewer --> localhost:59000 --> SSH session --> server localhost:5901 --> Xvnc display :1

ویندوز 10 و نسخه‌های جدیدتر شامل OpenSSH هستند؛ همان دستور بالا را از PowerShell یا Command Prompt و بدون هیچ تغییری در فلگ‌ها اجرا کنید.

اگر روی ویندوز از PuTTY استفاده می‌کنید، روی نوار عنوان پنجره راست‌کلیک کرده و «Change Settings…» را انتخاب کنید:

[تصویر: راست‌کلیک روی نوار بالایی برای نمایش گزینه Change Settings]

به بخش Connection بروید، SSH را باز کنید، Tunnels را انتخاب کنید، مقدار 59000 را به‌عنوان Source port و localhost:5901 را به‌عنوان Destination وارد کنید، روی Add کلیک کنید و سپس Apply را بزنید:

[تصویر: نمونه پیکربندی تونل SSH در PuTTY]

برای آشنایی با تونل‌های معکوس (Reverse Tunnel) و چیدمان‌های Jump Host، راهنمای استفاده از تونل‌کردن SSH را بخوانید.

به‌طور مستقل از نوع کلاینت، نمایش‌گر (Viewer) همیشه به فوروارد محلی هدف می‌گیرد (اینجا localhost:59000)؛ نه IP عمومی سرور.

نمایش‌گر خود را به localhost:59000 متصل کنید، در صورت نمایش هشدار کلید هاست آن را بپذیرید و سپس با رمز عبوری که در مرحله ۴ ساختید، احراز هویت کنید. باید فضای کاری پیش‌فرض Xfce را ببینید:

[تصویر: اتصال VNC به سرور اوبونتو 22.04 با محیط دسکتاپ Xfce]

فایل‌ها را از طریق Thunar یا هر شبیه‌ساز ترمینالی مرور کنید:

[تصویر: مدیریت فایل از طریق اتصال VNC به اوبونتو 22.04]

بستن نمایش‌گر VNC، کلاینت را قطع می‌کند اما نشست سمت سرور را در حال اجرا نگه می‌دارد. اپلیکیشن‌ها و پنجره‌های باز شما بین نشست‌ها باقی می‌مانند و می‌توانید هر زمان که خواستید، با برقراری مجدد تونل SSH و باز کردن مجدد نمایش‌گر، دوباره متصل شوید. دستور pkill زیر برای از بین بردن خودِ تونل وقتی کار روزتان تمام شده است؛ نه برای پایان‌دادن به یک نشست VNC منفرد.

چون فلگ -f پروسه SSH را به پس‌زمینه می‌برد، برای متوقف‌کردن تونل به‌جای فشردن CTRL+C، خط فرمان آن را هدف بگیرید:

pkill -f 'ssh -L 59000:localhost:5901'

اگر عمداً -f را حذف کرده‌اید، فشردن CTRL+C در همان نشست SSHِ پیش‌زمینه، تونل را فوراً از بین می‌برد.

عیب‌یابی مشکلات رایج VNC روی اوبونتو

عیب‌یابی را روی سرور شروع کنید؛ قبل از اینکه به شبکه لپ‌تاپ خود مشکوک شوید. وضعیت systemctl status را تأیید کنید، لاگ‌های ~/.vnc را بخوانید و سپس فورواردینگ SSH را روی ورک‌استیشن خود بررسی کنید. این ترتیب از ویرایش‌های بیهوده فایروال جلوگیری می‌کند؛ در مواردی که TigerVNC اصلاً راه‌اندازی نشده است. هر وقت ss وجود Listener را تأیید کرد اما پکت‌ها نمی‌رسند، راهنمای راه‌اندازی فایروال با UFW روی اوبونتو را دم دست داشته باشید.

راه‌اندازی‌نشدن سرور VNC

بعد از هر بوت ناموفق، فایل ~/.vnc/<hostname>:<display>.log را با tail بررسی کنید؛ مثلاً /home/sammy/.vnc/server.example.com:1.log. دستور vncserver -kill :1 را اجرا کنید، مشکلات xstartup را رفع کنید و سپس یونیت systemd را ری‌استارت کنید.

صفحه سیاه پس از اتصال

مطمئن شوید chmod +x ~/.vnc/xstartup با موفقیت انجام شده و startxfce4 & یا بلوک dbus-run-session مربوط به GNOME همچنان موجود است. نبودن بیت‌های اجرا، TigerVNC را روی یک فریم‌بافر خالی متوقف می‌کند.

شکست احراز هویت

دستور vncpasswd را اجرا کنید، سرویس را با sudo systemctl restart vncserver@1.service ری‌استارت کنید و از طریق یک تونل تازه دوباره متصل شوید.

Connection Refused روی پورت 5901

دستورات sudo systemctl status vncserver@1.service، ss -tlnp | grep 5901 و journalctl -u vncserver@1.service -n 50 را اجرا کنید. اگر Listenerها سالم به نظر می‌رسند، بررسی کنید که فوروارد SSH شما همچنان در حال اجراست؛ چون نمایش‌گر همیشه به localhost روی ماشینی که میزبان انتهای تونل است، وصل می‌شود.

خطاهای نمایشی مرتبط با Wayland

فایل /etc/gdm3/custom.conf را دوباره باز کنید، WaylandEnable=false را تأیید کنید، ریبوت کنید و روی نشست کنسول، echo $XDG_SESSION_TYPE را آن‌قدر تکرار کنید تا مقدار x11 چاپ شود.

سوالات متداول

۱. چطور سرور VNC را روی اوبونتو 24.04 نصب و پیکربندی کنم؟

اوبونتو 24.04 همان پکیج‌های TigerVNC را با نسخه‌های پچ تازه عرضه می‌کند. پکیج tigervnc-standalone-server را نصب کنید، در صورت اجرای محلی GNOME همان ویرایش /etc/gdm3/custom.conf را اعمال کنید، ~/.vnc/xstartup را بسازید و سپس vncserver :1 -localhost yes را راه‌اندازی کنید. خروجی vncserver --version را بعد از apt install اعتبارسنجی کنید؛ چون شماره‌های فرعی بین نسخه‌ها جابه‌جا می‌شوند.

۲. کدام سرور VNC برای اوبونتو بهترین است؟

TigerVNC برای بیشتر نصب‌های اوبونتو، تعادلِ در دسترس‌بودن مخزن، مستندات و نظم نگهداری را برقرار می‌کند. TightVNC در راهنماهای تاریخی باقی مانده اما به‌روزرسانی کمتری دریافت می‌کند. RealVNC برای سازمان‌هایی مناسب است که اتصال واسط‌دار می‌خرند. x11vnc وقتی مناسب است که باید یک کنسول Xorg موجود را بازتاب دهید، نه اینکه یک فریم‌بافر مجازی بسازید.

۳. چطور بفهمم vncserver روی اوبونتو در حال اجراست؟

برای شناسه‌های نشست، vncserver -list را اجرا کنید؛ برای بررسی Listenerها، ss -tlnp | grep vnc یا ss -tlnp | grep 590 را ترکیب کنید؛ و وقتی systemd مالک پروسه است، systemctl status vncserver@1.service را بررسی کنید. خروجی Journal، کرش‌های بلافاصله بعد از ارتقای پکیج‌ها را نشان می‌دهد.

۴. آیا VNC با Wayland روی اوبونتو 22.04 یا 24.04 کار می‌کند؟

بیشتر استقرارهای TigerVNC همچنان فرض‌های X11 را دارند؛ حتی با اینکه Xvnc فریم‌بافر خودش را فراهم می‌کند. Wayland را در /etc/gdm3/custom.conf غیرفعال کنید، ریبوت کنید و روی کنسول‌های گرافیکی GNOME تأیید کنید که echo $XDG_SESSION_TYPE مقدار x11 چاپ می‌کند تا از تداخل انواع نشست جلوگیری شود.

۵. آیا جایگزین متن‌بازی برای RealVNC در مخازن اوبونتو وجود دارد؟

بله. TigerVNC با دستور sudo apt install tigervnc-standalone-server در دسترس است و نیازی به حساب کاربری ندارد. راه‌اندازی اختصاصی RealVNC خارج از محدوده این آموزش است؛ برای مجوز و مراحل نصب، مستندات رسمی RealVNC را ببینید. برای بیشتر موارد استفاده از اوبونتو، TigerVNC انتخاب پیشنهادی است.

۶. چطور به‌صورت امن به یک سرور VNC روی اوبونتو متصل شوم؟

دستور ssh -L 59000:localhost:5901 -C -N -f sammy@your_server_ip را اجرا کنید و سپس نمایش‌گر خود را به localhost:59000 متصل کنید. SSH محتوای ارسالی را رمزنگاری می‌کند، در حالی که TigerVNC روی لوپ‌بک می‌ماند. آن را با SSH مبتنی بر کلید (طبق راهنمای راه‌اندازی کلیدهای SSH روی اوبونتو 22.04) ترکیب کنید.

۷. چطور یک نشست سرور VNC روی اوبونتو را متوقف یا از بین ببرم؟

دستور vncserver -kill :1 را اجرا کنید و :1 را با هر چیزی که vncserver -list گزارش می‌کند، جایگزین کنید. وقتی systemd چرخه حیات را مدیریت می‌کند، از sudo systemctl stop vncserver@1.service استفاده کنید تا لاگ‌ها منسجم بمانند.

۸. چه محیط دسکتاپی را باید با VNC روی اوبونتو Server استفاده کنم؟

XFCE همچنان انتخاب عملی و پیش‌فرض برای بارهای کاری سرور هدلس است؛ چون مصرف CPU، رم و پهنای باند را کمینه می‌کند. GNOME وقتی کار می‌کند که به اپلیکیشن‌هایش نیاز داشته باشید؛ اما منابع اضافی اختصاص دهید و روی Xorg بمانید تا انتظارات TigerVNC هم‌راستا بمانند.

جمع‌بندی

شما TigerVNC را روی اوبونتو 22.04 یا 24.04 نصب کردید، xstartup را برای Xfce (با پوشش اختیاری GNOME) پیکربندی کردید، Listenerها را با vncserver -list و ss اعتبارسنجی کردید و یونیت‌های systemd را ثبت کردید تا سرویس از ریبوت‌ها جان سالم به در ببرد. این کارها در مجموع، راه‌اندازی استاندارد خط فرمانی را پوشش می‌دهند که اپراتورها از راهنماهای قدیمی TightVNC می‌شناسند؛ هم‌زمان با هم‌راستاکردن پکیج‌ها با مخازن نگهداری‌شده.

شما TigerVNC را متصل به لوپ‌بک نگه داشتید و به فورواردینگ SSH تکیه کردید؛ که الگوی اتصال امن مورد انتظار تیم‌ها را بدون گسترش قوانین UFW تحویل می‌دهد. اگر تیم شما از قبل از احراز هویت مبتنی بر کلید SSH استفاده می‌کند، تونل آن کلید را بدون پیکربندی اضافی به ارث می‌برد؛ SSH مبتنی بر رمز عبور هم به همین شکل کار می‌کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا