Uues Me oleme käsitlenud VNC-serveri käivitamist mis tahes tüüpi virtuaalses masinas. Sellel variantil on palju puudusi, milleks on peamiselt kõrged nõudmised andmeedastuskanalite ribalaiusele. Täna proovime ühendada Linuxi graafilise töölauaga RDP (Remote Desktop Protocol) kaudu. VNC-süsteem põhineb pikslimassiivide edastamisel RFB (Remote Framebuffer) protokolli kaudu, samas kui RDP võimaldab saata keerukamaid graafilisi primaare ja kõrgema taseme käske. Tavaline on, et seda kasutatakse Windowsi kaugtegelikkuse teenuste korraldamiseks, kuid ka Linuxile on saadaval serverid.
Sisukord:
Graafilise keskkonna installimine
Võtame virtuaalse masina, millel on Ubuntu Server 18.04 LTS, kahe protsessorituuma, nelja gigabaidi mälu ja kakskümmend gigabaiti kõvakettaruumi (HDD). Nõrgem konfiguratsioon ei sobi hästi graafilisele töölauale, kuigi see sõltub lahendatavatest ülesannetest. Ärge unustage kasutada sooduskoodi Habrahabr10 10% allahindluse saamiseks tellimisel.

Töölaua keskkonna installimine koos kõigi sõltuvustega toimub järgmise käsu abil:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsNagu eelnevas juhul, valisime XFCE, kuna sellel on suhteliselt madalad nõuded arvutusressurssidele.
Serveri venekeelne versioon ja tarkvara installeerimine
Sageli käivitatakse virtuaalsed masinad ainult ingliskeelse lokaliseerimisega. Töölaual võib vajada vene keelt, mille seadistamine ei ole keeruline. Esiteks paigaldame süsteemsete programmide tõlked:
sudo apt-get install language-pack-etSeadistame lokaliseerimise:
sudo update-locale LANG=et_EE.UTF-8Sama efekti võib saavutada, redigeerides käsitsi faili /etc/default/locale.
GNOME-i ja KDE lokaliseerimiseks on hoidlas paketid language-pack-gnome-et ja language-pack-kde-et — need on vajalikud, kui kasutate nende töölauakeskkondade programme. XFCE-s installitakse tõlked koos rakendustega. Edasi saame installida sõnaraamatud:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictLisaks võib tõlgete installimine olla vajalik mõne rakenduse jaoks:
# Браузер 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-ruSellega on töölaua keskkonna ettevalmistamine lõpetatud, on jäänud seadistada RDP-server.
RDP-serveri paigaldamine ja seadistamine
Ubuntu hoidlatest on vabalt kättesaadav Xrdp-server, mida me ka kasutame:
sudo apt-get install xrdpKui kõik sujus, peaks server automaatselt käivituma:
sudo systemctl status xrdp 
Xrdp server töötab kasutaja xrdp õigustega ja kasutab vaikimisi sertifikaati /etc/ssl/private/ssl-cert-snakeoil.key, mille saab asendada oma sertifikaadiga. Faili lugemisõiguse saamiseks tuleb kasutaja lisada ssl-cert rühma:
sudo adduser xrdp ssl-certVaikeseaded leiate failist /etc/default/xrdp, kõik ülejäänud serveri konfiguratsioonifailid asuvad kaustas /etc/xrdp. Peamised parameetrid asuvad failis xrdp.ini, mida ei pea muutma. Konfiguratsioon on hästi dokumenteeritud ja koos on lisatud vastavad manpages:
man xrdp.ini
man xrdpPeab redigeerima skripti /etc/xrdp/startwm.sh, mis käivitatakse kasutaja seansi algatamisel. Esiteks teeme skriptist varukoopia distributsioonist:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shKuna soovime käivitada XFCE töökeskkonna, peab skripti sisu olema umbes selline:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Pange tähele: skripti sises tõstke parendatult failide täisrada — see on hea harjumus. Teeme skripti täitmiseks lubatavaks ja sellega saab serveri Xrdp seadistuse lõpetatuks:
sudo chmod 755 /etc/xrdp/startwm.shTaaskäivitame serveri:
sudo systemctl restart xrdp
Tulemüüriseade seadistamine
Vaikimisi kuulab Xrdp TCP-port 3389 kõigil liidestel. Vastavalt virtuaalserveri konfigureerimisele võib olla vajalik Netfilteri tulemüürisätetega tegelemine. Linuxis tehakse seda tavaliselt iptables utiliidiga, kuid Ubuntu puhul on parem kasutada ufw-d. Kui kliendi IP-aadress on teada, viiakse seadistus läbi järgmise käsu abil:
sudo ufw allow from IP_Address to any port 3389Kuid saate lubada ühendusi mistahes IP-st järgmiselt:
sudo ufw allow 3389RDP-protokoll toetab krüpteerimist, kuid avada Xrdp serverit avalikes võrkudes on halb mõte. Kui kliendil ei ole fikseeritud IP-d, peaks server kuulama ainult localhosti. Parim on seadistada sellele juurdepääs SSH tunneliga, mis suunab liiklust kliendi arvutist turvaliselt. Sarnast lähenemist oleme VNC serveri jaoks.
Ühendamine RDP-serveriga
Töökeskkonnaga töötamiseks on parem luua eraldi privileegideta kasutaja:
sudo adduser rdpuser 
Lisame kasutaja sudo gruppi, et ta saaks lahendada haldustöid. Kui sellist vajadust pole, võib selle sammu vahele jätta:
sudo gpasswd -a rdpuser sudoServerisse saab ühenduda igasuguste RDP klientide abil, sealhulgas Windowsi sisseehitatud kaugjuhtimistöölaua kliendiga. Kui Xrdp kuulab välisseadet, ei ole täiendavaid tegevusi vaja. Piisab VPS-i ühenduse seadistustes IP-aadressi, kasutajanime ja parooli sisestamisest. Pärast ühenduse loomist näeme midagi sellist:

Pärast töökeskkonna esialgset seadistamist saame täieliku töölaua. Nagu näete, ei tarbi see palju ressursse, kuigi edaspidine sõltub kasutatavatest rakendustest.

Kui Xrdp server kuulab ainult localhosti, tuleb kliendi arvuti liiklus pakendada SSH tunnelisse (VPS-is peab olema käimas sshd). Windowsis saab kasutada graafilist SSH klienti (näiteks PuTTY), UNIX-süsteemides on vajalik ssh utiliit:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipPärast tunnelite loomist ühendub RDP klient mitte kaugserveriga, vaid kohaliku hostiga.
Mobiilseadmetega on keerulisem: tunnelit toetavate SSH klientide ostmine võib osutuda vajalikuks, lisaks on iOS-is ja iPadOS-is kolmandate rakenduste taustatöö keeruline, kuna energiatõhususe optimeerimine on liiga hea. iPhone'is ja iPadis ei saa tunnelit eraldi rakenduses luua — vajalik on rakendus, mis suudab ise RDP ühendust SSH kaudu luua. Näiteks selline, nagu .
Sessioonide haldur ja kasutajate sessioonid
Mitme kasutaja töövõime on Xrdp serveris juba olemas ja ei vaja lisaseadistamist. Pärast teenuse käivitamist läbi systemd töötab üks protsess deemonirežiimis, kuulab porti 3389 ja suhtleb localhostiga seansihalduriga.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Seansihaldur ei ole tavaliselt kasutajatele nähtav, kuna kliendi seadetes määratud logi ja parooli edastatakse automaatselt. Kui seda ei juhtunud või autentimisel tekkis viga, näeme töölaudade asemel sisse logimise interaktiivset akent.

Seansihalduri automaatne käivitamine on määratud failis /etc/default/xrdp ja konfiguratsioon salvestatakse /etc/xrdp/sesman.ini. Vaikimisi näeb see välja umbes nii:
[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]Siin pole midagi muuta, vaid tuleb lihtsalt keelata juurdepääs root õigustega (AllowRootLogin=false). Iga autoriseeritud süsteemi kasutaja jaoks käivitatakse eraldi protsess xrdp: kui sessioon katkestatakse, jäävad kasutaja protsessid vaikimisi töötama ning sessioonile saab uuesti juurde pääseda. Seadeid saab muuta failis /etc/xrdp/sesman.ini (sektsioon [Sessions]).
Klaviatuuripaigutuste vahetamine
Kahepoolse lõikega probleemide olemasolu ei ole tavaliselt, kuid venekeelse klaviatuuriga tuleb natuke mässata (vene lokaliseerimine peab olema juba ). Muudame Xrdp serveri klaviatuuri seadeid:
sudo nano /etc/xrdp/xrdp_keyboard.iniKonfiguratsioonifaili lõppu tuleb lisada järgmised read:
[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,ruFail tuleb salvestada ja Xrdp taaskäivitada:
sudo systemctl restart xrdpNagu näete, ei ole RDP serveri tõstmine Linuxi VPS-il keeruline, ja oleme juba tutvunud VNC seadmisega. Lisaks nendele tehnoloogiatele on veel üks huvitav variant: modifitseeritud NX 3 protokolli kasutav X2Go süsteem. Sellega tutvume järgmises postituses.
Allikas: habr.com
