Belajar Remote Desktop - Autostart & Service Management (systemd)
Episode 10 of 23

Belajar Remote Desktop - Autostart & Service Management (systemd)

Episode ini membahas otomatisasi VNC server dengan systemd: membuat unit .service untuk x11vnc dan TigerVNC dengan User, ExecStart, Restart, dan Environment, menjalankan VNC tanpa login fisik saat headless boot, serta verifikasi service dengan systemctl.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Sejauh ini kalian menyalakan server VNC secara manual dari terminal. Itu baik untuk belajar, tapi tidak untuk produksi. Server VNC di dunia nyata harus hidup sendiri: ikut menyala saat mesin boot, restart otomatis jika crash, dan berjalan sebagai pengguna yang tepat. Di Linux, alat untuk itu adalah systemd.

Episode 10 memandu kalian membuat unit service systemd untuk dua skenario: men-share display fisik dengan x11vnc, dan membuat virtual display headless dengan TigerVNC. Di akhir episode, kalian akan punya server VNC yang berjalan sebagai service — fondasi penting untuk episode 16 saat kita membahas hardening.

Mengapa systemd

Service yang Bisa Diandalkan

Menjalankan server VNC dengan nohup atau screen terasa praktis, tapi tidak tahan uji. systemd memberi kalian empat keunggulan yang tidak dimiliki cara manual:

  • Autostart: service menyala otomatis saat boot tanpa login.
  • Restart: jika proses crash, systemd menyalakannya kembali.
  • Dependency: service hanya jalan setelah network atau graphical target siap.
  • Logging: semua output masuk ke journald dan bisa dibaca dengan journalctl.

Pola ini sama untuk semua service Linux — sekali kalian paham, kalian bisa memakai pengetahuan yang sama untuk xrdp, SSH, atau aplikasi lain.

Unit Service untuk x11vnc

Membuat File Unit

Mulai dari skenario paling umum: men-share display :0 milik user yang login. Buat file /etc/systemd/system/x11vnc.service:

Unit systemd untuk x11vnc
[Unit]
Description=x11vnc VNC server
After=graphical.target network.target
 
[Service]
Type=simple
User=arman
Environment=DISPLAY=:0
ExecStart=/usr/bin/x11vnc -forever -autoport -display :0 -auth guess -rfbauth /etc/x11vnc.pass
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

Perhatikan bagian-bagian pentingnya: After=graphical.target memastikan display :0 sudah ada sebelum service dijalankan, User=arman menentukan pemilik proses dan file otoritas yang dibaca, Environment=DISPLAY=:0 menanamkan variabel display, dan Restart=on-failure membuat systemd menyalakan ulang server jika mati tidak wajar.

Mengaktifkan dan Memverifikasi

Setelah file unit dibuat, beri tahu systemd lalu aktifkan service:

Reload dan enable service
sudo systemctl daemon-reload
sudo systemctl enable --now x11vnc.service
sudo systemctl status x11vnc.service

Perintah systemctl enable --now x11vnc.service mengaktifkan service sekarang dan sekaligus mendaftarkannya agar menyala saat boot. Status active (running) menandakan semuanya berjalan. Log bisa dibaca dengan:

Baca log service x11vnc
journalctl -u x11vnc.service -f

Unit Service untuk TigerVNC Virtual Display

Template Unit

Untuk virtual display yang headless, pola yang dipakai adalah template unit vncserver@.service. Tanda %i diganti nomor display saat service diaktifkan, sehingga satu file unit bisa melayani display :1, :2, dan seterusnya. Buat /etc/systemd/system/vncserver@.service:

Template unit untuk TigerVNC
[Unit]
Description=TigerVNC server untuk display :%i
After=syslog.target network.target
 
[Service]
Type=forking
User=arman
ExecStart=/usr/bin/vncserver :%i -geometry 1920x1080 -depth 24
ExecStop=/usr/bin/vncserver -kill :%i
 
[Install]
WantedBy=multi-user.target

Unit ini menjalankan vncserver :1, :2, dan seterusnya sesuai argumen %i. Type=forking penting karena vncserver melepas diri ke latar belakang setelah membuat display.

Aktivasi per Display

Aktifkan service untuk display :1:

Enable vncserver display :1
sudo systemctl daemon-reload
sudo systemctl enable --now vncserver@:1
sudo systemctl status vncserver@:1

Perintah systemctl enable --now vncserver@:1 membuat display virtual :1 di port 5901 dan mendaftarkannya saat boot. Untuk display kedua, cukup ulangi dengan vncserver@:2 — tidak perlu file unit baru.

Tip

Pastikan ~/.vnc/xstartup milik user di file unit sudah executable dan memanggil desktop environment yang terinstall. Jika tidak, service akan tetap aktif tapi viewer hanya melihat layar abu-abu.

Headless Boot dan Konfigurasi Per User

Menjalankan VNC Tanpa Login Fisik

Keunggulan utama service systemd adalah VNC bisa berjalan tanpa ada yang login di konsol. x11vnc tetap membutuhkan display aktif di mesin, jadi pastikan display manager seperti GDM atau LightDM berjalan dan user tetap di-login. Untuk virtual display TigerVNC, tidak ada syarat sama sekali — display murni dibuat di memori.

Konfigurasi di RHEL dan Rocky

Di keluarga RHEL/Rocky, distribusi menyediakan unit vncserver@.service bawaan yang membaca pemetaan user dari /etc/tigervnc/vncserver.users:

Pemetaan user ke display
:1=arman
:2=budi

Dengan file ini, perintah cukup systemctl enable --now vncserver@:1 tanpa menyebut User= di unit — systemd membaca user dari pemetaan. Tambahkan juga konfigurasi default di ~/.vnc/config seperti yang kalian pelajari di episode 7.

Verifikasi Akhir

Setelah semua service berjalan, lakukan pemeriksaan menyeluruh:

Verifikasi service VNC
systemctl list-units --type=service | grep -E "vnc|x11"
ss -tulpn | grep 590
vncserver -list

systemctl list-units --type=service | grep -E "vnc|x11" menampilkan semua service VNC yang aktif, dan ss -tulpn | grep 590 memastikan port-nya mendengarkan. Jika ada service gagal, baca log-nya dulu sebelum mengubah konfigurasi.

Penutup

Episode 10 menutup otomatisasi: kalian kini bisa membuat unit systemd untuk x11vnc dengan After=graphical.target, template unit vncserver@.service untuk virtual display headless, mengaktifkan service saat boot, dan memverifikasi dengan systemctl serta journalctl.

Inti yang harus dibawa pulang:

  • systemd memberikan autostart, restart otomatis, dependency, dan logging.
  • Unit x11vnc butuh After=graphical.target dan Environment=DISPLAY=:0.
  • Template vncserver@.service memakai %i untuk melayani banyak display.
  • Type=forking diperlukan karena vncserver melepas diri ke latar belakang.
  • systemctl enable --now mengaktifkan sekarang sekaligus saat boot.
  • journalctl -u <service> adalah pintu pertama saat service gagal.

Di episode 11 selanjutnya kita membahas clipboard, file transfer, dan periferal — berbagi clipboard VNC dengan vncconfig, keterbatasan view-only, file transfer TightVNC versus scp/rsync, serta pengaturan keyboard (XKB), mouse, dan multi-monitor. Sampai jumpa!

Belajar Remote Desktop - Autostart & Service Management (systemd) | Belajar Remote Desktop