Di kantor yang PC Windows-nya banyak, ada satu keunggulan yang tidak bisa ditandingi VNC: aplikasi Remote Desktop Connection — mstsc — sudah terpasang bawaan di setiap Windows sejak lama. xrdp adalah server open-source yang membuat Linux berbicara bahasa RDP (Remote Desktop Protocol), sehingga klien Windows itu tersambung ke server Linux tanpa perangkat lunak tambahan, lengkap dengan enkripsi TLS bawaan dan pemetaan kredensial ke akun Linux. Bab ini membedah cara kerjanya: arsitektur dua proses xrdp dan sesman, berkas konfigurasi xrdp.ini yang kita bangun sebagai fixture lalu diaudit, pilihan backend sesi, sampai perbandingan kinerjanya melawan VNC. Lingkungan latihan tidak memiliki xrdp terpasang, jadi seluruh berkas konfigurasi ditulis sungguhan di sandbox dan polanya diperiksa — pola yang persis sama dengan yang dibaca xrdp di /etc/xrdp/.

RDP dan Posisi xrdp #

RDP adalah protokol remote desktop milik Microsoft yang dipakai Remote Desktop Services di Windows Server, dengan klien bawaan di hampir semua Windows dan macOS. Protokol ini kaya fitur: enkripsi TLS sejak handshake, bitmap caching yang menghemat bandwidth, kompresi kanal, serta redirect suara, printer, dan clipboard. Klien Remmina di Linux juga bicara RDP, jadi xrdp tidak hanya melayani Windows — ia melayani siapa pun yang lebih nyaman ber-RDP.

xrdp sendiri adalah proyek open-source yang membalik arah protokol itu: bukan klien Linux ke server Windows, melainkan server RDP di atas Linux. Autentikasinya memakai akun Linux biasa lewat PAM — password yang sama dengan login SSH — bukan password delapan karakter milik VNC. Satu port 3389 melayani semua sesi; mesin tidak perlu membuka rentang port per display seperti VNC.

Arsitektur: xrdp, sesman, dan Backend Sesi #

Menyambung lewat xrdp bukan satu proses monolitik, melainkan kerja sama dua daemon dengan pembagian tugas yang tegas. xrdp mendengarkan di port 3389, menjalankan handshake TLS, dan menampilkan login screen; begitu user mengisi kredensial, validasinya diteruskan ke sesman — session manager — yang memeriksa password lewat PAM lalu melahirkan sesi desktop sesuai backend yang dipilih:

text
klien RDP (mstsc, Remmina)
        |  TCP port 3389 + TLS
        v
       xrdp  --kredensial via PAM-->  sesman
        |                                |
        |  menu sesi: [Xorg] / [Xvnc]    |
        v                                v
   backend Xorg (modul xorgxrdp)   backend Xvnc (Xvnc + xstartup)

Dua backend itu bukan pilihan kosmetik. Backend Xorg menjalankan server X betulan lewat modul xorgxrdp — hasilnya sesi virtual yang digambar langsung untuk klien RDP, jalur utama di Debian modern. Backend Xvnc memakai Xvnc dari bab VNC dengan segala perilakunya: sesi virtual yang dibesarkan skrip xstartup, bertahan setelah klien putus, plus lapisan penerjemah RFB-ke-RDP. Login screen xrdp membiarkan user memilih backend ini lewat menu Session — keputusan administratif yang tidak perlu diambil tiap kali bila satu nilai sudah ditetapkan di konfigurasi.

Berkas xrdp.ini: Pintu Utama Konfigurasi #

Seluruh pengaturan di atas tinggal di satu berkas: /etc/xrdp/xrdp.ini. Bagian [Globals] mengatur port dan keamanan, [Channels] menyalakan atau mematikan redirect perangkat, dan tiap sesi backend punya blok sendiri yang muncul di menu login. Pada mesin nyata berkas ini diedit sebagai root lalu xrdp di-restart; karena sandbox latihan tidak punya root, salinan yang setruktur aslinya tersedia sebagai berkas pendukung xrdp.ini di bagian bawah halaman — tiap blok latihan cukup membacanya, seperti blok berikut:

bash
cat xrdp.ini

Output yang Dihasilkan:

text
[Globals]
ini_version=1
port=3389
address=0.0.0.0
security_layer=negotiate
crypt_level=high
max_bpp=32

[Channels]
rdpdr=true
rdpsnd=true
cliprdr=true

