Saya pernah menulis bahwa WSL (Windows Subsystem Linux) bisa menjalakan aplikasi GUI milik GNU/Linux.

Tulisan sebelumnya (Menjalankan GUI dari Aplikasi GNU/Linux di Windows Subsystem Linux) diperuntukan buat WSL1. Karena sekarang sudah jamannya WSL2. Saya rasa perlu ditulis lagi.

Tujuannya

Kalau ditanya apa sih tujuannya menjalankan aplikasi GUI? Buat Apa Juga? Bukannya Percuma?

Macam-macam sih, tapi yang saya tau karena “ya.. WSL bisa” atau sekadar keren-kerenan aja entahlah.

Kalau saya sendiri sih cuma buat ngejalanin gitg . Yakni aplikasi git GUI yang saya pakai buat mengecek ulang hasil _commit_an saya sebelum di-push.

Sebenernya sih bisa aja saya pakai perintah git diff dari CLI. Tapi saya butuh visualisasi agar sedikit lebih mudah.

Kalau sudah di Windows kenapa saya tidak memakai aplikasi canggih yang sudah ada?

Jawabannya adalah saya sudah terbiasa pakai gitg, jadi agak susah move on.

Saya sudah lama terbiasa dengan aplikasi-aplikasi GNU/Linux. Jadi ketika saya pindah ke Windows, saya banyak memasang kembali aplikasinya. Baik yang sudah ada native-nya atau hanya bisa jalan di WSL.

Sebagai informasi, saya masih ngoding pakai neovim di Windows melalui WSL loh! Jujur saja saya gak terbiasa pakai aplikasi seperti VSCode dan sejenisnya hehehe.

Bagaimana Cara Menjalankannya?

Di WSL2 kamu bisa menjalankan aplikasi GUI dengan dua cara. Yakni melalui aplikasi pihak ketiga atau langsung dari WSL sendiri tanpa pasang aplikasi macam-macam.

Adapun cara-caranya bisa kamu lihat di bawah ini.

Melalui Aplikasi Pihak Ketiga

Seperti artikel sebelumnya untuk menjalankan aplikasi GNU/Linux ber-GUI kita perlu memasang xserver di WSL. Juga perlu memasang xserver clientnya di host.

Untuk xserver client saran saya gunakan VcXsrv yang bisa kamu unduh di: https://sourceforge.net/projects/vcxsrv/

Penampakan Aplikasinya seperti ini.

VcXsrv
VcXsrv Pada Saat Menjalankan XLaunch

Setelah kamu memasang VcXsrv pastikan kamu menjalankan XLaunch -nya.

Win11 Xlaunch
Windows 11 Menu - Search XLaunch

Setalah kamu menjalankan Xlauncher, pastikan kamu mengeset Display Number-mu menjadi nol (0). Juga beberapa pengaturan perlu kamu centangkan.

Akan lebih mudah kamu bisa lihat animasi berikut:

Konfig VcXsrv
Konfigurasi VcXsrv

Langkah selanjutnya kamu perlu memberi tahu xserver WSL mu, bahwa kamu menjalankan VcXsrv.

Caranya adalah dengan menulis variabel DISPLAY dengan nilai IP mu dan display number yang tadi kamu set yakni nol.

Jadi seperti ini:

$ export DISPLAY=192.168.0.1:0.0

Kenapa di atas ditulis menjadi 0.0 ?

Singkatnya ini dihasilkan dari VcXsrv. Kamu bisa lihatnya dari icon tray.

VcXsrv display

Nah lihat di sana tertulis DEKTOP blablabla :0.0

Selesai deh, kamu tinggal jalankan saja aplikasi GUI mu.

IP di atas adalah IP contoh. Untuk mengesetnya kamu harus tau WSL mu menjalankan IP berapa. Bisa kamu cek dengan perintah:

$ ip a

Nah permasalahnya IP di WSL selalu berubah-ubah. Jadi bakalan ribet deh. Masa iya kamu mesti cek IP dulu, terus set variabel DISPLAY nya lagi? Kan ribet!

