В mēs apspriedām VNC servera palaišanu jebkura veida virtuālajā mašīnā. Šai opcijai ir daudz trūkumu, no kuriem galvenais ir augstās prasības datu pārraides kanālu caurlaidspējai. Šodien mēs mēģināsim izveidot savienojumu ar grafisko darbvirsmu operētājsistēmā Linux, izmantojot RDP (Remote Desktop Protocol). VNC sistēma ir balstīta uz pikseļu masīvu pārsūtīšanu, izmantojot RFB (Remote Framebuffer) protokolu, un RDP ļauj nosūtīt sarežģītākus grafikas primitīvus un augsta līmeņa komandas. To parasti izmanto attālās darbvirsmas pakalpojumu mitināšanai operētājsistēmā Windows, taču ir pieejami arī Linux serveri.
Satura rādītājs:
Grafiskās vides instalēšana
Mēs paņemsim virtuālo mašīnu ar Ubuntu Server 18.04 LTS ar diviem skaitļošanas kodoliem, četriem gigabaitiem RAM un divdesmit gigabaitu cieto disku (HDD). Vājāka konfigurācija nav piemērota grafiskajai darbvirsmai, lai gan tas ir atkarīgs no risināmajiem uzdevumiem. Neaizmirstiet izmantot reklāmas kodu Habrahabr10, lai saņemtu 10% atlaidi savam pasūtījumam.

Darbvirsmas vides instalēšana ar visām atkarībām tiek veikta ar šādu komandu:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsTāpat kā iepriekšējā gadījumā, mēs izvēlējāmies XFCE tā salīdzinoši zemo skaitļošanas resursu prasību dēļ.
Servera rusifikācija un programmatūras instalēšana
Bieži vien virtuālās mašīnas tiek izvietotas tikai ar lokalizāciju angļu valodā. Darbvirsmā var būt nepieciešama krievu valoda, kuru ir viegli iestatīt. Vispirms instalēsim tulkojumus sistēmas programmām:
sudo apt-get install language-pack-ruIestatīsim lokalizāciju:
sudo update-locale LANG=ru_RU.UTF-8To pašu efektu var panākt, manuāli rediģējot /etc/default/locale.
GNOME un KDE lokalizācijai repozitorijā ir pakotnes language-pack-gnome-ru un language-pack-kde-ru — tās būs nepieciešamas, ja izmantojat programmas no šīm darbvirsmas vidēm. Programmā XFCE tulkojumi tiek instalēti kopā ar lietojumprogrammām. Tālāk varat instalēt vārdnīcas:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictTurklāt dažām lietojumprogrammām var būt nepieciešama tulkojumu instalēšana:
# Браузер 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-ruTas pabeidz darbvirsmas vides sagatavošanu, atliek tikai konfigurēt RDP serveri.
RDP servera instalēšana un konfigurēšana
Ubuntu krātuvēs ir brīvi izplatīts Xrdp serveris, kuru mēs izmantosim:
sudo apt-get install xrdpJa viss noritēja labi, serverim vajadzētu startēt automātiski:
sudo systemctl status xrdp 
Xrdp serveris darbojas ar xrdp lietotāja tiesībām un pēc noklusējuma izmanto /etc/ssl/private/ssl-cert-snakeoil.key sertifikātu, ko var aizstāt ar savu. Lai piekļūtu faila lasīšanai, jums jāpievieno lietotājs ssl-cert grupai:
sudo adduser xrdp ssl-certNoklusējuma iestatījumus var atrast /etc/default/xrdp failā, un visi pārējie servera konfigurācijas faili atrodas /etc/xrdp direktorijā. Galvenie parametri ir failā xrdp.ini, kas nav jāmaina. Konfigurācija ir labi dokumentēta, un ir iekļautas atbilstošās rokasgrāmatas:
man xrdp.ini
man xrdpAtliek tikai rediģēt /etc/xrdp/startwm.sh skriptu, kas tiek izpildīts, kad tiek inicializēta lietotāja sesija. Vispirms izveidosim skripta rezerves kopiju no izplatīšanas:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shLai palaistu XFCE darbvirsmas vidi, jums būs nepieciešams skripts, kas līdzīgs šim:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Lūdzu, ņemiet vērā: skriptos labāk ir rakstīt pilnu ceļu uz izpildāmajiem failiem - tas ir labs ieradums. Padarīsim skriptu izpildāmu, un šajā brīdī Xrdp servera iestatīšanu var uzskatīt par pabeigtu:
sudo chmod 755 /etc/xrdp/startwm.shRestartējiet serveri:
sudo systemctl restart xrdp
Ugunsmūra iestatīšana
Pēc noklusējuma Xrdp klausās TCP portu 3389 visās saskarnēs. Atkarībā no virtuālā servera konfigurācijas, iespējams, būs jākonfigurē Netfilter ugunsmūris. Operētājsistēmā Linux tas parasti tiek darīts, izmantojot utilītu iptables, bet Ubuntu labāk ir izmantot ufw. Ja klienta IP adrese ir zināma, konfigurēšana tiek veikta ar šādu komandu:
sudo ufw allow from IP_Address to any port 3389Varat atļaut savienojumus no jebkura IP, piemēram:
sudo ufw allow 3389RDP protokols atbalsta šifrēšanu, taču Xrdp servera pakļaušana publiskajiem tīkliem ir slikta ideja. Ja klientam nav fiksēta IP, serverim ir jāklausās tikai localhost, lai palielinātu drošību. Vislabāk ir tai piekļūt, izmantojot SSH tuneli, kas droši novirzīs trafiku no klienta datora. Mums ir līdzīga pieeja VNC serverim.
Savienojuma izveide ar RDP serveri
Lai strādātu ar darbvirsmas vidi, labāk ir izveidot atsevišķu nepievilcīgu lietotāju:
sudo adduser rdpuser 
Pievienosim lietotāju sudo grupai, lai viņš varētu veikt ar administrēšanu saistītus uzdevumus. Ja šādas vajadzības nav, varat izlaist šo darbību:
sudo gpasswd -a rdpuser sudoVarat izveidot savienojumu ar serveri, izmantojot jebkuru RDP klientu, tostarp iebūvēto Windows Remote Desktop Services klientu. Ja Xrdp klausās ārējo interfeisu, papildu darbības nebūs vajadzīgas. Savienojuma iestatījumos pietiek norādīt VPS IP adresi, lietotājvārdu un paroli. Pēc savienojuma izveides mēs redzēsim kaut ko līdzīgu:

