- Moonshine, PC oyun görüntüsünü Moonlight istemcisine ileten ve klavye, fare, kontrolcü girişlerini host’a geri göndererek uzaktan oynamayı destekleyen bir Linux host’udur
- Her stream için ayrı bir Wayland compositor kullanarak masaüstünden izole eder; stream sırasında host PC kullanılmaya devam edebilir ve monitörsüz sunucularda da çalışabilir
- GPU üzerinden H.264, H.265 ve AV1 kodlama, 10 bit HDR, hareket, touchpad ve haptic dahil girişler ile Opus tabanlı düşük gecikmeli 5.1/7.1 kanal ses desteği sunar
- Linux ve systemd, Vulkan video kodlaması yapabilen NVIDIA RTX, AMD RDNA2+ veya Intel Arc GPU, ayrıca Moonlight v6.0.0 veya üzeri gerekir
- GameStream protokol trafiği uygulama katmanında tamamen şifrelenmediğinden portlar doğrudan internete açılmamalı; dış erişim için Tailscale, WireGuard veya ZeroTier gibi bir VPN gerekir
İzole oyun streaming’i
- Her uygulama, host masaüstünden ayrı kendi streaming oturumunda çalışır
- Stream sırasında host PC başka işler için kullanılabilir
- Aktif masaüstü oturumu, monitör veya HDMI dummy plug olmadan headless sunucuda çalışır
- GPU’nun Vulkan video kodlamasıyla H.264, H.265 ve AV1 işler
- Desteklenen oyunlarda gerçek 10 bit HDR streaming sunar
- Fare, klavye ve gamepad’i destekler; gamepad’in hareket, touchpad ve haptic girişlerini de işler
- Ses, düşük gecikmeli Opus kodlaması kullanır ve stereo ile 5.1/7.1 surround desteği sunar
Çalıştırma gereksinimleri
- Şu anda yalnızca Linux içindir; Arch Linux’ta test edilmiştir ve diğer Linux dağıtımlarında da çalıştığına dair örnekler vardır
- Uygulama süreçlerini çalıştırmak ve yönetmek için systemd gerekir
- Vulkan video kodlamasını destekleyen NVIDIA RTX, AMD RDNA2 veya üzeri ya da Intel Arc GPU gerekir
- İstemci Moonlight v6.0.0 veya üzeri olmalıdır; eski sürümler veya resmi olmayan portlar için uyumluluk garanti edilmez
Kurulum ve çalıştırma
- Arch Linux’ta AUR üzerinden
yay -S moonshineile kurulabilir - Kullanıcı oturum kapatmış olsa bile uygulamaları çalıştırmak için
sudo loginctl enable-linger $USERkullanılır- Stream sırasında kullanıcı her zaman oturum açmış durumdaysa bu adım atlanabilir
sudo systemctl enable --now moonshine@$USERile servisi açılışta başlatır ve hemen çalıştırırsınız- Kaynaktan derleme için clang, CMake, Rust, Wayland ve Vulkan header’ları, shaderc, Mesa, Opus, PulseAudio ile ilgili kütüphaneler vb. gerekir
- Derlemeden sonra
cargo run --release -- /path/to/config.tomlile çalıştırılır
Yapılandırma ve istemci bağlantısı
- Belirtilen yolda dosya yoksa yapılandırma dosyasını otomatik oluşturur
- AUR paketinin varsayılan yolu
$XDG_CONFIG_HOME/moonshine/config.tomlşeklindedir
- AUR paketinin varsayılan yolu
- Moonlight ilk bağlantıda bir PIN gösterir; host bildiriminden veya
http://localhost:47989/pinadresinden eşleştirme yapılabilir /submit-pinendpoint’ineuniqueidvepinPOST edilerek komut satırından da eşleştirme yapılabilir
Uygulama yapılandırması
config.tomliçindeki her[[application]], izole oturumda çalıştırılacak programı tanımlartitle: Moonlight’ta gösterilecek adboxart: isteğe bağlı kapak görseli yolucommand: çalıştırılacak dosya ve argüman listesi
pre_command, uygulama başlamadan önce komutları sırayla senkron çalıştırır ve hepsi bitene kadar oturum beklerpost_command, streaming bittikten sonra komutları sırayla senkron çalıştırır ve hepsi bitene kadar sunucu bekler- Bu sayede çakışan servisler durdurulabilir veya streaming öncesi/sonrası GPU durumu değiştirilebilir
Otomatik uygulama keşfi
- Steam scanner, belirtilen Steam kütüphanesinde kurulu oyunları bulur ve oyun ID’sini içeren çalıştırma komutunu oluşturur
- Desktop scanner, belirtilen dizindeki
.desktopdosyalarından uygulamaları bulur- Terminal uygulamalarının dahil edilip edilmeyeceği ve ikon yollarının çözümlenip çözümlenmeyeceği yapılandırılabilir
Sunshine ile farkları ve sınırlamalar
- Sunshine daha fazla platformu ve genel olarak daha fazla özelliği destekler, ancak Moonshine yalnızca Linux içindir
- Moonshine’ın ayırt edici yanı, streaming oturumunu masaüstünden izole ederek host’un kullanılmaya devam edebilmesi ve aktif masaüstü olmadan da çalışabilmesidir
- İki istemciye eşzamanlı streaming şu anda desteklenmez ve projenin odağı da değildir
Ağ güvenliği
- Moonshine genel ağlar için tasarlanmamıştır
- Altta yatan GameStream protokolünün sınırlamaları nedeniyle trafik uygulama katmanında tamamen şifrelenmez
- İnternet üzerinden streaming için Tailscale, WireGuard veya ZeroTier gibi bir VPN kullanılmalı; Moonshine portları doğrudan açılmamalıdır
Temel alınan projeler
- Moonlight: Moonshine için istemci sağlar
- Sunshine: Host API’sinin temelini sağlar
- Inputtino: Giriş cihazı uygulamasının temelini sağlar
- magic-mirror: Vulkan ve Wayland compositor kullanarak headless streaming için ilham vermiştir
1 yorum
Hacker News görüşleri
Özetle Nvidia GameStream tescilli bir teknolojiydi, sonra Nvidia bunu sonlandırdı; ardından Sunshine ve Moonlight tüm platformlarda düşük gecikmeli yayın desteği sunan açık kaynak sunucu/istemci olarak ortaya çıktı
Game on Whales, çok kullanıcılı yayın ve sanal ekran ekleyerek mevcut oturum açılmış oturumları etkilemeyen, kendi kendine barındırılan bir Stadia/GeForce Now çözümüne daha yakın; Steam, Firefox vb. seçilmiş konteynerlerde çalıştırıyor
Sonrasında Apollo ve Artemis sanal ekran yayını kurmayı basitleştirdi, ancak Apollo'nun sanal ekranı fiilen yalnızca Windows'a özel ve Moonshine bunu Linux sunucuda uyguluyor
Apollo'dan ayrılan Vibepollo neredeyse tamamen vibe coding ile yapılmış geliştirilmiş bir sürüm olduğu için kişisel olarak kullanmayı düşünmüyorum; bu soy ağacında eksik kalan başka bir şey olup olmadığını merak ediyorum
Steam, Google'ın aksine zaten bir müşteri tabanına sahip olduğu için, yarın tüm donanımlarda sahip olunan oyunları çalıştıran Stadia benzeri bir hizmet duyursa hiç şaşırmazdım
Sunshine yayın sırasında oyunu ana makinenin ekranında da gösteriyor; Moonshine'ın ise fiziksel ekran olmadan çalışabildiği ya da aynı anda birden fazla oyunu çalıştırabildiği mi kastediliyor, bunu netleştirmek istiyorum
Sunshine bunu gerçek ekran olarak algılıyor, bu yüzden yalnızca güç ve LAN kablosu bırakmak yetiyor; HDMI dummy plug veya sanal ekran sürücüsü olmadan Linux oyun sunucusu gayet iyi çalışıyor
Windows'ta uzaktan oyun oynanırken başka birinin sunucuyu kullanıp kullanamayacağını merak ediyorum. Baktığım sanal ekran çözümlerinin çoğu sunucu ekranını kapatıyor
Moonshine'ın geliştiricisiyim. Temel fikir Sunshine'a benziyor, ama farkı mevcut masaüstü ortamına bağlı olmadan kendi compositor'ünü oluşturması
Masaüstü ortamı olmadan headless çalışabilir, dummy plug olmadan keyfi çözünürlükler ve yenileme hızları oluşturabilir, monitör desteklemese bile HDR kullanabilir. Mevcut masaüstünü kullanırken aynı anda oyun yayını yapmak da mümkün
Teknik olarak kasıtlı olarak dar bir kapsam seçtim: tek Vulkan encoder, tek Linux, GUI yok, eski Moonlight istemcileri desteklenmiyor; böylece kod tabanı hafif kalıyor. Bunun karşılığında nispeten yeni GPU/sürücüler ve yeni Moonlight istemcileri gerekiyor
2022'den beri üzerinde çalıştığım bir hobi projesi; başta Sunshine'dan daha kötü olduğu için README'de kullanılmamasını öneriyordum, ama ayırt edici özellikler eklenince bu ifadeyi kaldırdım
Yeni kullanıcılara önce Sunshine'ı tavsiye ediyorum, çünkü daha çok kaynak var ve sorunsuz çalışma ihtimali daha yüksek; ama yeni şeyler denemeyi seviyorsanız Moonshine da iyi bir seçenek
Kendi compositor yapısı nedeniyle tam bir masaüstü ortamı çalıştırmak zor görünüyor, ama Linux'ta uygulamaları tek tek de olsa uzaktan ve kararlı biçimde çalıştırmanın bir yoluna gerçekten ihtiyaç var. KDE ve GNOME'un yerleşik sunucularında genel olarak sorun var ve monitörün de açık olması gerekiyor
Sunshine ve Moonlight ile masaüstünde emüle edilmiş ve upscale yapılmış PS2 oyunu SSX Tricky'yi 7 yıldan eski bir Android set-top box'a çok akıcı biçimde yayınlayabildim
Ancak oyun masaüstü ekranında da aynen göründüğü için başkası oyun oynarken ana makineyi kullanamıyordum; Moonshine bunu çözüyor gibi görünüyor. Zaten harika olan bir kombinasyona son dokunuşu eklemiş gibi
MacBook'a DualSense bağlayıp Moonlight'ı açıyor, oyun masaüstüme tam ekran bağlanıyor ve Steam'deki AAA oyunları çalıştırıyorum; bu şekilde Moonlight ve Apollo kullanıyorum
Wi‑Fi 7'de hissedilir bir gecikme neredeyse yok ve büyük TV'ye bağlı Minisforum'a da DualSense'in farklı bir tuş kombinasyonuyla bağlanabiliyorum. Apollo ayarları kaydettiği için iki cihaz arasında geçiş neredeyse sorunsuz
Telefon yalnızca videoyu oynattığı için ısınmıyor ve batarya da uzun gidiyor
Moonshine'ın her oturum için sanal masaüstü benzeri bir şey mi oluşturduğunu, sadece ayrı bir ekran mı sunduğunu yoksa tamamen bağımsız bir compositor instance mı olduğunu merak ediyorum
Bu yöntemi, PC'de Switch oyunlarını emüle edip eski Wii U ve 3DS cihazlarına yayın yapmak için kullanıyorum
Moonlight ve Sunshine ikilisini RTX 4000 Pro GPU sunucusunda memnuniyetle kullanıyorum
Yalnızca bağlı istemciye göre otomatik çözünürlük ayarlaması eksikti ama bunu Home Assistant Windows istemcisiyle bir betik yazarak çözdüm
Dizüstü bilgisayardan telefona Sunshine ve Moonlight yayınını kurmak için rehberi takip ettim ama işe yarar bir sonuç alamadım
Dinlenmek için ayırdığım oyun süresinin sınırlı olduğu bir haftayı codec, gecikme, Wi‑Fi ayarları ve çeşitli uygulamalarla uğraşarak harcayıp vazgeçtim; şimdi yaklaşık 3 yıl sonra bunun iyileşip iyileşmediğini merak ediyorum
Sonuçta oynamak istediğim oyun yalnızca yerel çok oyunculu destekliyordu ve ProtonDB'deki sınırlı uyumluluk değerlendirmesinin aksine doğrudan dizüstünde çalıştı, bu yüzden yayına gerek kalmadı; ama kurulumun kendisi kolaydı. Tailscale de kullandım
Kablosuzda, ideal koşullarda bile yeniden iletim gerektiren paket sayısı çok daha fazla oluyor; bu yüzden Wi‑Fi'yi yalnızca istemci tarafında kullanmak daha iyi
Doğrudan GPU bağlanmış ROS 2 geliştirme VM'ine uzaktan erişmek için Sunshine ve Moonlight kullanıyorum
Eski bir Ubuntu gerektiği için VM seçtim ve Gazebo simülasyonu nedeniyle doğrudan GPU bağlantısı gerekiyordu. RDP'de masaüstü aşırı yavaş ve tepkisizdi ama bu ikiliyle kullanılabilir hâle geldi
Kendi PC oyun yayınını kurmak, Nvidia özelliğini açmanın yeterli olduğu döneme göre çok daha zorlaştı
En son denediğimde nasıl çalıştıracağımı çözemeyip vazgeçmiştim; başka avantajlarına rağmen açık kaynak geliştiricileri kullanılabilirlik konusunu yeterince önemsemiyor gibi görünüyor
YouTube rehberlerinden ya da yapay zekadan da yardım alınabilir; hatta bir keresinde Linux dağıtımının güvenlik duvarının yayın portlarını engellediğini yapay zekayla birlikte bulmuştum
Önce yerel ağda başlamak, internet üzerinden yayını ise sonra kurmak daha iyi; ama WireGuard veya Tailscale gibi bir ev VPN'iniz varsa zor olmayabilir. Host için kablolu bağlantı en iyisi ve istemci Wi‑Fi'si 6GHz destekliyorsa genelde yeterince iyi oluyor
PS Remote Play kadar sihirli derecede kolay değil ama tekrar denemenizi tavsiye ederim
Önerilerin aksine host da Wi‑Fi'daydı ama gayet iyi çalıştı; son birkaç yılda teknolojiyle yaşadığım en sihirli anlardan biriydi. Yine de yalnızca yerel Wi‑Fi yayını kullanıyorum