[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1

[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
  1. port=3389: port standar RDP — klien mstsc menyambung tanpa konfigurasi tambahan apa pun.
  2. address=0.0.0.0: server mendengarkan di semua antarmuka jaringan; nilainya bisa dipersempit ke satu alamat bila kebijakan menuntut.
  3. security_layer=negotiate: klien dan server saling tawar memakai TLS standar RDP; alternatifnya tls (paksa) dan rdp (enkripsi RDP lama — hindari).
  4. crypt_level=high: kekuatan enkripsi kanal setelah handshake — low dan medium hanya untuk kompatibilitas klien purba.
  5. [Channels]: rdpdr mengalirkan drive dan printer, rdpsnd suara, cliprdr clipboard; false mematikan satu per satu.
  6. lib=libxup.so dan lib=libvnc.so: modul yang menghubungkan xrdp dengan tiap backend — modul inilah yang membedakan blok [Xorg] dan [Xvnc].
  7. username=ask / password=ask: login screen meminta kredensial; mengganti ask dengan nilai tetap dipakai untuk sesi unattended — jarang dan biasanya buruk untuk keamanan.
  8. port=-1: sesman yang memilih port sesi yang baru dibuat — bukan port tetap; nomor 5900 dari bab VNC tidak berlaku di sini.

Audit Konfigurasi: Kebijakan dalam Bentuk Skrip #

Berkas konfigurasi hanya berguna bila isinya sesuai kebijakan, dan kebijakan paling hidup saat ia bisa diperiksa otomatis. Fungsi kecil berikut membandingkan parameter kritis xrdp.ini dengan nilai yang kita tetapkan — satu parameter sengaja dibuat gagal untuk melihat bentuk peringatannya:

bash
cek() {
  if grep -q "^$1=$2$" xrdp.ini; then
    printf '[ok]    %s=%s\n' "$1" "$2"
  else
    printf '[ubah]  %s seharusnya %s\n' "$1" "$2"
  fi
}
cek port 3389
cek security_layer negotiate
cek crypt_level high
cek address 127.0.0.1

Output yang Dihasilkan:

text
[ok]    port=3389
[ok]    security_layer=negotiate
[ok]    crypt_level=high
[ubah]  address seharusnya 127.0.0.1
  1. **grep -q "^$1=$2$"**: mencocokkan baris parameter=nilaisecara penuh — jangkar^dan$mencegahport=33890dianggap cocok denganport=3389`.
  2. grep -q: mode senyap — cukup exit code untuk keputusan if, tanpa output.
  3. cek address 127.0.0.1: baris ini sengaja gagal karena fixture menulis 0.0.0.0 — audit yang baik selalu menampilkan pelanggaran, bukan hanya keberhasilan.

Audit kedua menjawab pertanyaan yang lebih struktural: backend apa saja yang ditawarkan server ini? Nama sesi di menu login diambil dari blok-blok berkas konfigurasi, dan pasangan lib-nya menunjukkan mesin di baliknya:

bash
awk '/^\[/ { gsub(/[][]/, ""); sec = $0 }
     /^lib=/ { sub(/^lib=/, ""); printf "sesi %-6s via %s\n", sec, $0 }' xrdp.ini

Output yang Dihasilkan:

text
sesi Xorg   via libxup.so
sesi Xvnc   via libvnc.so
  1. /^\[/ { gsub(/[][]/, ""); sec = $0 }: setiap judul bagian seperti [Xorg] dibersihkan dari tanda kurungnya lalu disimpan sebagai nama sesi.
  2. /^lib=/ { sub(/^lib=/, "") }: pada baris lib=, prefiksnya dihapus sehingga tersisa nama modul.
  3. printf "sesi %-6s via %s\n": menu yang sama dengan yang dilihat user di login screen — dua backend, dua modul berbeda.

Login Screen dan Klien yang Menyambung #

Dari sisi klien Windows, seluruh kerumitan di atas tersembunyi di balik tiga langkah: buka Remote Desktop Connection, isi kolom komputer dengan server-kantor, klik Connect. Layar login xrdp-lah yang menyambut setelahnya. Berikut contoh tampilan yang dihadapi user:

text
+----------------------------------------------+
|  Login to server-kantor                      |
|----------------------------------------------|
|  Session:   [ Xorg                        ]  |
|  Username:  [ budi                        ]  |
|  Password:  [ ********                    ]  |
|                                              |
|               [ OK ]      [ Cancel ]         |
+----------------------------------------------+

Kredensial yang diminta adalah akun Linux biasa — password yang sama dengan SSH — dan menu Session memilih backend dari audit tadi. Di sisi Linux, Remmina menyambung ke server yang sama dengan protokol RDP, sehingga satu server melayani klien Windows dan Linux sekaligus.

xrdp atau VNC Murni #

Pilihan antara keduanya adalah soal lingkungan, bukan keunggulan mutlak:

AspekVNC murnixrdp (RDP)
Klien di Windowsperlu dipasang (TigerVNC, RealVNC)bawaan: Remote Desktop (mstsc)
Autentikasipassword VNC sendiri, maksimal 8 karakterakun Linux biasa via PAM
Enkripsi bawaantidak ada — wajib terowongan SSHTLS sejak handshake
Tautan lambatberat: persegi framebuffer mentahringan: bitmap caching + kompresi
Suara, printer, clipboardumumnya tidakredirect ketiganya lewat channel
Port5900 + N per sesisatu 3389 untuk semua sesi

VNC tetap menang di satu hal: kliennya ada di mana-mana, termasuk di perangkat lain — dan bila protokol sudah diamankan terowongan SSH, kelemahan enkripsinya tidak relevan. xrdp unggul di kantor campuran Windows dan di tautan WAN yang pelan, tempat bitmap caching terasa langsung.

Seluruh bab ini dan sebelumnya bercerita tentang mesin yang menyala. Padahal langkah paling awal dari remote access bisa lebih dini lagi: menyalakan mesin itu sendiri dari jarak jauh. Chapter berikutnya membahas Wake-on-LAN — magic packet, syarat BIOS, dan ethtool — yang menutup rantai dari tombol power sampai desktop jauh.

Referensi lanjut: xrdp(8) untuk perilaku daemon xrdp, dan xrdp.ini(5) untuk kamus lengkap semua parameter berkas konfigurasinya.