Pēc sākotnējās darbvirsmas vides iestatīšanas mēs iegūsim pilnvērtīgu darbvirsmu. Kā redzat, tas nepatērē daudz resursu, lai gan viss būs atkarīgs no izmantotajām lietojumprogrammām.

Ja Xrdp serveris klausās tikai localhost, trafika klienta datorā būs jāiepako SSH tunelī (sshd jādarbojas VPS). Operētājsistēmā Windows varat izmantot grafisko SSH klientu (piemēram, PuTTY), savukārt UNIX sistēmās ir nepieciešama ssh utilīta:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipPēc tuneļa inicializācijas RDP klients vairs nesavienosies ar attālo serveri, bet gan ar vietējo resursdatoru.
Ar mobilajām ierīcēm ir grūtāk: būs jāiegādājas SSH klienti, kas spēj pacelt tuneli, savukārt iOS un iPadOS operētājsistēmās trešo pušu lietojumprogrammu fona darbība ir apgrūtināta pārāk labās enerģijas patēriņa optimizācijas dēļ. iPhone un iPad ierīcēs nevarēsit izveidot tuneli atsevišķā lietojumprogrammā; jums būs nepieciešama harvestera lietojumprogramma, kas pati var izveidot RDP savienojumu, izmantojot SSH. Tādas kā, piemēram .
Sesiju pārvaldnieks un lietotāju sesijas
Vairāku lietotāju darba iespēja tiek ieviesta tieši Xrdp serverī un tai nav nepieciešama papildu konfigurācija. Pēc pakalpojuma palaišanas, izmantojot systemd, viens process darbojas dēmona režīmā, klausās portā 3389 un sazinās, izmantojot localhost ar sesijas pārvaldnieku.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Sesiju pārvaldnieks parasti nav redzams lietotājiem, jo klienta iestatījumos norādītais pieteikšanās vārds un parole tiek pārsūtīti uz to automātiski. Ja tas nenotiek vai autentifikācijas laikā rodas kļūda, darbvirsmas vietā parādīsies interaktīvs pieteikšanās logs.

Sesiju pārvaldnieka automātiskā palaišana ir norādīta failā /etc/default/xrdp, un konfigurācija tiek saglabāta mapē /etc/xrdp/sesman.ini. Pēc noklusējuma tas izskatās apmēram šādi:
[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]Šeit jums nekas nav jāmaina, jums vienkārši ir jāatspējo pieteikšanās ar root tiesībām (AllowRootLogin=false). Katram sistēmā autorizētam lietotājam tiek palaists atsevišķs xrdp process: ja atvienojaties, nebeidzot sesiju, lietotāja procesi turpinās darboties pēc noklusējuma, un jūs varat atkal izveidot savienojumu ar sesiju. Iestatījumus var mainīt failā /etc/xrdp/sesman.ini (sadaļā [Sesijas]).
Tastatūras izkārtojumu pārslēgšana
Ar divvirzienu starpliktuvi parasti nav problēmu, taču ar krievu valodas tastatūras izkārtojumu būs nedaudz jāpaspēlējas (krievu lokalizācijai jau vajadzētu būt ). Rediģēsim Xrdp servera tastatūras iestatījumus:
sudo nano /etc/xrdp/xrdp_keyboard.iniKonfigurācijas faila beigās jāpievieno šādas rindas:
[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,ruAtliek tikai saglabāt failu un restartēt Xrdp:
sudo systemctl restart xrdpKā redzat, nav grūti iestatīt RDP serveri Linux VPS, taču Mēs jau esam apsprieduši VNC iestatīšanu. Papildus šīm tehnoloģijām ir vēl viena interesanta iespēja: X3Go sistēma, kas izmanto modificētu NX 2 protokolu. Mēs to aplūkosim nākamajā publikācijā.
Avots: www.habr.com
