- Moonshine adalah host Linux yang mengirim tampilan game PC ke klien Moonlight dan mengembalikan input keyboard, mouse, serta controller ke host untuk mendukung remote play
- Menggunakan Wayland compositor terpisah untuk setiap stream agar terisolasi dari desktop, sehingga PC host tetap bisa digunakan saat streaming dan dapat berjalan di server tanpa monitor
- Mendukung encoding H.264, H.265, dan AV1 melalui GPU, HDR 10-bit, input termasuk motion, touchpad, dan haptic, serta audio latensi rendah berbasis Opus untuk kanal 5.1 dan 7.1
- Memerlukan Linux dan systemd, GPU NVIDIA RTX, AMD RDNA2+, atau Intel Arc yang mampu melakukan encoding video Vulkan, serta Moonlight v6.0.0 atau lebih baru
- Trafik protokol GameStream tidak sepenuhnya dienkripsi pada lapisan aplikasi, jadi port tidak boleh diekspos langsung ke internet; untuk akses eksternal diperlukan VPN seperti Tailscale, WireGuard, atau ZeroTier
Streaming game terisolasi
- Setiap aplikasi berjalan dalam sesi streaming tersendiri yang terpisah dari desktop host
- PC host tetap dapat digunakan untuk tugas lain saat streaming
- Berjalan di server headless tanpa sesi desktop aktif, monitor, atau HDMI dummy plug
- Menangani H.264, H.265, dan AV1 dengan encoding video Vulkan pada GPU
- Pada game yang didukung, menyediakan streaming HDR 10-bit yang sebenarnya
- Mendukung mouse, keyboard, dan gamepad, serta menangani input motion, touchpad, dan haptic pada gamepad
- Audio menggunakan encoding Opus latensi rendah serta mendukung stereo dan surround 5.1/7.1
Persyaratan menjalankan
- Saat ini khusus Linux, telah diuji di Arch Linux dan ada laporan berjalan di distribusi Linux lain
- systemd diperlukan untuk menjalankan dan mengelola proses aplikasi
- Memerlukan GPU NVIDIA RTX, AMD RDNA2 atau lebih baru, atau Intel Arc yang mendukung encoding video Vulkan
- Klien harus Moonlight v6.0.0 atau lebih baru; kompatibilitas dengan versi lama atau port tidak resmi tidak dijamin
Instalasi dan menjalankan
- Di Arch Linux, dapat diinstal melalui AUR dengan
yay -S moonshine - Agar aplikasi dapat dijalankan meski pengguna sedang logout, gunakan
sudo loginctl enable-linger $USER- Jika pengguna selalu login saat streaming, langkah ini dapat dilewati
- Jalankan
sudo systemctl enable --now moonshine@$USERuntuk memulai layanan saat boot dan menjalankannya segera - Build dari sumber memerlukan clang, CMake, Rust, header Wayland dan Vulkan, shaderc, Mesa, Opus, pustaka terkait PulseAudio, dan lainnya
- Setelah build, jalankan dengan
cargo run --release -- /path/to/config.toml
Konfigurasi dan koneksi klien
- Jika tidak ada file di path yang ditentukan, file konfigurasi akan dibuat otomatis
- Path default paket AUR adalah
$XDG_CONFIG_HOME/moonshine/config.toml
- Path default paket AUR adalah
- Moonlight menampilkan PIN saat koneksi pertama; pairing dapat dilakukan melalui notifikasi host atau
http://localhost:47989/pin - Pairing juga dapat dilakukan dari command line dengan melakukan POST
uniqueiddanpinke endpoint/submit-pin
Konfigurasi aplikasi
- Setiap
[[application]]diconfig.tomlmendefinisikan program yang akan dijalankan dalam sesi terisolasititle: nama yang ditampilkan di Moonlightboxart: path gambar sampul opsionalcommand: executable dan daftar argumen
pre_commandmenjalankan perintah secara sinkron berurutan sebelum aplikasi dimulai, dan sesi menunggu hingga semuanya selesaipost_commandmenjalankan perintah secara sinkron berurutan setelah streaming berakhir, dan server menunggu hingga semuanya selesai- Ini dapat digunakan untuk menghentikan layanan yang berbenturan atau mengubah status GPU sebelum dan sesudah streaming
Penemuan aplikasi otomatis
- Steam scanner menemukan game terinstal dari library Steam yang ditentukan dan menyusun perintah eksekusi yang menyertakan ID game
- Desktop scanner menemukan aplikasi dari file
.desktopdi direktori yang ditentukan- Dapat mengatur apakah aplikasi terminal disertakan dan apakah path ikon di-resolve
Perbedaan dan batasan dibanding Sunshine
- Sunshine mendukung lebih banyak platform dan secara umum lebih banyak fitur, tetapi Moonshine khusus Linux
- Keunggulan Moonshine adalah sesi streaming diisolasi dari desktop, sehingga host tetap dapat digunakan dan tetap berjalan tanpa desktop aktif
- Streaming simultan ke dua klien saat ini tidak didukung dan bukan fokus proyek
Keamanan jaringan
- Moonshine tidak dirancang untuk jaringan publik
- Karena keterbatasan protokol GameStream yang mendasarinya, trafik tidak sepenuhnya dienkripsi pada lapisan aplikasi
- Untuk streaming melalui internet, gunakan VPN seperti Tailscale, WireGuard, atau ZeroTier, dan jangan membuka port Moonshine secara langsung
Proyek dasar
- Moonlight: menyediakan klien untuk Moonshine
- Sunshine: menyediakan dasar API host
- Inputtino: menyediakan dasar implementasi perangkat input
- magic-mirror: memberikan inspirasi untuk streaming headless menggunakan Vulkan dan Wayland compositor
1 komentar
Komentar Hacker News
Singkatnya, Nvidia GameStream dulu adalah teknologi tertutup lalu dihentikan Nvidia, setelah itu Sunshine dan Moonlight muncul sebagai server dan klien open source yang mendukung streaming latensi rendah di semua platform
Game on Whales menambahkan streaming multi-pengguna dan tampilan virtual sehingga lebih mirip Stadia/GeForce Now yang di-host sendiri tanpa memengaruhi sesi login yang sudah ada, dan menjalankan Steam, Firefox, dan lain-lain dalam kontainer yang dipilih
Setelah itu Apollo dan Artemis mempermudah streaming tampilan virtual, tetapi tampilan virtual Apollo pada dasarnya hanya untuk Windows, dan Moonshine mengimplementasikan hal ini di server Linux
Vibepollo yang bercabang dari Apollo adalah versi perbaikan yang hampir sepenuhnya dibuat dengan vibe coding, jadi saya pribadi tidak berniat memakainya, tetapi saya penasaran apakah ada yang terlewat dari silsilah ini
Tidak seperti Google, Steam sudah punya basis pelanggan, jadi rasanya tidak akan mengejutkan jika besok mereka mengumumkan layanan bergaya Stadia yang menjalankan game milik pengguna di semua perangkat keras
Sunshine menampilkan game juga di layar host saat streaming, tetapi saya ingin memastikan apakah Moonshine berarti bisa berjalan tanpa layar fisik atau menjalankan beberapa game sekaligus
Sunshine mengenalinya sebagai tampilan nyata, jadi saya hanya perlu menyisakan kabel daya dan LAN, dan server game Linux berjalan baik tanpa HDMI dummy plug atau driver tampilan virtual
Saya penasaran apakah di Windows orang lain tetap bisa memakai server saat sedang bermain game jarak jauh. Sebagian besar solusi tampilan virtual yang saya temukan justru mematikan tampilan server
Saya pengembang Moonshine. Intinya mirip Sunshine, tetapi bedanya ia membuat compositor sendiri tanpa bergantung pada lingkungan desktop yang sudah ada
Ia bisa berjalan headless tanpa lingkungan desktop, membuat resolusi dan refresh rate sekehendak hati tanpa dummy plug, dan menggunakan HDR meski monitor tidak mendukungnya. Anda juga bisa tetap memakai desktop yang ada sambil sekaligus melakukan streaming game
Secara teknis, proyek ini sengaja memilih cakupan yang sempit—satu encoder Vulkan, satu Linux, tanpa GUI, dan tidak mendukung klien Moonlight lama—agar basis kodenya tetap ringan. Sebagai gantinya, diperlukan GPU dan driver yang relatif baru serta klien Moonlight yang baru
Ini proyek hobi yang saya buat sejak 2022; awalnya kalah dibanding Sunshine sehingga README menyarankan untuk tidak memakainya, tetapi kalimat itu dihapus setelah muncul fitur yang membedakannya
Untuk pengguna baru, saya tetap menyarankan Sunshine lebih dulu karena materinya lebih banyak dan kemungkinan besar langsung bekerja; kalau suka mencoba hal baru, Moonshine juga oke
Dengan struktur compositor sendiri, tampaknya sulit menjalankan lingkungan desktop penuh, tetapi Linux sangat butuh cara untuk setidaknya menjalankan aplikasi satu per satu secara remote dengan stabil. Server bawaan KDE dan GNOME secara umum bermasalah dan monitornya juga harus menyala
Dengan Sunshine dan Moonlight, saya bisa melakukan emulasi dan upscaling game PS2 SSX Tricky di desktop lalu men-streaming-kannya dengan sangat mulus ke Android set-top box berusia lebih dari 7 tahun
Hanya saja game itu tampil apa adanya di layar desktop sehingga host tidak bisa dipakai orang lain saat ada yang bermain, dan Moonshine tampaknya menyelesaikan masalah itu. Ibarat sentuhan penyempurna pada kombinasi yang sebelumnya sudah hebat
Saya memakai Moonlight dan Apollo dengan cara menghubungkan DualSense ke MacBook, membuka Moonlight, masuk layar penuh ke desktop gaming, lalu menjalankan game AAA di Steam
Di Wi‑Fi 7, hampir tidak ada latensi yang terasa, dan Minisforum yang terhubung ke TV besar juga bisa diakses dengan kombinasi tombol lain di DualSense. Apollo menyimpan pengaturan sehingga saya bisa berpindah di antara dua perangkat itu hampir tanpa masalah
Ponsel hanya memutar video, jadi tidak panas dan baterainya juga awet
Saya penasaran apakah Moonshine membuat semacam desktop virtual untuk tiap sesi, hanya layar terpisah, atau benar-benar instance compositor yang sepenuhnya terpisah
Saya menggunakan pendekatan seperti ini untuk men-streaming game Switch yang diemulasikan di PC ke Wii U dan 3DS lawas
Saya cukup puas menggunakan kombinasi Moonlight dan Sunshine di server GPU RTX 4000 Pro
Satu-satunya kekurangan adalah penyesuaian resolusi otomatis sesuai klien yang terhubung, tetapi itu saya atasi dengan menulis skrip memakai klien Windows Home Assistant
Saya pernah mengikuti panduan untuk menyiapkan streaming Sunshine dan Moonlight dari laptop ke ponsel, tetapi tidak mendapatkan hasil yang layak pakai
Saya akhirnya menyerah setelah menghabiskan satu minggu waktu luang yang terbatas untuk game santai saya hanya untuk mengutak-atik codec, latensi, pengaturan Wi‑Fi, dan berbagai aplikasi, dan sekarang saya penasaran apakah dalam sekitar 3 tahun terakhir ini sudah membaik
Pada akhirnya game yang ingin saya mainkan ternyata hanya mendukung multipemain lokal dan, berbeda dari penilaian kompatibilitas terbatas di ProtonDB, bisa langsung dijalankan di laptop sehingga streaming tidak diperlukan, tetapi proses setup-nya sendiri mudah. Saya juga memakai Tailscale
Bahkan dalam kondisi ideal, koneksi nirkabel membutuhkan jauh lebih banyak paket yang harus dikirim ulang, jadi sebaiknya Wi‑Fi hanya dipakai di sisi klien
Saya memakai Sunshine dan Moonlight untuk akses jarak jauh ke VM pengembangan ROS 2 yang terhubung langsung ke GPU
Saya memilih VM karena membutuhkan Ubuntu lama, dan simulasi Gazebo memerlukan passthrough GPU. Di RDP desktop terasa sangat lambat dan tidak responsif, tetapi dengan kombinasi ini jadi cukup layak dipakai
Streaming game PC sendiri kini jauh lebih sulit dikonfigurasi dibanding masa ketika cukup menyalakan fitur Nvidia
Terakhir kali saya mencobanya, saya tidak berhasil mengetahui cara membuatnya berjalan dan akhirnya menyerah; terlepas dari kelebihan lainnya, para pengembang open source tampaknya belum benar-benar memperhatikan usability
Anda juga bisa memakai panduan YouTube atau bantuan AI; saya sendiri pernah menemukan bersama AI bahwa penyebabnya adalah firewall distro Linux yang memblokir port streaming
Sebaiknya mulai dari jaringan lokal dulu dan atur streaming internet belakangan, tetapi jika punya home VPN seperti WireGuard atau Tailscale, itu mungkin tidak akan sulit. Host paling baik memakai kabel, dan Wi‑Fi klien juga umumnya cukup baik jika mendukung 6GHz
Ini memang tidak semudah PS Remote Play yang terasa seperti sihir, tetapi saya tetap menyarankan untuk mencobanya lagi
Berbeda dari rekomendasi, host saya juga memakai Wi‑Fi dan tetap berjalan baik; itu adalah salah satu momen paling ajaib yang pernah saya alami dengan teknologi dalam beberapa tahun terakhir. Namun saya hanya memakai streaming Wi‑Fi lokal