В kita membahas menjalankan server VNC pada mesin virtual jenis apa pun. Opsi ini memiliki banyak kelemahan, yang utama adalah tingginya persyaratan untuk throughput saluran transmisi data. Hari ini kita akan mencoba terhubung ke desktop grafis di Linux melalui RDP (Remote Desktop Protocol). Sistem VNC didasarkan pada transmisi array piksel menggunakan protokol RFB (Remote Framebuffer), dan RDP memungkinkan Anda mengirim grafik primitif yang lebih kompleks dan perintah tingkat tinggi. Biasanya digunakan untuk meng-host Layanan Desktop Jarak Jauh di Windows, tetapi server untuk Linux juga tersedia.
contoh:
Menginstal lingkungan grafis
Kami akan mengambil mesin virtual dengan Ubuntu Server 18.04 LTS dengan dua inti komputasi, empat gigabyte RAM dan hard drive (HDD) dua puluh gigabyte. Konfigurasi yang lebih lemah tidak cocok untuk desktop grafis, meskipun hal ini tergantung pada tugas yang diselesaikan. Jangan lupa gunakan kode promo Habrahabr10 untuk mendapatkan diskon 10% pada pesanan Anda.

Menginstal lingkungan desktop dengan semua dependensi dilakukan dengan perintah berikut:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsSeperti pada kasus sebelumnya, kami memilih XFCE karena kebutuhan sumber daya komputasinya yang relatif rendah.
Russifikasi server dan instalasi perangkat lunak
Seringkali mesin virtual dikerahkan hanya dengan lokalisasi bahasa Inggris. Di desktop Anda mungkin memerlukan bahasa Rusia, yang mudah diatur. Pertama, mari kita instal terjemahan untuk program sistem:
sudo apt-get install language-pack-ruMari kita siapkan pelokalan:
sudo update-locale LANG=ru_RU.UTF-8Efek yang sama dapat dicapai dengan mengedit file /etc/default/locale.conf secara manual.
Untuk pelokalan GNOME dan KDE, repositori memiliki paket bahasa-pack-gnome-ru dan paket bahasa-kde-ru - Anda akan memerlukannya jika menggunakan program dari lingkungan desktop ini. Di XFCE, terjemahan diinstal dengan aplikasi. Selanjutnya Anda dapat menginstal kamus:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictSelain itu, instalasi terjemahan mungkin diperlukan untuk beberapa program aplikasi:
# Браузер 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-ruIni menyelesaikan persiapan lingkungan desktop, yang tersisa hanyalah mengkonfigurasi server RDP.
Menginstal dan mengkonfigurasi server RDP
Repositori Ubuntu memiliki server Xrdp yang didistribusikan secara gratis, yang akan kita gunakan:
sudo apt-get install xrdpJika semuanya berjalan dengan baik, server akan mulai secara otomatis:
sudo systemctl status xrdp 
Server Xrdp berjalan dengan hak pengguna xrdp dan secara default mengambil sertifikat /etc/ssl/private/ssl-cert-snakeoil.key, yang dapat diganti dengan milik Anda sendiri. Untuk memiliki akses membaca file, Anda perlu menambahkan pengguna ke grup ssl-cert:
sudo adduser xrdp ssl-certPengaturan default dapat ditemukan di file /etc/default/xrdp, dan semua file konfigurasi server lainnya terletak di direktori /etc/xrdp. Parameter utama ada di file xrdp.ini, yang tidak perlu diubah. Konfigurasinya didokumentasikan dengan baik, dan halaman manual terkait disertakan:
man xrdp.ini
man xrdpYang tersisa hanyalah mengedit skrip /etc/xrdp/startwm.sh, yang dijalankan saat sesi pengguna diinisialisasi. Pertama, mari kita buat salinan cadangan skrip dari distribusi:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shUntuk memulai lingkungan desktop XFCE, Anda memerlukan skrip seperti ini:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Harap diperhatikan: dalam skrip, lebih baik menulis path lengkap ke file yang dapat dieksekusi - ini adalah kebiasaan yang baik. Mari kita buat skripnya dapat dieksekusi dan pada titik ini pengaturan server Xrdp dapat dianggap selesai:
sudo chmod 755 /etc/xrdp/startwm.shMulai ulang server:
sudo systemctl restart xrdp
Menyiapkan firewall
Secara default, Xrdp mendengarkan port TCP 3389 di semua antarmuka. Tergantung pada konfigurasi server virtual, Anda mungkin perlu mengkonfigurasi firewall Netfilter. Di Linux, ini biasanya dilakukan menggunakan utilitas iptables, tetapi di Ubuntu lebih baik menggunakan ufw. Jika alamat IP klien diketahui, konfigurasi dilakukan dengan perintah berikut:
sudo ufw allow from IP_Address to any port 3389Anda dapat mengizinkan koneksi dari IP apa pun seperti ini:
sudo ufw allow 3389Protokol RDP mendukung enkripsi, tetapi mengekspos server Xrdp ke jaringan publik adalah ide yang buruk. Jika klien tidak memiliki IP tetap, server hanya boleh mendengarkan localhost untuk meningkatkan keamanan. Cara terbaik adalah mengaksesnya melalui terowongan SSH, yang akan mengalihkan lalu lintas dari komputer klien dengan aman. Kami memiliki pendekatan serupa untuk server VNC.
Menghubungkan ke server RDP
Untuk bekerja dengan lingkungan desktop, lebih baik membuat pengguna terpisah yang tidak memiliki hak istimewa:
sudo adduser rdpuser 
Mari tambahkan pengguna ke grup sudo sehingga dia dapat melakukan tugas terkait administrasi. Jika tidak diperlukan, Anda dapat melewati langkah ini:
sudo gpasswd -a rdpuser sudoAnda dapat menyambung ke server menggunakan klien RDP apa pun, termasuk klien Layanan Desktop Jarak Jauh Windows bawaan. Jika Xrdp mendengarkan antarmuka eksternal, tidak diperlukan tindakan tambahan. Cukup menentukan alamat IP VPS, nama pengguna dan kata sandi di pengaturan koneksi. Setelah terhubung, kita akan melihat sesuatu seperti ini:

