В biz har qanday turdagi virtual mashinada VNC serverini ishga tushirishni muhokama qildik. Ushbu parametr juda ko'p kamchiliklarga ega, ulardan asosiysi ma'lumotlarni uzatish kanallarining o'tkazuvchanligiga qo'yiladigan yuqori talablardir. Bugun biz RDP (Remote Desktop Protocol) orqali Linuxda grafik ish stoliga ulanishga harakat qilamiz. VNC tizimi RFB (Remote Framebuffer) protokoli yordamida piksellar massivlarini uzatishga asoslangan va RDP yanada murakkab grafik ibtidoiy va yuqori darajali buyruqlarni yuborish imkonini beradi. U odatda Windows-da masofaviy ish stoli xizmatlarini joylashtirish uchun ishlatiladi, ammo Linux uchun serverlar ham mavjud.
Oglavlenie:
Grafik muhitni o'rnatish
Biz Ubuntu Server 18.04 LTS bilan ikkita hisoblash yadrosi, to'rt gigabayt operativ xotira va yigirma gigabayt qattiq disk (HDD) bilan virtual mashinani olamiz. Zaifroq konfiguratsiya grafik ish stoli uchun mos emas, garchi bu hal qilinayotgan vazifalarga bog'liq. Buyurtmangizga 10% chegirma olish uchun Habrahabr10 promo-kodidan foydalanishni unutmang.

