1 poin oleh GN⁺ 6 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • 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@$USER untuk 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
  • 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 uniqueid dan pin ke endpoint /submit-pin

Konfigurasi aplikasi

  • Setiap [[application]] di config.toml mendefinisikan program yang akan dijalankan dalam sesi terisolasi
    • title: nama yang ditampilkan di Moonlight
    • boxart: path gambar sampul opsional
    • command: executable dan daftar argumen
  • pre_command menjalankan perintah secara sinkron berurutan sebelum aplikasi dimulai, dan sesi menunggu hingga semuanya selesai
  • post_command menjalankan 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 .desktop di 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

 
GN⁺ 6 jam lalu
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

    • Steam Link juga belum disebut. Penjualan perangkat kerasnya memang sudah berakhir, tetapi perangkat lunaknya tetap hidup lewat aplikasi Android dan sebagainya
      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
    • GPU konsumen masih pada praktiknya hampir mustahil dibagi oleh beberapa host virtualisasi, jadi kegunaannya terbatas. Konfigurasi idealnya adalah menghubungkan thin client ke satu server kuat untuk memainkan game seperti COD lama
    • Saya penasaran apakah Moonshine bekerja seperti Sunshine headless di Linux
      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
    • Saya mengatur parameter kernel agar Fedora di dalam Proxmox saat boot membuat tampilan palsu yang meniru spesifikasi monitor asli
      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
    • Sunshine dan Moonlight tampaknya kembali aktif dikembangkan dan bahkan memiliki rilis yang lebih baru daripada Apollo dan Artemis
      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

    • Bahkan hanya dengan paket Claude atau Codex 20 dolar per bulan, hambatan untuk mulai mengutak-atik Linux sudah jauh menurun. Hal-hal yang dulu membuat macet berjam-jam atau berhari-hari kini bisa diselesaikan sambil minum secangkir kopi, jadi saat mengujinya di mesin Bazzite, bagian-bagian yang masih agak kasar mungkin tidak lagi terlalu mengganggu seperti dulu
    • Rasanya Anda memperkenalkannya terlalu rendah hati. Perbedaan bahwa Sunshine di Linux tidak bisa memakai resolusi sekehendak hati itu sangat besar
    • Saya frustrasi dengan berbagai masalah Sunshine di Linux lalu tadi malam menemukan Moonshine, dan sejauh ini saya sangat puas
    • Saya sudah memakainya sekitar 10 menit dan terkesan. Saya memang tidak bisa menjalankan VS Code, tetapi karena ada mode remote itu tidak terlalu penting, dan nanti saya akan coba lagi dengan aplikasi lain
      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 kangen seri SSX. Sayang sekali EA Big ditutup dan tidak ada perusahaan lain yang meneruskannya, dan dari semuanya saya paling suka Tricky
  • 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

    • Layak juga dicoba di ponsel Android. Dengan layar OLED 6,7 inci 2340×1080, 120Hz HDR yang dipasangi kontroler, bermain Diablo 2 Remastered di tempat tidur terasa bahkan lebih memuaskan daripada Steam Deck
      Ponsel hanya memutar video, jadi tidak panas dan baterainya juga awet
    • Saya juga penasaran apakah untuk mencegah lonjakan latensi saat streaming perlu mematikan AWDL
    • Selain dukungan game non-Steam, saya juga penasaran apakah ini bekerja lebih baik daripada Steam Link
  • Saya penasaran apakah Moonshine membuat semacam desktop virtual untuk tiap sesi, hanya layar terpisah, atau benar-benar instance compositor yang sepenuhnya terpisah

    • Sesuai penjelasan fiturnya, tiap stream berjalan di compositor-nya sendiri yang sepenuhnya terpisah dari lingkungan desktop. Gagasan tentang server game yang bisa meng-host beberapa instance terasa sangat menarik
  • Saya menggunakan pendekatan seperti ini untuk men-streaming game Switch yang diemulasikan di PC ke Wii U dan 3DS lawas

    • Juga memakainya di perangkat genggam modern berbasis Android seperti Ayn Odin dan Thor
    • Beberapa tahun lalu saya membuat alat dalam Rust yang mendukung permainan jaringan multipemain untuk semua emulator, dan ternyata implementasinya mudah
  • 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

    • Sesekali ada sesi yang bekerja sempurna, jadi saya tahu ini secara teknis mungkin, tetapi sekitar 90% sisanya dipenuhi error aneh, masalah konfigurasi, dan update yang merusak kompatibilitas. Ada orang yang berhasil memakainya dengan baik, tetapi tampaknya masih banyak pekerjaan yang dibutuhkan untuk memoles masalah-masalahnya
    • Sekitar seminggu lalu, dengan bantuan LLM, saya menyelesaikan setup dalam 30 menit untuk host Windows dan klien Ubuntu, dan masalah koneksi jaringan eksternal juga selesai dalam sekitar 15 menit
      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
    • PC host sebaiknya terhubung ke LAN kabel, dan klien sebaiknya minimal memakai Wi‑Fi 6 untuk 1080p 60fps ke atas. Beberapa router mengalami packet loss yang parah, jadi lebih baik pakai perangkat yang bagus atau merakit sendiri
    • Saya memakai Sunshine dan Moonlight antara desktop dan PS Vita, dan kuncinya adalah setidaknya menghubungkan host lewat kabel dan menekan latensi ke router nirkabel serendah mungkin
      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

    • Sekarang situasinya jauh lebih baik dibanding era fitur eksklusif Nvidia, jadi layak dicoba lagi. Cara paling sederhana adalah Remote Play bawaan Steam dan aplikasi resminya, sementara Sunshine dan Moonlight memberi hasil yang lebih baik, pengaturan yang lebih rinci, dan dukungan untuk aplikasi di luar Steam
      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
    • Lima tahun lalu saya sepenuhnya menyerah pada streaming game karena masalah serupa, tetapi sebulan lalu saya menyiapkan Sunshine dan Moonlight dalam 5 menit untuk memainkan Oxygen Not Included dari sofa memakai laptop Linux lama, dan langsung bekerja sempurna
      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