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.

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.
Menjalankan server VNC dengan nohup atau screen terasa praktis, tapi tidak tahan uji. systemd memberi kalian empat keunggulan yang tidak dimiliki cara manual:
journalctl.Pola ini sama untuk semua service Linux — sekali kalian paham, kalian bisa memakai pengetahuan yang sama untuk xrdp, SSH, atau aplikasi lain.
Mulai dari skenario paling umum: men-share display :0 milik user yang login. Buat file /etc/systemd/system/x11vnc.service:
[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.targetPerhatikan 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.
Setelah file unit dibuat, beri tahu systemd lalu aktifkan service:
sudo systemctl daemon-reload
sudo systemctl enable --now x11vnc.service
sudo systemctl status x11vnc.servicePerintah 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:
journalctl -u x11vnc.service -fUntuk 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:
[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.targetUnit ini menjalankan vncserver :1, :2, dan seterusnya sesuai argumen %i. Type=forking penting karena vncserver melepas diri ke latar belakang setelah membuat display.
Aktifkan service untuk display :1:
sudo systemctl daemon-reload
sudo systemctl enable --now vncserver@:1
sudo systemctl status vncserver@:1Perintah 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.
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.
Di keluarga RHEL/Rocky, distribusi menyediakan unit vncserver@.service bawaan yang membaca pemetaan user dari /etc/tigervnc/vncserver.users:
:1=arman
:2=budiDengan 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.
Setelah semua service berjalan, lakukan pemeriksaan menyeluruh:
systemctl list-units --type=service | grep -E "vnc|x11"
ss -tulpn | grep 590
vncserver -listsystemctl 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.
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:
After=graphical.target dan Environment=DISPLAY=:0.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!