Ish stoli muhitini barcha bog'liqliklar bilan o'rnatish quyidagi buyruq bilan amalga oshiriladi:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsOldingi holatda bo'lgani kabi, biz XFCE ni nisbatan past hisoblash resurslari talablari tufayli tanladik.
Serverni ruslashtirish va dasturiy ta'minotni o'rnatish
Ko'pincha virtual mashinalar faqat inglizcha lokalizatsiya bilan joylashtiriladi. Ish stolida sizga rus tili kerak bo'lishi mumkin, uni sozlash oson. Birinchidan, tizim dasturlari uchun tarjimalarni o'rnatamiz:
sudo apt-get install language-pack-ruKeling, mahalliylashtirishni o'rnatamiz:
sudo update-locale LANG=ru_RU.UTF-8Xuddi shu effektga /etc/default/locale-ni qo'lda tahrirlash orqali erishish mumkin.
GNOME va KDE-ni lokalizatsiya qilish uchun omborda language-pack-gnome-ru va language-pack-kde-ru paketlari mavjud - agar siz ushbu ish stoli muhitidagi dasturlardan foydalansangiz, ular sizga kerak bo'ladi. XFCE-da tarjimalar ilovalar bilan o'rnatiladi. Keyin lug'atlarni o'rnatishingiz mumkin:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictBundan tashqari, ba'zi amaliy dasturlar uchun tarjimalarni o'rnatish talab qilinishi mumkin:
# Браузер Firefox
sudo apt-get install firefox firefox-locale-ru
# Почтовый клиент Thunderbird
sudo apt-get install thunderbird thunderbird-locale-ru
# Офисный пакет LibreOffice
sudo apt-get install libreoffice libreoffice-l10n-ru libreoffice-help-ruBu ish stoli muhitini tayyorlashni yakunlaydi, faqat RDP serverini sozlash qoladi.
RDP serverini o'rnatish va sozlash
Ubuntu omborlarida erkin taqsimlangan Xrdp server mavjud, biz undan foydalanamiz:
sudo apt-get install xrdpAgar hamma narsa yaxshi bo'lsa, server avtomatik ravishda ishga tushishi kerak:
sudo systemctl status xrdp 
Xrdp serveri xrdp foydalanuvchi huquqlari bilan ishlaydi va sukut bo'yicha /etc/ssl/private/ssl-cert-snakeoil.key sertifikatini oladi, uni o'zingizniki bilan almashtirish mumkin. Faylni o'qish huquqiga ega bo'lish uchun foydalanuvchini ssl-cert guruhiga qo'shishingiz kerak:
sudo adduser xrdp ssl-certStandart sozlamalarni /etc/default/xrdp faylida topish mumkin va boshqa barcha server konfiguratsiya fayllari /etc/xrdp katalogida joylashgan. Asosiy parametrlar xrdp.ini faylida bo'lib, uni o'zgartirish kerak emas. Konfiguratsiya yaxshi hujjatlashtirilgan va tegishli boshqaruv sahifalari kiritilgan:
man xrdp.ini
man xrdpQolgan narsa /etc/xrdp/startwm.sh skriptini tahrirlash bo'lib, u foydalanuvchi sessiyasi ishga tushirilganda bajariladi. Birinchidan, tarqatishdan skriptning zaxira nusxasini yarataylik:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shXFCE ish stoli muhitini ishga tushirish uchun sizga quyidagi kabi skript kerak bo'ladi:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4E'tibor bering: skriptlarda bajariladigan fayllarga to'liq yo'lni yozish yaxshiroqdir - bu yaxshi odat. Skriptni bajariladigan holga keltiramiz va shu nuqtada Xrdp serverini sozlash tugallangan deb hisoblanishi mumkin:
sudo chmod 755 /etc/xrdp/startwm.shServerni qayta ishga tushiring:
sudo systemctl restart xrdp
Xavfsizlik devorini o'rnatish
Odatiy bo'lib, Xrdp barcha interfeyslarda TCP 3389 portini tinglaydi. Virtual server konfiguratsiyasiga qarab, Netfilter xavfsizlik devorini sozlashingiz kerak bo'lishi mumkin. Linuxda bu odatda iptables yordam dasturi yordamida amalga oshiriladi, lekin Ubuntuda ufw dan foydalanish yaxshidir. Agar mijozning IP manzili ma'lum bo'lsa, konfiguratsiya quyidagi buyruq bilan amalga oshiriladi:
sudo ufw allow from IP_Address to any port 3389Siz har qanday IP-dan ulanishga ruxsat berishingiz mumkin:
sudo ufw allow 3389RDP protokoli shifrlashni qo'llab-quvvatlaydi, ammo Xrdp serverini umumiy tarmoqlarga ta'sir qilish yomon fikrdir. Agar mijozda sobit IP bo'lmasa, xavfsizlikni oshirish uchun server faqat localhost-ni tinglashi kerak. Mijoz kompyuteridan trafikni xavfsiz tarzda yo'naltiradigan SSH tunneli orqali unga kirish yaxshidir. Bizda ham xuddi shunday yondashuv bor VNC server uchun.
RDP serveriga ulanish
Ish stoli muhiti bilan ishlash uchun alohida imtiyozsiz foydalanuvchi yaratish yaxshiroqdir:
sudo adduser rdpuser 
Keling, foydalanuvchini sudo guruhiga qo'shamiz, shunda u ma'muriyat bilan bog'liq vazifalarni bajara oladi. Agar bunday ehtiyoj bo'lmasa, siz ushbu bosqichni o'tkazib yuborishingiz mumkin:
sudo gpasswd -a rdpuser sudoServerga istalgan RDP mijozi, jumladan, o'rnatilgan Windows masofaviy ish stoli xizmatlari mijozi yordamida ulanishingiz mumkin. Agar Xrdp tashqi interfeysni tinglayotgan bo'lsa, qo'shimcha harakatlar talab qilinmaydi. Ulanish sozlamalarida VPS IP manzilini, foydalanuvchi nomi va parolni ko'rsatish kifoya. Ulanishdan so'ng biz shunga o'xshash narsani ko'ramiz:

Ish stoli muhitini dastlabki sozlashdan so'ng biz to'liq ish stoliga ega bo'lamiz. Ko'rib turganingizdek, u ko'p resurslarni iste'mol qilmaydi, garchi hamma narsa ishlatiladigan ilovalarga bog'liq bo'ladi.

