Sunshine i Moonlight: własny streaming gier z komputera na Androida i Google TV w domowej sieci
Pełna konfiguracja domowego strumieniowania gier w sieci lokalnej: instalacja hosta Sunshine na Windows, klient Moonlight na Androidzie i Google TV, parowanie PIN-em, pierwsza gra, pad, ustawienia jakości oraz diagnostyka opóźnień i zrywającego obrazu - bez przekierowywania portów i bez wyłączania zapory.
Komputer z grami stoi w gabinecie, a wygodny fotel i duży telewizor - w salonie. Przenoszenie peceta co wieczór odpada, druga maszyna albo konsola to koszt. Sunshine i Moonlight rozwiązują to inaczej: pecet dalej liczy i renderuje grę, koduje obraz układem w karcie graficznej, a telefon, tablet albo przystawka z Google TV wyświetla gotowy strumień i odsyła sygnały z pada. Sam Sunshine i Moonlight są bezpłatne i nie wymagają konta w chmurze. Jedno zastrzeżenie obowiązuje od września 2026: pełna emulacja padów na Windows, w tym Xbox One i Series, DualSense oraz Switch Pro, wymaga osobnego, płatnego sterownika Virtual HID Driver, a darmowy sterownik ViGEmBus daje pada Xbox 360 lub DualShock 4 - do scenariusza z tego tekstu to wystarcza. (Sunshine: notatki wydania v2026.906.222525 (GitHub)) (LizardByte: Introducing libvirtualhid and Virtual HID Driver (blog)) Poniżej pełna konfiguracja w obrębie domowej sieci: instalacja hosta na Windows, parowanie klienta, pierwsza gra, dobór ustawień jakości i diagnostyka, gdy obraz się rwie albo pad nie działa.
Zakres jest celowo wąski i lepiej wiedzieć o tym przed startem. Wszystko dzieje się w sieci lokalnej: nie ma tu przekierowywania portów na routerze, wystawiania panelu Sunshine do internetu ani wyłączania zapory, bo to czynności o zupełnie innym profilu ryzyka. Po stronie hosta opisany jest wyłącznie Sunshine na Windows - warianty na Linuksie i macOS mają inne wymagania i inne ograniczenia. Po stronie klienta wystarczy natywna aplikacja Moonlight dla Androida, ta sama na telefonie, tablecie i na przystawce z Android TV albo Google TV; przeglądarka ani program pośredniczący nie są do niczego potrzebne.
Cała instrukcja opiera się na oficjalnej dokumentacji projektów Sunshine (LizardByte) i Moonlight. Nie ma w niej pomiarów wydajności na konkretnych modelach urządzeń - tam, gdzie liczy się realny wynik, opisana jest procedura pomiaru do samodzielnego wykonania.
Czym są Sunshine i Moonlight
Moonlight to otwarty klient strumieniowania gier, będący implementacją protokołu GameStream firmy NVIDIA; kod klientów jest publikowany na GitHubie na licencji GPLv3, a projekt prowadzi społeczność, bez reklam, wersji płatnych i subskrypcji. (Moonlight Game Streaming - strona projektu) Klienci istnieją między innymi dla Windows, macOS, Linuksa, Raspberry Pi 4, Androida, iOS i Apple TV oraz ChromeOS, a społeczność rozwija dodatkowe porty. (Moonlight: FAQ (wiki)) (Moonlight Game Streaming - strona projektu)
Sunshine to program hosta, czyli ta część układanki, która działa na komputerze z grami. Jest to samodzielnie hostowany host strumienia dla Moonlight, obsługujący kodowanie sprzętowe na kartach AMD, Intela i NVIDII, z kodowaniem programowym jako wariantem zapasowym; konfiguracja i parowanie klientów odbywają się przez panel webowy. (Sunshine: przeglad i wymagania systemowe) Na stronie Moonlight Sunshine jest wskazany jako zalecany host, od którego warto zacząć. (Moonlight Game Streaming - strona projektu) W dokumentacji Moonlight zaznaczono również, że w odróżnieniu od GeForce Experience Sunshine wciąż otrzymuje nowe funkcje i poprawki błędów. (Moonlight: FAQ (wiki)) Sam program jest otwartoźródłowy i bezpłatny. (Moonlight Game Streaming - strona projektu) Od wydania z 6 września 2026 obsługuje jednak wirtualne urządzenia wejściowe na Windows przez bibliotekę libvirtualhid, a pełne możliwości padów zależą od osobno instalowanego sterownika Virtual HID Driver z płatną licencją; darmowy ViGEmBus pozostaje ograniczonym wariantem zapasowym. (Sunshine: notatki wydania v2026.906.222525 (GitHub)) Wybór między obiema ścieżkami jest opisany w kroku 7 instalacji.
Warto od razu oswoić kilka pojęć, które będą wracać w dalszej części:
- Host - komputer, który uruchamia grę i wysyła obraz. Tutaj: Windows z Sunshine.
- Klient - urządzenie, na którym gra się ogląda i steruje. Tutaj: telefon, tablet z Androidem albo przystawka Google TV z Moonlight.
- Kodowanie sprzętowe - zamiana obrazu na strumień wideo przez dedykowany układ w karcie graficznej. Na Windows Sunshine korzysta z AMF na kartach AMD, NVENC na kartach NVIDIA, QuickSync na układach Intela oraz Media Foundation na układach Qualcomma. (Sunshine: przeglad i wymagania systemowe)
- Przechwytywanie obrazu - sposób pobrania klatek z pulpitu. Na Windows jest to DXGI Desktop Duplication. (Sunshine: przeglad i wymagania systemowe)
- Bitrate - ilość danych na sekundę przeznaczona na obraz. Im wyższy, tym mniej artefaktów kompresji, ale tym większe wymagania wobec sieci i dekodera klienta.
- Opóźnienie (latencja) - czas od naciśnięcia przycisku do pojawienia się efektu na ekranie klienta. Składa się z wielu elementów, opisanych dalej przy statystykach połączenia.
Wymagania i przygotowanie
Komputer z Windows
Wymagania Sunshine rozpisane są w trzech tabelach - minimalnej i dwóch dla wyższych ustawień - z ostrzeżeniem samego projektu, że są one w trakcie opracowywania i nie należy na ich podstawie kupować sprzętu. (Sunshine: przeglad i wymagania systemowe) W tabeli minimalnej wymieniono karty AMD z VCE 1.0 lub nowszym, karty Intela w wariancie Skylake lub nowszym z obsługą kodowania QuickSync na Windows, karty NVIDIA z włączonym NVENC, procesor AMD Ryzen 3 lub Intel Core i3 wzwyż, 4 GB RAM lub więcej oraz Windows 11 lub nowszy. (Sunshine: przeglad i wymagania systemowe) W wymaganiach sieciowych tabela minimalna wskazuje po stronie hosta i klienta sieć 5 GHz w standardzie 802.11ac, a tabele dla wyższych ustawień - okablowanie CAT5e lub lepsze po obu stronach. (Sunshine: przeglad i wymagania systemowe)
Dokumentacja Moonlight formułuje wymagania hosta łagodniej: dla Sunshine wymienia dowolną nowoczesną kartę AMD, NVIDIA lub Intela oraz Windows 10 albo 11, wprost wykluczając Windows 7 i 8. (Moonlight: Setup Guide (wiki)) Różnica względem tabeli Sunshine dotyczy wersji systemu - materiał Sunshine mówi o Windows 11 lub nowszym, wiki Moonlight dopuszcza również Windows 10. (Sunshine: przeglad i wymagania systemowe) (Moonlight: Setup Guide (wiki)) Bezpieczne podejście to traktowanie Windows 11 jako konfiguracji w pełni wspieranej, a Windows 10 jako wariantu, który według dokumentacji klienta powinien działać.
Jest jeszcze jedno ograniczenie, o którym łatwo zapomnieć przy laptopach z dwiema kartami graficznymi: na Windows Sunshine używa Desktop Duplication API, które przechwytuje obraz wyłącznie z układu graficznego obsługującego dany ekran, więc przy chęci kodowania na zewnętrznym eGPU trzeba do niego podłączyć monitor lub zaślepkę HDMI i uruchamiać gry na tym ekranie. (Sunshine: Getting Started (LizardByte docs))
Urządzenie klienckie
Wiki Moonlight podaje jako wymaganie klienta Androida w wersji 4.1 (Jelly Bean) lub nowszej i zaznacza, że nowsze urządzenia z szybszymi procesorami mają większą szansę poradzić sobie z płynnym strumieniem dzięki sprzętowemu dekodowaniu wideo. (Moonlight: Setup Guide (wiki)) Tam też opisano warunki dobrego odbioru: router średniej lub wyższej klasy, dobre połączenie bezprzewodowe z klientem, przy czym zdecydowanie zalecane jest pasmo 5 GHz w standardzie WiFi 5 (802.11ac) lub WiFi 6 (802.11ax), oraz połączenie hosta z routerem kablem Ethernet. (Moonlight: Setup Guide (wiki))
W przypadku przystawek i telewizorów z Google TV lub Android TV używa się tego samego klienta Moonlight dla Androida - projekt nie publikuje osobnej aplikacji telewizyjnej, a dystrybucja odbywa się przez Google Play, Amazon Appstore, F-Droid i pliki APK z wydań na GitHubie. (Moonlight Game Streaming - strona projektu) (moonlight-android - repozytorium klienta Android) Lista klientów w FAQ wymienia obok Androida również tablety i telewizory Amazon Fire, co potwierdza, że urządzenia telewizyjne obsługiwane są w ramach tej samej gałęzi klienta. (Moonlight: FAQ (wiki)) Praktyczna konsekwencja: instalacja na przystawce polega na wyszukaniu Moonlight w sklepie Google Play bezpośrednio na urządzeniu, a nie na szukaniu odrębnej wersji „TV”.
Sieć
Host i klient muszą być w tej samej sieci lokalnej. Nie oznacza to jednego łącza bezprzewodowego: komputer podłączony kablem Ethernet i telefon na Wi-Fi są w tej samej sieci lokalnej, o ile obsługuje je ten sam router i nic w nim nie rozdziela obu segmentów. Sieć gościnna i sieć główna to natomiast dwie różne sieci, a telefon na transmisji komórkowej nie jest w sieci lokalnej w ogóle.
Warto zawczasu sprawdzić trzy rzeczy:
- Komputer połączony kablem do routera - to zalecenie wydajnościowe, nie warunek działania. (Moonlight: Setup Guide (wiki)) Jeżeli komputer ma jednocześnie aktywne Ethernet i WiFi, dokumentacja Moonlight radzi rozłączyć wszystkie połączenia poza najszybszym, zwykle przewodowym, bo wiele interfejsów potrafi utrudnić wykrycie hosta. (Moonlight: Troubleshooting (wiki))
- Klient w paśmie 5 GHz, nie 2,4 GHz. (Moonlight: Setup Guide (wiki))
- Brak izolacji klientów na routerze. Jest to opcja czasem nazywana izolacją AP lub trybem gościa; przy jej włączeniu urządzenia w tej samej sieci nie widzą się nawzajem i Moonlight nie wykryje komputera. Nazwy i położenie tej opcji różnią się między producentami routerów.
Bezpieczeństwo
Panel webowy Sunshine przy pierwszym uruchomieniu prosi o utworzenie konta i jest to zabezpieczenie kluczowe, ponieważ każdy z dostępem do tego interfejsu może dodać nowego klienta i uzyskać zdalny dostęp do komputera. (Moonlight: Setup Guide (wiki)) Domyślnie panel jest ograniczony do sieci lokalnej: opcja origin_web_ui_allowed ma wartość lan, czyli dostęp mają wyłącznie urządzenia z sieci LAN, a alternatywy to pc (tylko localhost) i wan (dowolny host). (Sunshine: Configuration) W tym poradniku nie ma powodu zmieniać tej wartości.
Domyślnie wyłączona jest też opcja upnp, która pozwoliłaby Sunshine samodzielnie otwierać porty na routerze do strumieniowania przez internet. (Sunshine: Configuration) Pozostawienie jej w stanie wyłączonym jest zgodne z zakresem tego tekstu.
Jedna czynność w tym zestawie wymaga jednak internetu, choć nie ma nic wspólnego z samym strumieniem: jeżeli na hoście zostanie zainstalowany płatny Virtual HID Driver, sterownik przy tworzeniu nowego pada łączy się z siecią, żeby sprawdzić licencję maszyny. (LizardByte: Introducing libvirtualhid and Virtual HID Driver (blog)) Darmowy wariant ViGEmBus nie podlega temu mechanizmowi, bo licencja dotyczy wyłącznie urządzeń tworzonych przez libvirtualhid. (Sunshine: Troubleshooting)
Sam protokół używa parowania z kluczami: każdy klient Moonlight generuje unikalny klucz wymieniany bezpośrednio z komputerem podczas parowania, klucze są przechowywane lokalnie na kliencie i nie ma systemu kont online, który mógłby zostać przejęty; dane klawiatury, myszy i pada wracają do hosta połączeniem szyfrowanym. (Moonlight: FAQ (wiki)) Od wersji Sunshine 0.22 dostępne jest pełne szyfrowanie end-to-end obejmujące obraz, dźwięk, sterowanie i nawiązywanie połączenia, domyślnie włączane dla zdolnych urządzeń przy strumieniowaniu przez internet, a tryb dla LAN i WAN można ustawić niezależnie w konfiguracji. (Moonlight: FAQ (wiki)) W pliku konfiguracyjnym odpowiadają za to lan_encryption_mode z wartością domyślną 0 (bez szyfrowania) oraz wan_encryption_mode z wartością domyślną 1 (szyfrowanie, jeżeli klient je obsługuje), przy czym dokumentacja ostrzega, że szyfrowanie może obniżyć wydajność strumieniowania, szczególnie na słabszych hostach i klientach. (Sunshine: Configuration)
Nie należy natomiast wyłączać zapory systemowej. Sunshine powinien tworzyć potrzebne reguły zapory Windows automatycznie. (Moonlight: Setup Guide (wiki)) Gdy zawiodą, należy sprawdzić reguły według procedury w części diagnostycznej, zachowując włączoną ochronę.
Instalacja Sunshine na Windows
- Pobranie instalatora. Dokumentacja wskazuje jako zalecaną metodę binaria z najnowszego wydania i udostępnia dla Windows instalator MSI w dwóch wariantach architektury: AMD64/x64 oraz ARM64 (Sunshine: Getting Started (LizardByte docs)). Instalator MSI jest opisany jako preferowany na przyszłość (Sunshine: Getting Started (LizardByte docs)). Starsze wydania miały jeszcze instalator EXE; notatki wydania z 6 września 2026 informują, że instalatory NSIS w formacie EXE zostały wycofane i należy używać instalatora MSI opartego na WiX (Sunshine: notatki wydania v2026.906.222525 (GitHub)). Przy przejściu ze starej wersji zainstalowanej z pliku EXE na MSI należy najpierw ręcznie odinstalować poprzednią instalację z listy zainstalowanych aplikacji, zgodnie z instrukcją dokumentacji dotyczącą zmiany typu instalatora (Sunshine: Getting Started (LizardByte docs)). Wersja ARM64 na Windows jest opisana jako eksperymentalna i nie obsługuje prawidłowo szeregowania GPU ani akceleracji sprzętowej, więc na typowym pececie z procesorem Intela lub AMD wybiera się wariant AMD64 (Sunshine: Getting Started (LizardByte docs)).
- Uruchomienie instalatora. Dokumentacja wprost ostrzega, aby uważnie wybierać i odznaczać instalowane opcje, a nie instalować i włączać wszystkiego w ciemno. (Sunshine: Getting Started (LizardByte docs)) Jeżeli instalator pokazuje opcję dodania reguł zapory Windows, należy pozostawić ją zaznaczoną. Instalacja z instalatora Windows domyślnie zakłada pracę Sunshine jako usługi, czyli procesu działającego w tle; uruchamianie wielu instancji Sunshine jednocześnie nie jest wskazane. (Sunshine: Getting Started (LizardByte docs))
- Restart komputera. Wiki Moonlight zaznacza, że po instalacji komputer może wymagać ponownego uruchomienia, aby dokończyć konfigurację i aby działała emulacja kontrolera. (Moonlight: Setup Guide (wiki))
- Pierwsze otwarcie panelu. Sunshine konfiguruje się przez panel webowy dostępny domyślnie pod adresem
https://localhost:47990, a zamiastlocalhostmożna podać wewnętrzny adres IP komputera. (Sunshine: Getting Started (LizardByte docs)) Panel można też otworzyć przez pozycję „Open Sunshine” w menu ikony w zasobniku systemowym. (Moonlight: Setup Guide (wiki)) - Ostrzeżenie przeglądarki - tylko w tym jednym przypadku. Przy otwarciu panelu przeglądarka pokaże komunikat o niezabezpieczonej stronie; wynika on z certyfikatu podpisanego samodzielnie przez świeżo zainstalowany Sunshine i w tym konkretnym miejscu można go pominąć. (Sunshine: Getting Started (LizardByte docs)) (Moonlight: Setup Guide (wiki)) Zgoda dotyczy wyłącznie panelu Sunshine otwartego przez HTTPS na porcie
47990, pod adresemlocalhostna własnym komputerze albo pod wewnętrznym adresem IP tego komputera w domowej sieci, bezpośrednio po samodzielnej instalacji. (Sunshine: Getting Started (LizardByte docs)) Nie należy przenosić tej zgody na inne strony ani porty. Przed kliknięciem należy sprawdzić w pasku adresu, że host tolocalhostalbo adres LAN własnego peceta, a port to47990. - Utworzenie konta. Przy pierwszym uruchomieniu Sunshine prosi o utworzenie konta zabezpieczającego dostęp do interfejsu konfiguracyjnego; dokumentacja podkreśla, żeby zapamiętać wpisaną nazwę użytkownika i hasło. (Sunshine: Getting Started (LizardByte docs)) (Moonlight: Setup Guide (wiki))
- Sterownik wirtualnych padów - dwie ścieżki. Ten krok jest osobną instalacją poza samym Sunshine i od wydania z 6 września 2026 wygląda inaczej niż w starszych opisach: wcześniejsze wersje instalowały sterownik ViGEmBus przyciskiem w zakładce Troubleshooting panelu, a teraz Sunshine nie dołącza ani nie instaluje ViGEmBus, a odpowiadające za to API panelu zostało usunięte. (Sunshine: notatki wydania v2026.906.222525 (GitHub)) Sunshine korzysta na Windows z biblioteki libvirtualhid, a sterownik trzeba zainstalować samodzielnie. (Sunshine: Getting Started (LizardByte docs)) Do wyboru są dwie drogi:
- Ścieżka darmowa: ViGEmBus. Sunshine wykrywa ViGEmBus jako ograniczony wariant zapasowy, gdy libvirtualhid nie jest dostępne, i emuluje wtedy wyłącznie pady Xbox 360 oraz DualShock 4; wymagana jest wersja 1.17 lub nowsza, a plik instalacyjny pobiera się z wydań projektu na GitHubie. (Sunshine: Getting Started (LizardByte docs)) (Sunshine: Troubleshooting) Do grania typowym padem w scenariuszu z tego tekstu to wystarcza. Trzeba jednak wiedzieć, że projekt ViGEmBus został zakończony: repozytorium jest oznaczone jako wycofane, ostatnie wydanie to 1.22.0 z 2 listopada 2023, a oświadczenie autora mówi, że projekt i jego biblioteki nie otrzymają już żadnych aktualizacji, choć zarchiwizowane wydania pozostają dostępne. (ViGEmBus: repozytorium projektu (status)) (Nefarius: End of Life Statement (ViGEm)) (ViGEmBus: ostatnie wydanie (GitHub)) Po instalacji zalecany jest restart komputera. (Sunshine: Troubleshooting)
- Ścieżka pełna: Virtual HID Driver. Osobno instalowany sterownik LizardByte, potrzebny dla padów Xbox One, Xbox Series, DualSense, Switch Pro i generycznych; Sunshine wymaga wersji 2026.905.2300.20 lub nowszej. (Sunshine: Getting Started (LizardByte docs)) (Sunshine: Troubleshooting) Instalator MSI dla Windows AMD64 znajduje się w wydaniach repozytorium libvirtualhid. (libvirtualhid: wydania (instalator sterownika Windows)) Dla padów sterownik wymaga aktywnej licencji maszynowej (Sunshine: Troubleshooting) (LizardByte: Introducing libvirtualhid and Virtual HID Driver (blog)). Opisy Sunshine i strony sterownika nie są zgodne co do wymogu tej licencji dla klawiatury i myszy Raw Input (Sunshine: Getting Started (LizardByte docs)) (Sunshine: Troubleshooting) (LizardByte: Introducing libvirtualhid and Virtual HID Driver (blog)). Nie należy kupować jej wyłącznie na podstawie założenia, że jest konieczna do podstawowej obsługi myszy i klawiatury; trzeba sprawdzić komunikat własnej wersji Sunshine i zakres aktualnej oferty sterownika. Licencja jest płatna: według wpisu LizardByte z 16 sierpnia 2026 kosztuje 14,99 USD rocznie w subskrypcji albo 49,99 USD jednorazowo, jedna licencja obejmuje do pięciu maszyn, a przy tworzeniu nowego pada sterownik sprawdza licencję przez internet. (LizardByte: Introducing libvirtualhid and Virtual HID Driver (blog)) Ceny mogą się zmienić; aktualne warianty roczny i dożywotni są na stronie sterownika. (LizardByte: Virtual HID Driver - strona licencji) Stan licencji i związane z nią czynności Sunshine pokazuje na stronie Troubleshooting panelu oraz w podmenu „Virtual HID Driver” ikony w zasobniku. (Sunshine: Getting Started (LizardByte docs))
Po zainstalowaniu lub aktualizacji sterownika wejścia dokumentacja zaleca ponowne uruchomienie komputera. (Sunshine: Getting Started (LizardByte docs)) Bez żadnego z tych sterowników pad podłączony do telefonu nie zostanie zobaczony przez grę na komputerze. Gdy brakuje licencji dla Virtual HID Driver, panel pokazuje ostrzeżenie na stronie głównej i w powiadomieniu przy starcie, a oba prowadzą do sekcji licencji na stronie Troubleshooting. (Sunshine: Troubleshooting)
Po tych krokach host jest gotowy. Zakładka konfiguracji pozwala zmienić motyw interfejsu, dodać gry i aplikacje, przeszukiwać opcje konfiguracyjne za pomocą wyszukiwarki oraz znaleźć klientów Moonlight i narzędzia w zakładce „Featured Apps”. (Sunshine: Getting Started (LizardByte docs))
Instalacja Moonlight na Androidzie lub Google TV
Aplikacja Moonlight Game Streaming dla Androida dostępna jest w Google Play, w Amazon Appstore, w F-Droidzie oraz jako plik APK w wydaniach na GitHubie. (Moonlight Game Streaming - strona projektu) (moonlight-android - repozytorium klienta Android) Na urządzeniu z Google TV najprościej wyszukać ją w sklepie Google Play bezpośrednio na przystawce lub telewizorze; na telefonie i tablecie procedura jest standardowa.
Opis aplikacji w sklepie potwierdza to, co jest tu istotne: aplikacja strumieniuje z komputera z Sunshine (dowolne GPU) albo z GeForce Experience (tylko NVIDIA) i przesyła z urządzenia do peceta sygnały myszy, klawiatury i kontrolera. (Moonlight Game Streaming w Google Play) Aplikacja jest otwartoźródłowa na licencji GPL, a w deklaracji bezpieczeństwa danych w sklepie zaznaczono brak zbierania danych i brak udostępniania ich stronom trzecim. (Moonlight Game Streaming w Google Play) Pozostałe możliwości - wyższe rozdzielczości, HDR, wybór kodeka - mają znaczenie dopiero przy strojeniu jakości i wracają w dalszej części tekstu.
Parowanie hosta z klientem
- Uruchomienie Moonlight przy tej samej sieci. Klient powinien być podłączony do tej samej sieci co komputer; w większości przypadków pecet pojawi się na liście automatycznie po kilku sekundach. (Moonlight: Setup Guide (wiki))
- Ręczne dodanie komputera, jeśli nie został wykryty. Moonlight pozwala dodać komputer ręcznie przez podanie jego adresu IP. (Moonlight: Setup Guide (wiki)) Adres wewnętrzny komputera można odczytać w Windows w ustawieniach sieci; jest to zwykle adres z zakresu prywatnego, na przykład zaczynający się od 192.168.
- Rozpoczęcie parowania. Po wybraniu wpisu komputera na liście Moonlight rozpoczyna parowanie; Sunshine wyświetla na hoście powiadomienie o parowaniu, które przenosi do strony PIN. (Moonlight: Setup Guide (wiki))
- Wpisanie PIN-u w panelu Sunshine. W panelu należy przejść do pozycji „PIN” na pasku nawigacyjnym, wpisać kod wyświetlony przez Moonlight, zatwierdzić klawiszem Enter i podać dowolnie wybraną nazwę urządzenia; poprawne parowanie kończy się komunikatem o powodzeniu. (Sunshine: Getting Started (LizardByte docs)) Po zatwierdzeniu PIN-u w Moonlight można wybrać jedną z wyświetlonych aplikacji. (Sunshine: Getting Started (LizardByte docs))
Test powodzenia tego etapu: komputer widnieje w Moonlight jako dostępny, a po jego wybraniu pojawia się lista aplikacji zawierająca co najmniej pozycję „Desktop”. Sunshine dostarcza wbudowaną pozycję „Desktop” od razu po instalacji. (Moonlight: Setup Guide (wiki)) (Moonlight: FAQ (wiki))
Pierwsza gra
Sunshine zawiera wstępnie skonfigurowane pozycje Steam i „Desktop” (strumień całego pulpitu), a kolejne gry i aplikacje dodaje się ręcznie (Moonlight: Setup Guide (wiki)) (Moonlight: FAQ (wiki)). Aplikacje konfiguruje się przez panel webowy, na stronie „Applications” (Sunshine: App Examples) (Moonlight: Setup Guide (wiki)).
Jedno założenie trzeba spełnić, zanim cokolwiek pojawi się na ekranie klienta: Steam albo konkretna gra musi już normalnie działać na tym komputerze, z klawiatury i myszy. Sunshine nie instaluje gier, nie loguje do Steama i nie naprawia gry, która nie startuje lokalnie. Jeżeli pozycja nie uruchamia się na hoście bez strumienia, nie uruchomi się także przez Moonlight, a diagnostyka strumienia nie da w tym wypadku żadnej użytecznej odpowiedzi.
Najprostszy start wygląda tak:
- Uruchomienie pozycji „Desktop”. W Moonlight należy wybrać komputer, a następnie pozycję „Desktop”. Aplikacja „Desktop” zachowuje się jak każda inna z tą różnicą, że nie ma przypisanych poleceń: nie uruchamia programu, tylko rozpoczyna sam strumień. (Sunshine: Getting Started (LizardByte docs)) To najlepszy pierwszy test, bo eliminuje z równania problemy konkretnej gry.
- Sprawdzenie sterowania. Na ekranie klienta powinien pojawić się pulpit Windows, a dotyk powinien poruszać kursorem. Moonlight na Androidzie używa ekranu dotykowego do sterowania kursorem i ma dwa tryby: tryb gładzika, w którym przesuwanie palcem porusza kursorem, dotknięcie jednym palcem to kliknięcie lewym przyciskiem, dotknięcie drugim palcem przy przytrzymanym pierwszym to kliknięcie prawym, przeciąganie dwoma palcami w pionie to przewijanie, a dotknięcie trzema palcami wywołuje klawiaturę; oraz tryb dotykowy, w którym dotknięcie miejsca oznacza kliknięcie w tym miejscu, długie przytrzymanie to prawy przycisk, a przeciągnięcie palcem to przeciąganie. (Moonlight: Setup Guide (wiki))
- Uruchomienie gry przez Steam Big Picture. W dokumentacji Sunshine przykład dla Windows opisuje pozycję o nazwie „Steam Big Picture” z poleceniem odłączonym (Detached Commands)
steam://open/bigpicture, poleceniem cofającymsteam://close/bigpicturew sekcji przygotowania oraz obrazkiemsteam.png. (Sunshine: App Examples) Dokumentacja tłumaczy, dlaczego jest to polecenie odłączone: Steam startuje procesem, który sam się aktualizuje, a pierwotny proces zostaje zabity. (Sunshine: App Examples) Warto to zapamiętać, bo próba uruchomienia Steama jako zwykłego poleceniacmdzamiastdetachedspowoduje natychmiastowe zerwanie strumienia. (Sunshine: Getting Started (LizardByte docs)) - Dodanie konkretnej gry, jeśli ma być osobną pozycją. Dokumentacja podaje dla Windows trzy warianty: przez URI, przez plik wykonywalny z katalogiem roboczym i przez pełną ścieżkę do pliku wykonywalnego. Dla gry ze Steama wariantem URI jest polecenie odłączone
steam://rungameid/464920(w przykładzie z dokumentacji dla gry Surviving Mars), a wariant z pełną ścieżką to"C:\Program Files (x86)\Steam\steamapps\common\Surviving Mars\MarsSteam.exe". (Sunshine: App Examples) Dokumentacja zaznacza, że metoda z URI jest najbardziej spójna między różnymi grami. (Sunshine: App Examples) Gdy katalog roboczy nie zostanie podany, przyjmowany jest folder, w którym znajduje się uruchamiana aplikacja. (Sunshine: App Examples)
Test powodzenia: gra uruchamia się na komputerze i jej obraz pojawia się na kliencie, ruch analogami pada wywołuje reakcję w grze, a dźwięk jest słyszalny na urządzeniu klienckim.
Dwie zasady działania, które trzeba znać od początku. Po pierwsze, uruchomienie aplikacji w Sunshine kończy działanie aplikacji już uruchomionej, a zamknięcie aplikacji zamyka strumień. (Sunshine: Getting Started (LizardByte docs)) Po drugie, wyjście z Moonlight nie kończy sesji: sesja pozostaje aktywna na hoście, żeby nie stracić postępu w grze i żeby móc wrócić do niej z innego urządzenia, a przy wybranej aplikacji widoczna jest wtedy ikona odtwarzania; żeby faktycznie zakończyć sesję, należy wybrać działającą grę i użyć opcji Quit App, która wymusza zamknięcie aplikacji na hoście, więc wcześniej trzeba zapisać stan gry. (Moonlight: FAQ (wiki)) To samo zachowanie tłumaczy popularne zgłoszenie, że po zakończeniu strumienia nie działa dźwięk na komputerze - w rzeczywistości sesja nadal trwa. (Moonlight: FAQ (wiki))
Pad: podłączenie i typowe pułapki
Pada podłącza się do urządzenia klienckiego, nie do komputera - to urządzenie z Moonlight zbiera sygnały i wysyła je do peceta, gdzie Sunshine odtwarza je jako wirtualnego pada. Kolejność jest więc taka: najpierw pad łączy się z telefonem albo z przystawką, dopiero potem uruchamia się strumień.
Podłączenie pada na przystawce lub telewizorze z Google TV
- Wprowadzić pada w tryb parowania zgodnie z instrukcją jego producenta; wiele kontrolerów sygnalizuje ten stan miganiem diody.
- Na ekranie głównym Google TV przejść w prawym górnym rogu do zdjęcia profilowego lub inicjału i wybrać Settings (Ustawienia). (Pomoc Google TV: laczenie urzadzen Bluetooth)
- Wybrać Remote & Accessories, a następnie Pair remote or accessory. (Pomoc Google TV: laczenie urzadzen Bluetooth)
- Upewnić się, że pad jest w trybie parowania lub jest widoczny dla innych urządzeń, odnaleźć go na liście i wybrać. (Pomoc Google TV: laczenie urzadzen Bluetooth)
- Na ekranie żądania parowania Bluetooth wybrać Pair. (Pomoc Google TV: laczenie urzadzen Bluetooth)
Sparowane akcesoria pojawiają się w sekcji Remote & Accessories w ustawieniach, gdzie można je przemianować lub usunąć, a już sparowane urządzenie łączy się ponownie przez wybranie go w pozycji Accessories i użycie opcji Connect. (Pomoc Google TV: laczenie urzadzen Bluetooth) Warto wiedzieć, że do Google TV można podłączyć kilka urządzeń Bluetooth, ale tylko jedno urządzenie audio naraz. (Pomoc Google TV: laczenie urzadzen Bluetooth)
Podłączenie pada na telefonie lub tablecie z Androidem
- Wprowadzić pada w tryb parowania.
- Przeciągnąć palcem z góry ekranu w dół i przytrzymać ikonę Bluetooth. (Pomoc Android: parowanie urzadzen Bluetooth)
- Wybrać Sparuj nowe urządzenie; gdy tej pozycji nie widać, należy poszukać pod „Dostępne urządzenia” albo użyć menu z opcją odświeżenia. (Pomoc Android: parowanie urzadzen Bluetooth)
- Dotknąć nazwy pada na liście i wykonać instrukcje wyświetlone na ekranie. (Pomoc Android: parowanie urzadzen Bluetooth)
Raz sparowane urządzenia pozostają sparowane aż do ich rozłączenia, a ponowne połączenie polega na wybraniu pada w sekcji „Zapisane urządzenia” przy włączonym Bluetooth; po zestawieniu połączenia urządzenie pokazuje się jako połączone. (Pomoc Android: parowanie urzadzen Bluetooth)
Co obsługuje Moonlight
Moonlight na Androidzie obsługuje pady używające standardowego mapowania przycisków Androida, a także część popularnych kontrolerów spoza tego świata, jak Xbox 360, Xbox One, PS3 i PS4; dokumentacja zaleca jednak sprawdzenie konkretnego pada z konkretnym urządzeniem, bo niektóre kontrolery mają problemy z opóźnieniem lub rozłączaniem, szczególnie pady PlayStation przez Bluetooth. (Moonlight: Setup Guide (wiki))
Dla padów pozbawionych przycisków Select lub Mode przewidziano kombinacje zastępcze: Start i Select razem (dla padów z przyciskiem Select) albo R1 i Start (dla padów bez niego) dają Mode, a L1 i Start dają Select. (Moonlight: Setup Guide (wiki))
Po stronie hosta Sunshine emuluje pada wirtualnego, a zestaw dostępnych typów zależy od zainstalowanego sterownika. Tabela zgodności wymienia dla Windows łącznie pady Generic, DualShock 4, DualSense, Nintendo Switch Pro, Xbox 360, Xbox One i Xbox Series, bez podziału według sterownika (Sunshine: przeglad i wymagania systemowe). Virtual HID Driver dodaje Generic, Xbox One, Xbox Series, DualSense i Nintendo Switch Pro, a strona sterownika wymienia również DualShock 4 (Sunshine: Troubleshooting) (LizardByte: Virtual HID Driver - strona licencji). Według wpisu LizardByte Xbox 360 pozostaje dostępny przez wariant zapasowy ViGEmBus (LizardByte: Introducing libvirtualhid and Virtual HID Driver (blog)).
Z darmowym ViGEmBus jako wariantem zapasowym dostępne są tylko Xbox 360 i DualShock 4. (Sunshine: Getting Started (LizardByte docs))
Opcja gamepad w konfiguracji ma wartość domyślną auto oraz wybory generic, ds4, ds5, switch, x360, xone i xseries; przy typowym zestawie nie wymaga żadnej ingerencji. (Sunshine: Configuration)
Jedna zmiana warta uwagi: notatki wydania zaznaczają, że automatyczna emulacja może teraz wystawić pada Xbox Series zamiast dotychczasowego Xbox 360, więc profile kontrolera zapisane w grach lub w Steamie mogą wymagać ponownej konfiguracji. (Sunshine: notatki wydania v2026.906.222525 (GitHub))
Test powodzenia: po uruchomieniu strumienia i wejściu do gry ruch analogami i naciśnięcia przycisków wywołują reakcję w grze. Jeżeli pad działa w interfejsie Androida, ale nie w grze na strumieniu, problem leży po stronie hosta i rozwiązuje go lista poniżej.
Jeżeli pad w ogóle nie jest widoczny w grach, warto sprawdzić trzy rzeczy w tej kolejności:
- Czy Sunshine widzi sterownik wejścia. Na stronie Troubleshooting panelu znajdują się sekcje wersji i licencji Virtual HID Driver; potrzebny jest albo ten sterownik w wersji 2026.905.2300.20 lub nowszej z aktywną licencją, albo ViGEmBus 1.17 lub nowszy jako ograniczony wariant zapasowy. (Sunshine: Troubleshooting) Jeżeli żadnego nie ma, należy zainstalować jeden z nich ręcznie według kroku 7 instalacji, a po instalacji ponownie uruchomić komputer. (Sunshine: Troubleshooting)
- Czy nie przeszkadza Steam. Dokumentacja Sunshine sugeruje zmianę ustawień Steama tak, aby pozostawić jedynie obsługę kontrolerów generycznych, odznaczając wsparcie konfiguracji dla Xboxa i PlayStation. (Sunshine: Troubleshooting) Wiki Moonlight formułuje to samo jako odznaczenie wszystkich pól „Configuration Support” w ustawieniach kontrolera w trybie Big Picture. (Moonlight: Troubleshooting (wiki))
- Czy do hosta nie jest podłączone zbyt wiele fizycznych kontrolerów. Dokumentacja sugeruje ich odłączenie, żeby pad dostarczany przez Sunshine był tym „pierwszym”. (Sunshine: Troubleshooting)
Osobna, łatwa do przeoczenia przyczyna problemów: część urządzeń mobilnych ma słabe doświadczenia przy aktywnym Bluetooth podczas strumieniowania, co dokumentacja tłumaczy sprzętowym ograniczeniem wynikającym z okablowania anten; przy graniu w domu sugerowanym obejściem jest podłączenie pada bezpośrednio do komputera przez adapter bezprzewodowy albo Bluetooth. (Moonlight: Troubleshooting (wiki)) Zwykły kabel USB do komputera daje ten sam efekt, choć wiki tego wariantu nie wymienia.
Ustawienia jakości
Rozdzielczość, klatki i bitrate
Podstawowa zasada jest prosta: rozdzielczość i liczba klatek określają, ile obrazu trzeba zakodować, a bitrate określa, ile danych na to przeznaczyć. Klient Moonlight na Androidzie deklaruje obsługę do 4K 120 FPS z HDR. (Moonlight Game Streaming w Google Play) To jednak górna granica możliwości aplikacji, a nie zalecenie dla dowolnego zestawu.
Sensowna kolejność strojenia zaczyna się od ustawień konserwatywnych i idzie w górę. Dokumentacja Moonlight przy problemach z płynnością zaleca obniżenie suwaka bitrate, żeby ustalić, czy problem leży w przepustowości, oraz wypróbowanie 720p30 jako ustawienia o najniższych wymaganiach. (Moonlight: Troubleshooting (wiki)) Jest to jednocześnie dobry punkt startowy dla diagnostyki: jeżeli 720p30 działa czysto, a 1080p60 już nie, wąskim gardłem jest sieć, dekoder klienta albo koder hosta, a nie samo połączenie.
Suwak bitrate w Moonlight nie sięga powyżej 150 Mb/s i FAQ tłumaczy to ograniczeniami sprzętowymi i programowymi: dekoder sprzętowy klienta musi realnie obsłużyć zadany bitrate, a ponieważ praktycznie żadne materiały nie są produkowane powyżej 100 Mb/s, jest mało prawdopodobne, by dekoder i sterownik poradziły sobie ze strumieniem rzędu 1 Gb/s nawet przy odpowiedniej sieci; kodery także mają ograniczenia wynikające z nastawienia na bardzo szybkie kodowanie w imię niskiego opóźnienia. (Moonlight: FAQ (wiki))
Po stronie hosta bitrate można ograniczyć niezależnie od żądania klienta. Opcja max_bitrate określa maksymalny bitrate w kb/s, jakim Sunshine zakoduje strumień, a wartość domyślna 0 oznacza używanie zawsze bitrate'u żądanego przez Moonlight. (Sunshine: Configuration)
Kodek
Klient deklaruje obsługę H.264, HEVC i AV1, przy czym AV1 wymaga Sunshine i obsługiwanego GPU po stronie hosta. (Moonlight Game Streaming w Google Play) W Sunshine odpowiadają za to opcje hevc_mode i av1_mode; obie mają wartość domyślną 0, opisaną jako ogłaszanie obsługi na podstawie możliwości kodera i oznaczoną jako zalecana. (Sunshine: Configuration) Dokumentacja ostrzega przy obu, że HEVC i AV1 są bardziej obciążające dla procesora przy kodowaniu, więc ich włączenie może obniżyć wydajność przy kodowaniu programowym. (Sunshine: Configuration) W praktyce oznacza to, że domyślnych wartości nie ma powodu ruszać, dopóki nie ma konkretnego problemu.
HDR i to, czego nie da się obejść
Warto rozumieć jedną zależność, zanim ktoś zacznie szukać HDR-u w ustawieniach. Strumieniowanie HDR jest oficjalnie wspierane na hostach Windows, ale wymaga aktywowania HDR w systemie hosta, co może wymagać wyświetlacza obsługującego HDR albo emulatora EDID podłączonego do komputera, oraz osobnego włączenia opcji HDR w ustawieniach klienta Moonlight - bez tego strumień będzie SDR, a przy hoście w HDR prawdopodobnie prześwietlony. (Sunshine: Getting Started (LizardByte docs))
Po stronie hosta potrzebny jest układ graficzny Intela, AMD lub NVIDII kodujący w profilu HEVC Main 10 albo AV1 10-bit. (Sunshine: Getting Started (LizardByte docs)) Po stronie klienta z Androidem konieczne są Android 7.0 lub nowszy, sprzętowy dekoder HEVC Main10 oraz wyświetlacz zgodny z HDR10, a gdy warunki nie są spełnione, opcja HDR w Moonlight bywa wyszarzona lub w ogóle się nie pojawia. (Moonlight: Setup Guide (wiki))
Stąd wniosek praktyczny: przełączenie strumienia na H.264 jako rozwiązanie problemów z płynnością jest sensowne, ale kończy HDR. Obraz z kodeka H.264 nie jest obrazem HDR i żadne ustawienie po stronie klienta tego nie zmieni - jeżeli strumień ma być w HDR, kodowanie musi iść przez HEVC Main 10 lub AV1 10-bit. (Sunshine: Getting Started (LizardByte docs))
Zmiana rozdzielczości ekranu hosta
Sunshine na Windows ma wbudowaną obsługę zmiany rozdzielczości i częstotliwości odświeżania. (Sunshine: App Examples) Domyślnie ta dodatkowa konfiguracja wyświetlania jest wyłączona i przy pierwszym uruchomieniu nie trzeba jej ruszać - gra po prostu wyświetli się w rozdzielczości ustawionej na komputerze. (Sunshine: Configuration)
Kto chce, aby ekran hosta dopasowywał się do parametrów żądanych przez klienta, znajdzie tę grupę ustawień w panelu pod nazwami zaczynającymi się od dd_; działa ona tylko na Windows, a dopasowanie rozdzielczości wymaga dodatkowo włączonej po stronie Moonlight opcji „Optimize game settings”. (Sunshine: Configuration) Po zamknięciu aplikacji lub zakończeniu ostatniej sesji ustawienia ekranu są przywracane samoczynnie. (Sunshine: Configuration)
Jedno ostrzeżenie warto zapamiętać, zanim ktoś zacznie eksperymentować z tą grupą: dokumentacja zaznacza, że niektóre aplikacje mogą działać nieprawidłowo, gdy konfiguracja wyświetlania zmienia się w trakcie ich pracy. (Sunshine: Configuration)
Nazwa hosta i dźwięk
Nazwę wyświetlaną w Moonlight ustawia sunshine_name, domyślnie równa nazwie komputera. (Sunshine: Configuration) Interfejs Sunshine ma polską wersję językową: opcja locale przyjmuje między innymi wartość pl przy domyślnym en. (Sunshine: Configuration)
Dźwięk domyślnie jest przesyłany i nie wymaga żadnej konfiguracji. (Sunshine: Configuration) Jeżeli przeszkadza to, że gra słychać jednocześnie z głośników komputera, dokumentacja kieruje nie do zmiany urządzenia wyjściowego, lecz do wirtualnego urządzenia dźwiękowego (virtual_sink), wskazując Steam Streaming Speakers albo Virtual Audio Cable; sterowniki Steam Streaming Speakers instaluje domyślnie włączona opcja install_steam_audio_drivers, o ile Steam jest zainstalowany. (Sunshine: Configuration)
Warto też znać skróty klawiszowe hosta. Wszystkie zaczynają się od Ctrl+Alt+Shift, tak jak w Moonlight: Ctrl+Alt+Shift+N ukrywa i pokazuje kursor, co bywa przydatne w trybie pulpitu zdalnego, a Ctrl+Alt+Shift+F1 do F12 przełącza monitor, z którego prowadzone jest strumieniowanie. (Sunshine: Getting Started (LizardByte docs))
Diagnostyka: co sprawdzić, gdy coś nie działa
Statystyki połączenia i co z nich wynika
Na Androidzie i iOS nakładkę z informacjami można włączyć w ustawieniach Moonlight, a na kliencie PC skrótem Ctrl+Alt+Shift+S. (Moonlight: FAQ (wiki)) To jest właściwe narzędzie do samodzielnego pomiaru: dokumentacja opisuje znaczenie poszczególnych liczb, a jednocześnie uczciwie zaznacza granice ich interpretacji.
- Network latency to czas przejścia pakietu klient-host-klient, czyli ping; rośnie wraz z odległością geograficzną od hosta, a także wtedy, gdy ustawiony bitrate przekracza możliwości łącza. (Moonlight: FAQ (wiki))
- Network latency variance, czyli jitter, mierzy zmienność opóźnień kolejnych pakietów; przy bardzo wysokich lub skaczących wartościach dokumentacja radzi obniżyć bitrate albo przejść na stabilniejsze połączenie. (Moonlight: FAQ (wiki))
- Decode latency to średni czas dekodowania klatki do postaci gotowej do wyświetlenia; zależy silnie od sprzętu klienta, bitrate'u, liczby klatek i rozdzielczości, a na części urządzeń zwiększenie liczby klatek do 90 lub 120 FPS potrafi go obniżyć. (Moonlight: FAQ (wiki))
- Frame queue latency to średni czas oczekiwania klatek na wyświetlenie po zdekodowaniu, zwykle dlatego, że poprzednia klatka jest jeszcze rysowana lub czeka na V-Sync; normalnie powinien mieścić się poniżej długości jednej klatki, czyli 16 ms przy 60 FPS. (Moonlight: FAQ (wiki))
- Render latency to średni czas rysowania zdekodowanej klatki na ekranie, przy czym z włączonym V-Sync zawiera również okres synchronizacji, czyli 16 ms na wyświetlaczu 60 Hz. (Moonlight: FAQ (wiki))
- Frames dropped by network connection to odsetek klatek, które nie dotarły do klienta; powinien utrzymywać się bardzo blisko zera, a wysokie wartości wskazują na niepewne łącze, na przykład WiFi 2,4 GHz albo transmisję po instalacji elektrycznej, lub na zbyt wysoki ustawiony bitrate. (Moonlight: FAQ (wiki))
- Frames dropped due to network jitter to odsetek klatek odrzuconych, bo przyszły za wcześnie lub za późno; zamiast równych odstępów 16 ms pojawia się sekwencja typu 20 ms, 12 ms, 18 ms, 14 ms, co zmusza Moonlight do pomijania klatek dla zachowania synchronizacji z ekranem. (Moonlight: FAQ (wiki))
Dokumentacja dodaje cztery ważne zastrzeżenia: nie wszystkie liczby są dostępne na każdym kliencie z powodu ograniczeń API dekodowania, wydajność klienta zależy od wybranych ustawień i sprzętu, wartości nie nadają się do porównań z klientami spoza Moonlight, bo mimo tych samych nazw mogą mierzyć co innego, a poza tym istnieje opóźnienie systemowe, którego aplikacje w ogóle nie są w stanie zmierzyć - opóźnienie kompozytora, wyświetlacza i urządzeń wejściowych - więc najdokładniejsze wyniki daje pomiar zewnętrznym sprzętem testowym. (Moonlight: FAQ (wiki))
Procedura samodzielnego pomiaru opóźnień
Sensowny pomiar wygląda tak i nie wymaga żadnego dodatkowego sprzętu poza tym, co już jest w domu:
- Włączyć nakładkę statystyk w ustawieniach Moonlight na Androidzie. (Moonlight: FAQ (wiki))
- Uruchomić pozycję „Desktop” i pozostawić statyczny obraz na kilkanaście sekund, a następnie odczytać wartości. Tu obowiązuje ostrzeżenie z dokumentacji: Sunshine, w odróżnieniu od GeForce Experience, koduje ze zmienną liczbą klatek dopasowaną do tempa zmian na hoście, więc przy statycznej treści liczba klatek spada, typowo do około 10 FPS, i rośnie dopiero, gdy obraz zaczyna się zmieniać, do maksimum ustawionego w Moonlight; na części urządzeń z Androidem powoduje to zawyżone raportowane opóźnienie dekodowania przy statycznym obrazie w porównaniu z realnym graniem. (Moonlight: FAQ (wiki)) Wniosek praktyczny: pomiar na nieruchomym pulpicie nie mówi nic o graniu.
- Uruchomić grę i odczytać wartości w ruchu, przez co najmniej kilka minut, obejmując sceny spokojne i dynamiczne.
- Zapisać pięć wartości: network latency, network latency variance, decode latency oraz oba odsetki utraconych klatek (utrata przez połączenie sieciowe i utrata przez jitter). Powtórzyć pomiar po każdej pojedynczej zmianie ustawień.
- Zmieniać po jednej rzeczy naraz - bitrate albo rozdzielczość, albo liczbę klatek - bo przy dwóch zmianach naraz nie da się przypisać skutku przyczynie.
Do oddzielenia problemów sieci od problemów kodowania służy niezależny test przepustowości. Dokumentacja Sunshine zaznacza, że dla strumieniowania gier w czasie rzeczywistym najważniejsza jest nie czysta przepustowość, lecz stabilność i przewidywalność ścieżki sieciowej, czyli niskie opóźnienie o małej zmienności i minimalna albo zerowa utrata pakietów. (Sunshine: Troubleshooting) Jako narzędzie wskazuje wieloplatformowy iPerf3: na hoście uruchamia się iperf3 -s, a na kliencie test UDP w kierunku odwrotnym, od serwera do klienta, poleceniem iperf3 -c {HostIpAddress} -t 60 -u -R -b 50M, obserwując na kliencie utratę pakietów i jitter; oba powinny być bardzo niskie, w ideale utrata poniżej 5 procent, a jitter poniżej 1 ms. (Sunshine: Troubleshooting) Dla klientów Android dokumentacja wskazuje aplikację PingMaster. (Sunshine: Troubleshooting)
Nie widać komputera w Moonlight
Kolejność działań według dokumentacji, przy założeniu pracy w jednej sieci:
- Ponownie uruchomić komputer i urządzenie klienckie. (Moonlight: Troubleshooting (wiki))
- Jeżeli komputer jest podłączony do sieci domowej kilkoma połączeniami jednocześnie, na przykład Ethernet i WiFi, rozłączyć wszystkie poza najszybszym, zwykle przewodowym. (Moonlight: Troubleshooting (wiki))
- Wyłączyć VPN używany na komputerze do dostępu do internetu, żeby sieć lokalna była osiągalna; może być też potrzebne wyłączenie ustawienia blokującego dostęp do sieci lokalnej. (Moonlight: Troubleshooting (wiki)) Dokumentacja wymienia NordVPN, TunnelBear i PIA jako przykłady oprogramowania, które potrafi uniemożliwić wykrycie hosta. (Moonlight: Troubleshooting (wiki))
- Sprawdzić reguły zapory - o tym niżej.
- Sprawdzić, czy nie jest uruchomione inne oprogramowanie strumieniujące. Dokumentacja wymienia Parsec, Rainway i Steam In-Home Streaming, przy których należy rozłączyć własny strumień, aby uniknąć konfliktu koderów. (Moonlight: Troubleshooting (wiki)) Jest to zmiana odwracalna i bezpieczna: wystarczy zakończyć sesję, nie trzeba niczego odinstalowywać.
- Sprawdzić, czy problemu nie powoduje zewnętrzna zapora lub antywirus albo oprogramowanie sprzętowe w rodzaju DisplayLink, Razer Synapse czy Lenovo Vantage - dokumentacja wymienia je jako znane źródła konfliktów. (Moonlight: Troubleshooting (wiki)) Właściwym krokiem jest dodanie w tym oprogramowaniu wyjątku dla Sunshine, a nie odinstalowanie programu ani wyłączenie ochrony. Dokumentacja podaje przy części pozycji radykalniejsze zalecenia, w tym pełne odinstalowanie oprogramowania ochronnego albo wyłączenie w menedżerze haseł mechanizmu zgłaszania okna jako treści chronionej; są to działania obniżające bezpieczeństwo systemu i nie należy ich wykonywać dla wygody strumieniowania. Jeżeli konkretny program okaże się faktycznie nie do pogodzenia z Sunshine, decyzja o jego usunięciu należy do świadomego wyboru, a nie do listy kroków diagnostycznych.
- Osobno traktować Pulpit zdalny Microsoftu: po użyciu RDP komputer jest technicznie zablokowany, co powoduje problemy ze strumieniowaniem nawet po rozłączeniu, a przy hoście z Sunshine rozwiązaniem jest zalogowanie się z powrotem przez aplikację „Desktop” w Moonlight i dopiero potem zakończenie i uruchomienie kolejnego strumienia z docelową aplikacją. (Moonlight: Troubleshooting (wiki))
Dokumentacja Moonlight wymienia w tym miejscu jeszcze kilka kroków o znacznie szerszym zasięgu, między innymi reset stosu sieciowego całego systemu oraz odinstalowywanie oprogramowania ochronnego. (Moonlight: Troubleshooting (wiki)) W tym poradniku świadomie ich nie ma: zmieniają konfigurację całego komputera, a nie samego strumienia, i potrafią zaburzyć działanie innych programów sieciowych. Jeżeli powyższe punkty nie pomogą, właściwym następnym krokiem jest sprawdzenie, czy strumień działa z innego urządzenia klienckiego i w innej sieci - to rozdziela problem hosta od problemu klienta bez ruszania ustawień systemu.
Reguły zapory
Sunshine powinien tworzyć reguły zapory Windows automatycznie; jeżeli powstały i działają, nie trzeba dodawać własnych. (Moonlight: Setup Guide (wiki)) Regułę własnoręcznie dodaje się wyłącznie wtedy, gdy reguły automatyczne nie powstały, a wszystkie wcześniejsze punkty diagnostyki zostały wyczerpane - nigdy „na wszelki wypadek”. W żadnym przypadku nie należy wyłączać zapory. Sama Microsoft odradza wyłączanie Zapory Windows, wskazując, że traci się przy tym inne korzyści, w tym możliwość używania reguł zabezpieczeń połączeń IPsec, ochronę sieci przed atakami wykorzystującymi rozpoznawanie sieci, Windows Service Hardening oraz filtry czasu rozruchu. (Microsoft Learn: Manage Windows Firewall With the Command Line)
Jeżeli reguła jest faktycznie potrzebna, powinna być zawężona na trzy sposoby naraz: do konkretnego programu, do profilu sieci prywatnej i do adresów z sieci lokalnej. Microsoft w zaleceniach dotyczących reguł zapory sam wskazuje, że dla aplikacji używanych wyłącznie w sieci domowej najlepiej ograniczyć adres zdalny do podsieci lokalnej („Local Subnet”) i włączać regułę tylko w profilu prywatnym. (Microsoft Learn: Windows Firewall Rules (zalecenia)) Dokumentacja Microsoftu pokazuje wprost taki wzorzec - regułę przychodzącą dla wskazanego pliku wykonywalnego, ograniczoną słowem kluczowym LocalSubnet zamiast konkretnego adresu IP, przy czym reguła powstaje na urządzeniu lokalnym i zaczyna obowiązywać natychmiast. (Microsoft Learn: Manage Windows Firewall With the Command Line) W wersji dla wiersza poleceń ten sam zapis to reguła z parametrami program=, remoteip=...,LocalSubnet oraz profile=private. (Microsoft Learn: Use netsh advfirewall firewall context)
Przed utworzeniem i sprawdzeniem reguły należy upewnić się, że komputer jest we własnej zaufanej sieci domowej i że aktywne połączenie ma w Windows profil prywatny. Nie należy zmieniać profilu sieci publicznej ani hotelowej na prywatny na potrzeby tego poradnika.
Droga bez wiersza poleceń, dla osoby, która woli klikać. Nazwy stron kreatora poniżej pochodzą z angielskiej dokumentacji Microsoftu opisującej konsolę zapory i kreator nowej reguły przychodzącej; w polskiej wersji przystawki etykiety są przetłumaczone i mogą się nieco różnić między wydaniami Windows. (Microsoft Learn: Configure Firewall Rules With Group Policy (konsola i kreator regul))
- Otworzyć konsolę „Windows Firewall with Advanced Security” (po polsku: Zapora Windows Defender z zabezpieczeniami zaawansowanymi), na przykład wpisując
wf.mscw menu Start i zatwierdzając Enterem. (Microsoft Learn: Configure Firewall Rules With Group Policy (konsola i kreator regul)) - W okienku nawigacji wybrać „Inbound Rules” (Reguły przychodzące), następnie „Action” i „New rule”. (Microsoft Learn: Configure Firewall Rules With Group Policy (konsola i kreator regul))
- Na stronie „Rule Type” kreatora wybrać „Custom”; dokumentacja zaznacza, że typ „Program” pokazuje mniej stron kreatora, a „Custom” daje dostęp do wszystkich, w tym do strony zakresu. (Microsoft Learn: Configure Firewall Rules With Group Policy (konsola i kreator regul)) Na stronie „Program” zaznaczyć „This program path” i wskazać plik wykonywalny Sunshine w katalogu instalacji. (Microsoft Learn: Configure Firewall Rules With Group Policy (konsola i kreator regul))
- Stronę „Protocol and Ports” można zostawić bez zmian albo ograniczyć do portów wymienionych niżej; ograniczenie do potrzebnych portów jest według dokumentacji dobrą praktyką. (Microsoft Learn: Configure Firewall Rules With Group Policy (konsola i kreator regul))
- Na stronie „Scope”, w części adresów zdalnych, wybrać ograniczenie do wskazanych adresów, dodać wpis i wybrać predefiniowany zbiór „Local subnet” (podsieć lokalna). Nie wpisywać zamiast niego adresu telefonu ani nie pozostawiać dowolnych adresów zdalnych. Nazwy pól i przycisków mogą różnić się zależnie od wersji i języka Windows - szukany jest zbiór „Local subnet”. (Microsoft Learn: Configure Firewall Rules With Group Policy (konsola i kreator regul)) (Microsoft Learn: Windows Firewall Rules (zalecenia))
- Na stronie „Action” wybrać „Allow the connection” (Zezwalaj na połączenie). (Microsoft Learn: Configure Firewall Rules With Group Policy (konsola i kreator regul))
- Na stronie „Profile” zaznaczyć wyłącznie Private (prywatny) i odznaczyć Public oraz Domain, po czym nadać regule nazwę i zakończyć kreator. (Microsoft Learn: Configure Firewall Rules With Group Policy (konsola i kreator regul))
Punkty 5 i 7 są tu najważniejsze i nie należy ich pomijać: bez nich reguła obejmowałaby również sieci publiczne i dowolne adresy zdalne, czyli otwierałaby komputer znacznie szerzej, niż wymaga strumieniowanie w domu. Porty używane przez strumień to TCP 47984, 47989 i 48010 oraz UDP 5353, 47998, 47999, 48000, 48002 i 48010, co przydaje się przy weryfikacji, czy istniejąca reguła w ogóle dotyczy właściwego ruchu. (Moonlight: Setup Guide (wiki)) Sunshine ma też opcję port o wartości domyślnej 47989, przy czym zmiana tej wartości przesuwa pozostałe porty, co widać w panelu konfiguracyjnym. (Sunshine: Configuration)
Wiki Moonlight podaje w tym miejscu gotowe polecenia netsh otwierające same porty, ale w domyślnej postaci nie ograniczają one ani profilu sieci, ani adresu zdalnego, więc obowiązywałyby także w sieci publicznej i dla dowolnego nadawcy. (Moonlight: Setup Guide (wiki)) Dla domowego strumieniowania jest to zakres nieproporcjonalnie szeroki i nie należy z nich korzystać - reguła programowa opisana wyżej daje ten sam efekt przy znacznie mniejszym otwarciu systemu.
Obraz się rwie lub przycina
Dokumentacja Moonlight podaje listę działań w kolejności: (Moonlight: Troubleshooting (wiki))
- Wyłączyć na hoście sprzętowo przyspieszane szeregowanie GPU, jeżeli obraz potrafi się zaciąć w trakcie strumieniowania.
- Sprawdzić, czy problemem nie jest Bluetooth na urządzeniu klienckim, przez próbę z wyłączonym Bluetooth.
- Upewnić się, że klient jest w paśmie 5 GHz albo na kablu, a komputer podłączony do routera przewodowo.
- Upewnić się, że karta NVIDIA nie ma obniżonych zegarów, co obniża wydajność NVENC.
- Obniżyć bitrate, żeby sprawdzić, czy chodzi o przepustowość, i spróbować 720p30.
Po stronie Sunshine warto znać jeszcze dwie przyczyny. Pierwsza to przepełnienie buforów: jeżeli host ma znacznie szybsze połączenie z siecią niż najwolniejszy odcinek ścieżki do klienta, może dojść do masowej utraty pakietów, bo Sunshine wysyła strumień seriami co 16 ms przy 60 fps, a urządzenia pośrednie muszą je buforować i przy dostatecznie wysokim bitrate bufory się przepełniają; dokumentacja podaje jako przykłady host 2,5 Gb/s przy kliencie 1 Gb/s lub WiFi oraz host 1 Gb/s przy kliencie ze 100 Mb/s, a jako obejście - obniżenie prędkości karty sieciowej hosta. (Sunshine: Troubleshooting) Dokumentacja dodaje, że wersje Sunshine nowsze niż 0.23.1 zawierają ulepszony kod sieciowy, który powinien złagodzić lub rozwiązać ten problem bez zmiany prędkości karty. (Sunshine: Troubleshooting) Druga przyczyna dotyczy kart NVIDIA: przy zacinaniu dokumentacja Sunshine sugeruje wyłączenie vsync:fast w panelu sterowania NVIDIA. (Sunshine: Troubleshooting)
Na Androidzie na płynność wpływa też sposób podawania klatek. Moonlight oferuje kilka trybów frame pacing, z których jako zalecany opisany jest „Balanced”: używa wywołania zwrotnego Choreographer i buforuje do jednej klatki, żeby wygładzić jitter sieci i dryf synchronizacji między hostem a klientem. (Moonlight: FAQ (wiki)) Przy tym ustawieniu warto zostać, dopóki nie ma konkretnego problemu. Skrajne warianty mają wyraźne koszty: „Prefer lowest latency” renderuje klatkę natychmiast po zdekodowaniu i porzuca poprzednią, jeżeli nie zdążyła się wyświetlić, a „Prefer smoothest video” nie porzuca klatek w ogóle, przez co gromadzą się one do systemowego limitu i opóźnienie może wzrosnąć bardzo mocno. (Moonlight: FAQ (wiki))
Czarny ekran
Dokumentacja radzi upewnić się, że monitor jest włączony i podłączony do karty graficznej, spróbować innej gry lub uruchomienia Steama, żeby ustalić, czy problem jest specyficzny dla jednej gry, a jako obejście problemów konkretnej gry - strumieniować cały pulpit i uruchomić grę z jego poziomu. (Moonlight: Troubleshooting (wiki))
Brak kursora myszy
Należy upewnić się, że do komputera hosta podłączona jest mysz; gdy fizyczne podłączenie nie jest możliwe, dokumentacja sugeruje włączenie funkcji Klawisze myszy na hoście, aby wymusić na Windows wyświetlanie kursora, i wskazuje, że wystarczy wpisać „Klawisze myszy” w wyszukiwarce menu Start, żeby trafić na właściwą stronę ustawień. (Moonlight: Troubleshooting (wiki)) Osobna wskazówka z dokumentacji Sunshine: przy nietypowym zachowaniu myszy warto podłączyć do hosta fizyczną mysz. (Sunshine: Troubleshooting)
Nie da się uruchomić gry z innego dysku
Ponieważ na Windows Sunshine działa jako usługa, może nie mieć takiego samego poziomu dostępu jak zwykłe konto użytkownika, przez co przy próbie uruchomienia gry lub aplikacji z dysku innego niż systemowy pojawiają się błędy odmowy dostępu. (Sunshine: Troubleshooting) Dokumentacja proponuje w tej sytuacji zmianę uprawnień na poziomie całego dysku; w domowej instalacji nie jest to potrzebne i nie jest tu zalecane, ponieważ obejmuje wszystkie dane zapisane na tym wolumenie, także te niezwiązane z graniem. (Sunshine: Troubleshooting)
Bezpieczniejsze rozwiązania w kolejności od najprostszego: uruchomić grę przez pozycję „Desktop” i strumieniowany pulpit zamiast osobnej pozycji aplikacji, przenieść lub zainstalować tę jedną grę na dysku systemowym, albo - jeżeli konieczna jest zmiana uprawnień - ograniczyć ją do jednego katalogu z grami, nie do całego dysku.
Zapomniane hasło do panelu
Dane logowania do panelu można zresetować poleceniem sunshine --creds {new-username} {new-password}, wstawiając własne wartości bez nawiasów klamrowych. (Sunshine: Troubleshooting) Jeżeli panel nie otwiera się w ogóle, dokumentacja kieruje w pierwszej kolejności do sprawdzenia reguł zapory. (Sunshine: Troubleshooting)
Logi
Przy problemach dokumentacja Sunshine wskazuje zakładkę Troubleshooting, w której dostępne są logi i przez którą można przechodzić kolejne ostrzeżenia i błędy w poszukiwaniu przyczyny. (Sunshine: Getting Started (LizardByte docs)) Ścieżkę pliku logu określa opcja log_path, domyślnie sunshine.log, a poziom szczegółowości min_log_level, domyślnie info; dokumentacja ostrzega, że poziomy verbose i debug mogą negatywnie wpłynąć na wydajność strumieniowania, więc po diagnostyce warto wrócić do wartości domyślnej. (Sunshine: Configuration) Domyślny katalog konfiguracji na Windows to %ProgramFiles%\Sunshine\config. (Sunshine: Configuration)
Logi z instalacji zapisywane są w %TEMP%/Sunshine/logs/install/. (Sunshine: Getting Started (LizardByte docs))
Sprzątanie i cofnięcie zmian
Odinstalowanie Sunshine na Windows polega na odnalezieniu programu na liście zainstalowanych aplikacji w ustawieniach systemu i wybraniu opcji odinstalowania z menu; dokumentacja zaznacza, że różne wersje Windows mogą podawać nieco inne kroki. (Sunshine: Getting Started (LizardByte docs))
Warto przy tym pamiętać o kilku rzeczach, które zostają po instalacji i nie znikają razem z nią automatycznie:
- Sterowniki wejścia, czyli Virtual HID Driver albo ViGEmBus, są osobnymi programami instalowanymi ręcznie i usuwa się je osobno, tak jak każdy inny program z listy zainstalowanych aplikacji. (Sunshine: Getting Started (LizardByte docs)) (Sunshine: Troubleshooting) Przy Virtual HID Driver warto przed usunięciem zajrzeć do sekcji licencji na stronie Troubleshooting panelu, gdzie Sunshine pokazuje jej stan i dostępne czynności, bo jedna licencja obejmuje do pięciu maszyn. (Sunshine: Getting Started (LizardByte docs)) (LizardByte: Introducing libvirtualhid and Virtual HID Driver (blog))
- Reguły zapory dodane ręcznie, jeżeli okazały się potrzebne, pozostają w systemie i trzeba je usunąć osobno w Zaporze Windows Defender z zabezpieczeniami zaawansowanymi, odnajdując je po nadanej nazwie. Dokumentacja Sunshine nie opisuje, co dzieje się z regułami utworzonymi automatycznie przez instalator, więc po odinstalowaniu warto w tej samej przystawce sprawdzić, czy nie zostały reguły z „Sunshine” w nazwie, i usunąć je ręcznie.
- Sparowane urządzenia przestają mieć znaczenie po usunięciu hosta, ale dopóki Sunshine działa, warto usuwać z panelu klientów, które nie są już używane, bo parowanie upoważnia klienta do uruchamiania gier i przeglądania listy aplikacji. (Moonlight: FAQ (wiki))
- Zmienione ustawienia Steama dotyczące obsługi kontrolerów, jeżeli były modyfikowane zgodnie z częścią o padzie, trzeba przywrócić ręcznie. (Sunshine: Troubleshooting) (Moonlight: Troubleshooting (wiki))
Gdy celem nie jest usunięcie, lecz tylko czasowe wyłączenie, można zatrzymać usługę Sunshine w przystawce Usługi systemu Windows (services.msc); Sunshine z instalatora Windows działa domyślnie właśnie jako usługa. (Sunshine: Getting Started (LizardByte docs)) Ikona w zasobniku systemowym pojawia się dzięki domyślnie włączonej opcji system_tray, która odpowiada również za powiadomienia na pulpicie. (Sunshine: Configuration)
Żaden z opisanych tu kroków cofających nie usuwa gier, zapisów stanu gry ani plików na dyskach. Sunshine przechwytuje obraz i przekazuje sterowanie; nie przenosi gier do własnego katalogu i nie modyfikuje ich danych. Odinstalowanie hosta oznacza tyle, że gra przestaje być dostępna zdalnie, a nie że przestaje być zainstalowana.
Pytania, które pojawiają się po pierwszym uruchomieniu
Dlaczego liczba klatek spada, gdy nic się nie dzieje na ekranie?
Jest to zamierzone. Sunshine koduje ze zmienną liczbą klatek dopasowaną do tempa zmian treści na hoście, więc przy statycznym obrazie liczba klatek spada, typowo do około 10 FPS, i rośnie do maksimum ustawionego w Moonlight dopiero wraz ze zmianami na ekranie. (Moonlight: FAQ (wiki)) Ustawienie minimum_fps_target pozwala określić najniższą efektywną liczbę klatek strumienia; wartość domyślna 0 oznacza przyjęcie połowy liczby klatek strumienia jako minimum, a przy wartościach z zakresu 1-1000 rzeczywiste minimum może różnić się od podanego. (Sunshine: Configuration)
Czy da się grać przez internet? Tak, ale wykracza to poza zakres tego poradnika. Dokumentacja Moonlight opisuje kilka dróg, w tym wbudowaną w Sunshine opcję UPnP w sekcji sieciowej panelu, która automatycznie przekierowuje potrzebne porty, oraz nakładki sieciowe typu ZeroTier, Tailscale i NordVPN Meshnet. (Moonlight: Setup Guide (wiki)) Niezależnie od wybranej drogi dokumentacja zdecydowanie zaleca najpierw sparowanie Moonlight z komputerem w sieci domowej, a dopiero potem próby przez internet; dla użytkowników iOS i tvOS parowanie w tej samej sieci jest wręcz wymagane, żeby spełnić wytyczne Apple. (Moonlight: Setup Guide (wiki))
Czy można obudzić komputer do strumieniowania? W tej samej sieci co host jest to zwykle możliwe; jeżeli nie działa, dokumentacja radzi sprawdzić w sterowniku karty sieciowej i w BIOS-ie, czy włączona jest funkcja Wake-on-LAN. (Moonlight: FAQ (wiki))
Czy dołączą kierownica, drążek lotniczy albo żyroskop podłączone do telefonu? Nie w sposób bezpośredni. Protokół przekazuje do hosta sygnały pada, a nie dowolne urządzenia wejściowe, więc kierownica, drążek czy pedały podłączone do telefonu nie trafią do komputera jako te urządzenia; jako obejście dokumentacja wskazuje VirtualHere, które przepuszcza jedno urządzenie USB w wersji darmowej. (Moonlight: FAQ (wiki))
Sam typ pada odtwarzanego po stronie hosta zależy od sterownika. Tabela zgodności wymienia siedem typów dla Windows łącznie (Sunshine: przeglad i wymagania systemowe). Według opisu Virtual HID Driver obsługiwane profile to Generic, DualShock 4, DualSense, Switch Pro, Xbox One i Xbox Series (LizardByte: Introducing libvirtualhid and Virtual HID Driver (blog)) (LizardByte: Virtual HID Driver - strona licencji). Z darmowym ViGEmBus jako wariantem zapasowym dostępne są tylko Xbox 360 i DualShock 4 (Sunshine: Getting Started (LizardByte docs)) (LizardByte: Introducing libvirtualhid and Virtual HID Driver (blog)). W dokumentacji Moonlight pojawia się starsze sformułowanie mówiące wyłącznie o wirtualnych kontrolerach Xbox 360, opisujące zachowanie po stronie GeForce Experience (Moonlight: FAQ (wiki)).
Dlaczego mysz porusza się zbyt szybko na Androidzie? Androidowe API przechwytywania myszy nie pozwala aplikacjom zrezygnować z przyspieszenia kursora, przez to mysz bywa przyspieszana dwukrotnie - raz przez Androida, raz przez Windows; obejściem jest wyłączenie przyspieszenia myszy w samej grze, a natywnie problem rozwiązany jest tylko na urządzeniach NVIDIA SHIELD, gdzie NVIDIA udostępniła własną metodę. (Moonlight: FAQ (wiki)) Warto też wiedzieć, że przechwytywanie kursora myszy wbudowane jest w Androida od wersji 8.0 (Oreo) i Moonlight z niego korzysta bez uprawnień roota, podczas gdy na starszych wydaniach i urządzeniach spoza rodziny SHIELD prawidłowe przechwytywanie myszy wymagało wersji dla urządzeń z rootem. (Moonlight: Setup Guide (wiki))
Źródła
- Sunshine: Getting Started (LizardByte docs)
- Sunshine: przeglad i wymagania systemowe
- Sunshine: Configuration
- Sunshine: Troubleshooting
- Sunshine: App Examples
- Moonlight: Setup Guide (wiki)
- Moonlight: Troubleshooting (wiki)
- Moonlight: FAQ (wiki)
- Moonlight Game Streaming - strona projektu
- moonlight-android - repozytorium klienta Android
- Moonlight Game Streaming w Google Play
- Microsoft Learn: Manage Windows Firewall With the Command Line
- Microsoft Learn: Use netsh advfirewall firewall context
- Pomoc Google TV: laczenie urzadzen Bluetooth
- Pomoc Android: parowanie urzadzen Bluetooth
- Sunshine: notatki wydania v2026.906.222525 (GitHub)
- LizardByte: Introducing libvirtualhid and Virtual HID Driver (blog)
- LizardByte: Virtual HID Driver - strona licencji
- libvirtualhid: wydania (instalator sterownika Windows)
- ViGEmBus: repozytorium projektu (status)
- Nefarius: End of Life Statement (ViGEm)
- Microsoft Learn: Configure Firewall Rules With Group Policy (konsola i kreator regul)
- Microsoft Learn: Windows Firewall Rules (zalecenia)
- ViGEmBus: ostatnie wydanie (GitHub)