Setelah pengaturan awal lingkungan desktop, kita akan mendapatkan desktop yang lengkap. Seperti yang Anda lihat, ini tidak menghabiskan banyak sumber daya, meskipun semuanya bergantung pada aplikasi yang digunakan.

Jika server Xrdp hanya mendengarkan localhost, lalu lintas di komputer klien harus dikemas ke dalam terowongan SSH (sshd harus berjalan di VPS). Di Windows, Anda dapat menggunakan klien SSH grafis (misalnya, PuTTY), dan pada sistem UNIX Anda memerlukan utilitas ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipSetelah terowongan diinisialisasi, klien RDP tidak lagi terhubung ke server jarak jauh, tetapi ke host lokal.
Lebih sulit lagi dengan perangkat seluler: Klien SSH yang mampu membangun terowongan harus dibeli, dan di iOS dan iPadOS, pengoperasian aplikasi pihak ketiga di latar belakang menjadi sulit karena optimalisasi konsumsi energi yang terlalu baik. Di iPhone dan iPad, Anda tidak akan dapat membuat terowongan di aplikasi terpisah; Anda memerlukan aplikasi pemanen yang dapat membuat koneksi RDP melalui SSH. Seperti misalnya .
Manajer Sesi dan Sesi Pengguna
Kemampuan kerja multi-pengguna diimplementasikan langsung di server Xrdp dan tidak memerlukan konfigurasi tambahan. Setelah memulai layanan melalui systemd, satu proses berjalan dalam mode daemon, mendengarkan pada port 3389 dan berkomunikasi melalui localhost dengan manajer sesi.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Manajer sesi biasanya tidak terlihat oleh pengguna, karena login dan kata sandi yang ditentukan dalam pengaturan klien ditransfer secara otomatis. Jika hal ini tidak terjadi atau terjadi kesalahan selama autentikasi, jendela login interaktif akan muncul di layar desktop.

Peluncuran otomatis manajer sesi ditentukan dalam file /etc/default/xrdp, dan konfigurasinya disimpan di /etc/xrdp/sesman.ini. Secara default, tampilannya seperti ini:
[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]Anda tidak perlu mengubah apa pun di sini, Anda hanya perlu menonaktifkan login dengan hak root (AllowRootLogin=false). Untuk setiap pengguna yang diotorisasi dalam sistem, proses xrdp terpisah diluncurkan: jika Anda memutuskan sambungan tanpa mengakhiri sesi, proses pengguna akan terus berjalan secara default, dan Anda dapat menyambung ke sesi itu lagi. Pengaturan dapat diubah di file /etc/xrdp/sesman.ini (bagian [Sesi]).
Mengganti tata letak keyboard
Biasanya tidak ada masalah dengan clipboard dua arah, tetapi dengan tata letak keyboard Rusia Anda harus bermain-main sedikit (lokal Rusia seharusnya sudah ). Mari kita edit pengaturan keyboard server Xrdp:
sudo nano /etc/xrdp/xrdp_keyboard.iniAnda perlu menambahkan baris berikut ke akhir file konfigurasi:
[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,ruYang tersisa hanyalah menyimpan file dan memulai ulang Xrdp:
sudo systemctl restart xrdpSeperti yang Anda lihat, tidak sulit untuk menyiapkan server RDP di VPS Linux Kami telah membahas pengaturan VNC. Selain teknologi tersebut, ada opsi menarik lainnya: sistem X3Go menggunakan protokol NX 2 yang dimodifikasi. Kami akan membahasnya di publikasi berikutnya.
Sumber: www.habr.com