Agar Xrdp serveri faqat localhost-ni tinglasa, mijoz kompyuteridagi trafik SSH tunneliga to'planishi kerak (sshd VPS-da ishlayotgan bo'lishi kerak). Windows-da siz grafik SSH mijozidan (masalan, PuTTY) foydalanishingiz mumkin va UNIX tizimlarida sizga ssh yordam dasturi kerak bo'ladi:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipTunnel ishga tushirilgandan so'ng, RDP mijozi endi uzoq serverga emas, balki mahalliy xostga ulanadi.
Mobil qurilmalar bilan bu qiyinroq: tunnelni ko'tarishga qodir SSH mijozlarini sotib olish kerak bo'ladi va iOS va iPadOS-da energiya sarfini juda yaxshi optimallashtirish tufayli uchinchi tomon ilovalarining fonda ishlashi qiyin. IPhone va iPad-da siz alohida dasturda tunnel yarata olmaysiz; sizga SSH orqali RDP ulanishini o'rnatishi mumkin bo'lgan kombayn dasturi kerak bo'ladi. Masalan, masalan .
Seans menejeri va foydalanuvchi sessiyalari
Ko'p foydalanuvchili ishlash qobiliyati to'g'ridan-to'g'ri Xrdp serverida amalga oshiriladi va qo'shimcha konfiguratsiyani talab qilmaydi. Systemd orqali xizmatni ishga tushirgandan so'ng, bitta jarayon demon rejimida ishlaydi, 3389 portni tinglaydi va seans menejeri bilan localhost orqali bog'lanadi.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Seans menejeri odatda foydalanuvchilarga ko'rinmaydi, chunki mijoz sozlamalarida ko'rsatilgan login va parol unga avtomatik ravishda uzatiladi. Agar bu sodir bo'lmasa yoki autentifikatsiya paytida xatolik yuzaga kelsa, ish stoli o'rniga interaktiv kirish oynasi paydo bo'ladi.

Seans menejerining avtomatik ishga tushirilishi /etc/default/xrdp faylida ko'rsatilgan va konfiguratsiya /etc/xrdp/sesman.ini da saqlanadi. Odatiy bo'lib, u shunday ko'rinadi:
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
[Security]
AllowRootLogin=true
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
; When AlwaysGroupCheck=false access will be permitted
; if the group TerminalServerUsers is not defined.
AlwaysGroupCheck=false
[Sessions]Bu erda hech narsani o'zgartirishingiz shart emas, faqat ildiz huquqlari bilan kirishni o'chirib qo'yishingiz kerak (AllowRootLogin=false). Tizimda ruxsat berilgan har bir foydalanuvchi uchun alohida xrdp jarayoni ishga tushiriladi: seansni tugatmasdan uzsangiz, foydalanuvchi jarayonlari sukut bo'yicha ishlashda davom etadi va siz yana sessiyaga ulanishingiz mumkin. Sozlamalarni /etc/xrdp/sesman.ini faylida o'zgartirish mumkin ([Sessions] bo'limi).
Klaviatura tartibini almashtirish
Odatda ikki tomonlama bufer bilan bog'liq muammolar bo'lmaydi, lekin ruscha klaviatura tartibida siz biroz o'ynashingiz kerak bo'ladi (rus tili allaqachon bo'lishi kerak) ). Xrdp serverining klaviatura sozlamalarini tahrir qilaylik:
sudo nano /etc/xrdp/xrdp_keyboard.iniKonfiguratsiya faylining oxiriga quyidagi qatorlarni qo'shishingiz kerak:
[rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
model=pc105
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru
[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ruFaqatgina faylni saqlash va Xrdp-ni qayta ishga tushirish qoladi:
sudo systemctl restart xrdpKo'rib turganingizdek, Linux VPS-da RDP serverini o'rnatish qiyin emas, lekin Biz allaqachon VNC sozlamalarini muhokama qildik. Ushbu texnologiyalarga qo'shimcha ravishda yana bir qiziqarli variant mavjud: o'zgartirilgan NX 3 protokolidan foydalangan holda X2Go tizimi. Biz u bilan keyingi nashrda shug'ullanamiz.
Manba: www.habr.com
