Virtual Network Computing یا VNC یک سیستم اتصال است که این امکان را میدهد که از موس و صفحه کلید برای ارتباط برقرار کردن با یک محیط دسکتاپ گرافیکی روی یک سیستم از راه دور استفاده نماییم. این امر باعث میشود که مدیریت فایلها، نرمافزارها و تنظیمات بر روی یک سرور از راه دور برای کاربرانی که با خط فرمان (Command Line) آشنایی ندارند، آسانتر شود.
در این آموزش، VNC را بر روی یک سرور اوبونتو Ubuntu نسخه 18.04 نصب و کانفیگ خواهیم کرد و از طریق تونل SSH به آن متصل خواهیم شد. بدین منظور از بسته TightVNC که یک بسته کنترلی سبک و سریع جهت کنترل از راه دور میباشد، استفاده میکنیم.
جهت استفاده از این آموزش به موارد زیر نیاز داریم.
sudo
vinagre
، krdc
، RealVNC یا TightVNC استفاده کنیم.بصورت پیشفرض در Ubuntu 18.04 نسخه سرور، محیط دسکتاپ گرافیکی یا VNC Server نصب نشده است. با استفاده از آموزش زیر، آخرین نسخه بستههای محیط دسکتاپ Xfce و بسته TightVNC که در مخزن رسمی اوبونتو وجود دارد را نصب خواهیم کرد.
ابتدا با استفاده از دستور زیر، لیست بستهها (Packages) را بروز میکنیم.
sudo apt update
محیط دسکتاپ را با دستور زیر نصب میکنیم.
sudo apt install xfce4 xfce4-goodies
پس از نصب محیط دسکتاپ Xfce، بسته TightVNC Server را نصب میکنیم.
sudo apt install tightvncserver
برای تکمیل پیکربندی یا کانفیگ اولیه VNC Server از دستور vncserver
برای تنظیم رمز عبور امن و ایجاد فایلهای کانفیگ اولیه استفاده میکنیم.
vncserver
در محیط ترمینال، رمز عبور برای دسترسی از راه دور (Remote) را وارد و تایید میکنیم.
خروجی:
You will require a password to access your desktops. Password: Verify:
رمز عبور میبایست بین 6 تا 8 کاراکتر باشد. رمز عبور بیشتر از 8 کاراکتر بصورت خودکار کوتاه و به 8 کاراکتر شکسته خواهد شد.
در صورت دریافت خطای زیر:
Couldn't start Xtightvnc; trying default font path. Please set correct fontPath in the vncserver script. Couldn't start Xtightvnc process. 17/02/20 06:29:03 Xvnc version TightVNC-1.3.10 17/02/20 06:29:03 Copyright (C) 2000-2009 TightVNC Group 17/02/20 06:29:03 Copyright (C) 1999 AT&T Laboratories Cambridge 17/02/20 06:29:03 All Rights Reserved. 17/02/20 06:29:03 See http://www.tightvnc.com/ for information on TightVNC 17/02/20 06:29:03 Desktop name 'X' (ubuntu-2gb-hel1-1:1) 17/02/20 06:29:03 Protocol versions supported: 3.3, 3.7, 3.8, 3.7t, 3.8t 17/02/20 06:29:03 Listening for VNC connections on TCP port 5901 Font directory '/usr/share/fonts/X11/misc/' not found - ignoring Font directory '/usr/share/fonts/X11/Type1/' not found - ignoring Font directory '/usr/share/fonts/X11/75dpi/' not found - ignoring Font directory '/usr/share/fonts/X11/100dpi/' not found - ignoring Fatal server error: could not open default font 'fixed'
میبایست بسته xfonts-base را با دستور زیر نصب نماییم.
sudo apt install xfonts-base
در صورت روبرو شدن با خطای زیر هنگام ورود به محیط VNC:
Unable to load a failsafe session Unable to determine failsafe session name. Possible causes xconfd isn't running (D-Bus setup problem); environment variable $XDG_CONFIG_DIRS is set incorrectly (must include "/etc") or xfce4-session is installed incorrectly.
دستورات زیر را اجرا نمایید، سپس مجدداً به VNC متصل شوید.
unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS
VNC Server هنگام راهاندازی و شروع به کار باید بداند چه دستوراتی را اجرا کند و همچنین باید بداند که به کدام محیط دسکتاپ گرافیکی متصل شود.
این تنظیمات در یک فایل به نام xstartup
و پوشه .vnc
در زیر شاخه home قرار دارد. اسکریپت استارتاپ در مرحله قبل زمان اجرای vncserver
ایجاد شده است، ولی برای راهاندازی دسکتاپ Xfce باید خودمان آن را ایجاد کنیم.
زمان اجرای VNC برای اولین بار، یک نمونه سرور پیشفرض را بر روی پورت 5901
راهاندازی میکند. این پورت به عنوان پورت نمایشگر نامیده میشود و توسط VNC به بصورت :1
میباشد. VNC میتوانید چندین بار بر روی پورتهای نمایشگر دیگر نظیر :2
و :3
راهاندازی شود.
از آنجایی که قصد داریم نحوه کانفیگ و پیکربندی VNC Server را تغییر دهیم، در مرحله اول میبایست نمونه ایجاد شده VNC Server که بر روی پورت 5901 در حال اجرا میباشد را متوقف (Stop) کنیم.
vncserver -kill :1
خروجی میبایست به شکل زیر باشد. البته با توجه به هر سرور یک PID متفاوت را مشاهده خواهیم کرد.
Killing Xtightvnc process ID 7384
قبل از ایجاد تغییر در فایل xstartup.
ابتدا از آن یک نسخه پشتیبان تهیه میکنیم.
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
سپس با ویرایشگر دلخواه، یک فایل جدید xstartup.
ایجاد و آن را ویرایش میکنیم.
vi ~/.vnc/xstartup
دستورات موجود در فایل کانفیگ VNC Server پس از شروع (Start) یا راه اندازی مجدد (Restart) بطور خودکار اجرا میشوند. برای Start محیط گرافیکی در صورتی که از قبل Start نشده باشد، به VNC نیاز داریم.
دستورات زیر را به فایل اضافه میکنیم.
#!/bin/bash xrdb $HOME/.Xresources startxfce4 &
فایل را ذخیره و از آن خارج میشویم.
برای مطمئن شدن از اینکه VNC Server قادر به استفاده صحیح از این فایل جهت راهاندازی جدید خواهد بود، باید آن را بصورت Executable تغییر دهیم.
sudo chmod +x ~/.vnc/xstartup
سپس، VNC Server را Restart میکنیم.
vncserver
خروجی نظیر زیر را مشاهده خواهیم کرد.
New 'X' desktop is your_hostname:1 Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log
با کانفیگ موجود، میتوانیم از سیستم خانگی به سرور متصل شویم.
با استفاده یکی از نرمافزارهای ذکر شده در قسمت “پیش نیازها” میتوانیم به محیط دسکتاپ Xfce متصل شویم.
پس از اتصال به محیط دسکتاپ سرور، دسکتاپ Xfce بصورت زیر قابل مشاهده میباشد.
در این مرحله، VNC Server را به عنوان یک سرویس systemd تنظیم خواهیم کرد و خواهیم توانست مانند هر سرویس دیگری در صورت نیاز آن را Start, Stop, Restart کرد. و همچنین انجام این کار باعث Start سرویس VNC Server پس از ریستارت سرور خواهد شد.
ابتدا با استفاده از یک ویرایشگر متن، فایل جدیدی را ایجاد خواهیم کرد.
sudo vi /etc/systemd/system/[email protected]
علامت @
در انتهای نام vncserver باعث میشود که بتوانیم به پورت دلخواه VNC متصل شویم.
خطوط زیر را به فایل اضافه میکنیم. میبایست بخشهای User, Grou, WorkingDirectory و همچنین Username را بصورت صحیح وارد نماییم.
[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 :%i ExecStop=/usr/bin/vncserver -kill :%i [Install] WantedBy=multi-user.target
دستور ExecStartPre
در صورتی که VNC از قبل از در حال اجرا باشد را متوقف میکند. دستور ExecStartPre
، سرویس VNC را Start و رزولوشن را بر روی 1280×800 تنظیم میکند. در صورت نیاز میتوانید تغییرات را بصورت دلخواه انجام دهید.
جهت آگاه سازی سیستم یا سرور از وجود فایل unit جدید، از دستور زیر استفاده میکنیم.
sudo systemctl daemon-reload
با استفاده از دستور زیر، سرویس را فعال میکنیم.
sudo systemctl enable [email protected]
عدد 1
پس از علامت @
به این معنی میباشد که کدام شماره نمایش سرور باید اجرا شود.
با استفاده از دستور زیر، نمونه فعلی VNC Server را متوقف (Stop) میکنیم.
vncserver -kill :1
سپس با استفاده از دستور زیر آن را Start میکنیم.
sudo systemctl start vncserver@1
با استفاده از دستور status میتوانیم وضعیت سرویس را بررسی نماییم.
sudo systemctl status vncserver@1
خروجی نمونه بصورت زیر میباشد.
● [email protected] - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Thu 2019-10-10 17:56:17 UTC; 5s ago Process: 935 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2) Process: 940 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS) Main PID: 948 (Xtightvnc) . . .
VNC Server تا زمان ریستارت سرور، در دسترس خواهد بود.