Solusinya kamu bisa gunakan perintah ini:

$ export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
$ export LIBGL_ALWAYS_INDIRECT=1

Atau dengan skrip ini:

$ export DISPLAY="`ip -4 address | grep -A1 eth0 | grep inet | cut -d' ' -f6 | cut -d/ -f1`:0"
$ export LIBGL_ALWAYS_INDIRECT=1

Atau

$ export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0.0
$ export LIBGL_ALWAYS_INDIRECT=1

Apa bedanya?

Bedanya yang pertama dan kedua, saya menggunakan banyak tools yakni cat, grep , awk, ip, cut. Sedangkan yang ketiga lebih simpel, saya hanya pakai awk.

Kamu bebas pilih yang mana dar ketiga skrip di atas. Semuanya bisa dipakai kok.

Kalau saya sendiri lebih senang cara yang pertama. Skipnya jauh lebih terbaca ketimbang yang di bawahnya.

Sebentar deh! Kamu lihat ada variabel LIBGL_ALWAYS_INDIRECT=1 buat apa tuh? Kan tadinya gak ada?

Variabel itu digunakan untuk memberitahu xserver untuk pakai OpenGL Windows sebagai ganti dari OpenGL GNU/Linux.

Khusus Pengguna Banyak Koneksi

Tahukah kamu kalau skrip di atas hanya akan berjalan jika kamu menggunakan satu koneksi.

Jika kamu pengguna Laptop terkadang kamu mengkoneksikan internetmu dengan dua jaringan dari LAN dan WiFi. Nah skrip-skrip di atas kadang malah ngaco baca IP nya. Alangkah amannya kamu bisa pakai cara ini.

$ export DISPLAY=$(route.exe print | grep 0.0.0.0 | head -1 | awk '{print $4}'):0.0

Melalui Windows 11 Insider

Cara-cara di atas terbilang cukup rumit dan banyak pengaturannya ya. Apalagi kalau kamu pemula, kok ribet banget ya mau jalanin GUI aja di WSL2 hehehe.

Cara yang paling gampang pake banget adalah kamu bisa pakai bawaan. Syaratnya ada dua.

Pertama kamu perlu update Windows 11 mu ke versi Build 22000 atau lebih tinggi. Untuk mendapatkannya, kamu perlu gabung ke Windows Insider.

Kemudian yang kedua, kamu perlu menjalankan virtual GPU (vGPU). Ini perlu mengunduh drivernya dulu.

Driver bisa diunduh di:

Setelah semua dilakukan kamu bisa langsung memasang aplikasi GUI mu, dan aplikasi tersebut bisa langsung dijalankan tanpa ribet-ribet pake skrip!

Permasalahan

VcXsrv tidak bisa berjalan ada kemungkinan masalah firewall dari Windowsmu. Cara termudah tapi gak disarankan yakni kamu disable firewall-mu.

Cara terbaik adalah menambahkan rules khusus untuk VcXsrv.

Catatan: Gambar di atas bukan dari komputer saya, sumbernya dari sini: https://dev.to/egoist/running-linux-gui-programs-in-wsl2-29j3.

Tambahan Skrip

Kalau skrip-skrip di atas entah kenapa gak bisa jalan di komputermu. Mungkin kamu bisa pakai skrip ini.

HOST_IP=$(host `hostname` | grep -oP '(\s)\d+(\.\d+){3}' | tail -1 | awk '{ print $NF }' | tr -d '\r')
export LIBGL_ALWAYS_INDIRECT=1
export DISPLAY=$HOST_IP:0.0
export NO_AT_BRIDGE=1
export PULSE_SERVER=tcp:$HOST_IP

Loh ada banyak variabel tambahan buat apaan tuh?

Kalau kamu merasa gak relevan, bisa dibuang. Tapi kalau dilihat dari namanya kita bisa paham dengan skrip di atas.

Semoga tulisan ini bermanfaat.

Bingung? Tanya aja di kolom komentar ya …