1 điểm bởi GN⁺ 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Moonshine là host Linux hỗ trợ chơi từ xa bằng cách truyền hình ảnh game PC tới client Moonlight và gửi lại đầu vào bàn phím, chuột và tay cầm về máy chủ
  • Mỗi luồng dùng một Wayland compositor riêng để tách biệt với desktop, nên vẫn có thể tiếp tục dùng PC host trong khi đang stream và cũng có thể chạy trên server không có màn hình
  • Hỗ trợ mã hóa H.264·H.265·AV1 bằng GPU, HDR 10-bit, đầu vào gồm motion·touchpad·haptic, cùng âm thanh Opus độ trễ thấp 5.1·7.1 kênh
  • Yêu cầu Linux và systemd, GPU NVIDIA RTX·AMD RDNA2+·Intel Arc có thể mã hóa video Vulkan, cùng Moonlight v6.0.0 trở lên
  • Lưu lượng giao thức GameStream không được mã hóa hoàn toàn ở tầng ứng dụng, vì vậy không nên phơi trực tiếp cổng ra Internet; truy cập từ bên ngoài cần VPN như Tailscale·WireGuard·ZeroTier

Truyền phát game tách biệt

  • Mỗi ứng dụng chạy trong phiên streaming riêng, tách khỏi desktop của host
    • Vẫn có thể dùng PC host cho việc khác trong khi đang stream
    • Chạy trên server headless mà không cần phiên desktop đang hoạt động, màn hình hay HDMI dummy plug
  • Xử lý H.264·H.265·AV1 bằng mã hóa video Vulkan của GPU
  • Cung cấp streaming HDR 10-bit thật trên các game được hỗ trợ
  • Hỗ trợ chuột, bàn phím, gamepad, đồng thời xử lý cả đầu vào motion·touchpad·haptic của gamepad
  • Âm thanh dùng mã hóa Opus độ trễ thấp và hỗ trợ stereo cùng surround 5.1·7.1

Yêu cầu chạy

  • Hiện tại chỉ dành cho Linux, đã được thử nghiệm trên Arch Linux và có ghi nhận chạy được trên các bản phân phối Linux khác
  • Cần systemd để chạy và quản lý tiến trình ứng dụng
  • Cần GPU NVIDIA RTX, AMD RDNA2 trở lên hoặc Intel Arc hỗ trợ mã hóa video Vulkan
  • Client phải là Moonlight v6.0.0 trở lên; không đảm bảo tương thích với phiên bản cũ hơn hoặc các bản port không chính thức

Cài đặt và chạy

  • Trên Arch Linux có thể cài qua AUR bằng yay -S moonshine
  • Để chạy ứng dụng ngay cả khi người dùng đã đăng xuất, dùng sudo loginctl enable-linger $USER
    • Có thể bỏ qua bước này nếu người dùng luôn đăng nhập khi stream
  • Dùng sudo systemctl enable --now moonshine@$USER để khởi động dịch vụ khi boot và chạy ngay lập tức
  • Build từ mã nguồn cần clang, CMake, Rust, Wayland, header Vulkan, shaderc, Mesa, Opus, các thư viện liên quan đến PulseAudio, v.v.
  • Sau khi build, chạy bằng cargo run --release -- /path/to/config.toml

Cấu hình và kết nối client

  • Nếu không có tệp ở đường dẫn chỉ định, tệp cấu hình sẽ được tạo tự động
    • Đường dẫn mặc định của gói AUR là $XDG_CONFIG_HOME/moonshine/config.toml
  • Moonlight sẽ hiển thị PIN khi kết nối lần đầu, và có thể ghép cặp qua thông báo của host hoặc tại http://localhost:47989/pin
  • Cũng có thể ghép cặp từ dòng lệnh bằng cách POST uniqueidpin tới endpoint /submit-pin

Cấu hình ứng dụng

  • Mỗi [[application]] trong config.toml định nghĩa một chương trình sẽ chạy trong phiên tách biệt
    • title: tên hiển thị trong Moonlight
    • boxart: đường dẫn ảnh bìa tùy chọn
    • command: tệp thực thi và danh sách đối số
  • pre_command chạy đồng bộ các lệnh theo thứ tự trước khi ứng dụng khởi động, và phiên sẽ chờ cho đến khi tất cả hoàn tất
  • post_command chạy đồng bộ các lệnh theo thứ tự sau khi streaming kết thúc, và server sẽ chờ cho đến khi tất cả hoàn tất
  • Có thể dùng việc này để dừng các dịch vụ xung đột hoặc thay đổi trạng thái GPU trước và sau khi stream

Tự động dò ứng dụng

  • Steam scanner tìm game đã cài trong thư viện Steam được chỉ định và tạo lệnh chạy có chứa ID game
  • Desktop scanner tìm ứng dụng từ các tệp .desktop trong thư mục được chỉ định
    • Có thể cấu hình việc có bao gồm ứng dụng terminal hay không và có phân giải đường dẫn icon hay không

Khác biệt với Sunshine và các hạn chế

  • Sunshine hỗ trợ nhiều nền tảng hơn và nhìn chung có nhiều tính năng hơn, còn Moonshine chỉ dành cho Linux
  • Điểm khác biệt của Moonshine là tách phiên streaming khỏi desktop để có thể tiếp tục dùng host và hoạt động cả khi không có desktop đang mở
  • Hiện chưa hỗ trợ stream đồng thời tới hai client và đây cũng không phải trọng tâm của dự án

Bảo mật mạng

  • Moonshine không được thiết kế cho mạng công cộng
  • Do giới hạn của giao thức GameStream nền tảng, lưu lượng không được mã hóa hoàn toàn ở tầng ứng dụng
  • Khi stream qua Internet, phải dùng VPN như Tailscale, WireGuard, ZeroTier, và không được công khai trực tiếp các cổng của Moonshine

Các dự án nền tảng

  • Moonlight: cung cấp client cho Moonshine
  • Sunshine: cung cấp nền tảng cho host API
  • Inputtino: cung cấp nền tảng triển khai thiết bị đầu vào
  • magic-mirror: mang lại cảm hứng cho streaming headless dùng Vulkan và Wayland compositor

1 bình luận

 
Các ý kiến trên Hacker News
  • Tóm lại, Nvidia GameStream từng là công nghệ độc quyền rồi bị Nvidia khai tử; sau đó Sunshine và Moonlight xuất hiện như bộ server·client mã nguồn mở hỗ trợ streaming độ trễ thấp trên mọi nền tảng.
    Game on Whales bổ sung streaming đa người dùng và màn hình ảo, gần giống một Stadia/GeForce Now tự host, không ảnh hưởng đến phiên đăng nhập hiện có, chạy Steam·Firefox, v.v. trong các container được chọn lọc.
    Sau đó Apollo và Artemis giúp streaming màn hình ảo trở nên đơn giản hơn, nhưng màn hình ảo của Apollo thực tế gần như chỉ dành cho Windows, còn Moonshine triển khai điều đó trên server Linux.
    Vibepollo, một nhánh tách từ Apollo, là bản cải tiến gần như hoàn toàn được tạo bằng vibe coding nên cá nhân tôi không định dùng; không biết trong phả hệ này còn thiếu cái gì không.

    • Steam Link cũng bị bỏ sót. Việc bán phần cứng đã kết thúc, nhưng phần mềm vẫn tiếp tục tồn tại qua ứng dụng Android, v.v.
      Khác với Google, Steam đã có cả nền tảng khách hàng sẵn có, nên nếu ngay ngày mai họ công bố một dịch vụ kiểu Stadia cho phép chạy các game đã sở hữu trên mọi phần cứng thì tôi cũng không thấy ngạc nhiên.
    • Việc nhiều host ảo hóa cùng chia sẻ GPU tiêu dùng thực tế vẫn gần như bất khả thi, nên mức độ hữu dụng còn bị giới hạn. Cấu hình lý tưởng là nối các thin client vào một server mạnh để chơi những game như COD đời cũ.
    • Tôi thắc mắc Moonshine có hoạt động trên Linux giống Sunshine headless hay không.
      Với Sunshine, khi streaming thì game cũng hiển thị trên màn hình host; tôi muốn xác nhận liệu Moonshine có nghĩa là có thể chạy mà không cần màn hình vật lý, hoặc chạy nhiều game cùng lúc hay không.
    • Tôi đặt tham số kernel để Fedora trong Proxmox tạo một màn hình giả mô phỏng thông số màn hình thật khi boot.
      Sunshine nhận nó như một màn hình thật, nên chỉ cần để lại nguồn và cáp LAN; server game Linux vẫn chạy tốt mà không cần HDMI dummy plug hay driver màn hình ảo.
    • Sunshine và Moonlight dường như lại đang được phát triển tích cực, thậm chí có bản phát hành gần đây hơn Apollo và Artemis.
      Tôi thắc mắc trên Windows, liệu người khác có thể dùng server trong lúc đang chơi game từ xa không. Hầu hết các giải pháp màn hình ảo tôi tìm thấy đều tắt màn hình server.
  • Tôi là nhà phát triển Moonshine. Điểm cốt lõi là nó giống Sunshine, nhưng khác ở chỗ không phụ thuộc vào môi trường desktop hiện có mà tạo compositor riêng.
    Nó chạy headless mà không cần môi trường desktop, tạo được độ phân giải·tần số quét tùy ý mà không cần dummy plug, và dùng được HDR ngay cả khi màn hình không hỗ trợ. Cũng có thể vừa dùng desktop hiện có vừa streaming game cùng lúc.
    Về mặt kỹ thuật, tôi cố ý chọn phạm vi hẹp: một Vulkan encoder, một Linux, không GUI, không hỗ trợ client Moonlight cũ, để giữ codebase nhẹ. Đổi lại, cần GPU·driver tương đối mới và client Moonlight mới.
    Đây là dự án sở thích tôi làm từ năm 2022; ban đầu nó kém Sunshine nên trong README tôi còn khuyên không nên dùng, nhưng sau khi có các tính năng khác biệt thì tôi đã gỡ câu đó.
    Với người dùng mới, tôi vẫn khuyên nên ưu tiên Sunshine vì tài liệu phong phú và khả năng chạy tốt cao hơn; còn nếu thích vọc cái mới thì Moonshine cũng ổn.

    • Chỉ cần gói Claude hoặc Codex 20 USD/tháng cũng đã hạ thấp đáng kể rào cản để thử Linux. Trước đây có những việc khiến ta kẹt hàng giờ hoặc hàng ngày, giờ có thể giải quyết trong lúc uống một tách cà phê, nên khi thử trên máy Bazzite, những chỗ hơi thô có lẽ cũng không còn cản trở như trước.
    • Có vẻ bạn giới thiệu khiêm tốn quá. Khác biệt là Sunshine trên Linux không dùng được độ phân giải tùy ý, và điều đó rất lớn.
    • Sau khi bực mình với nhiều vấn đề Linux của Sunshine, tối qua tôi phát hiện Moonshine và đến giờ rất hài lòng.
    • Tôi dùng thử khoảng 10 phút và thấy ấn tượng. VS Code thì không chạy được, nhưng vì có chế độ remote nên không quá quan trọng; sau này tôi sẽ thử lại với ứng dụng khác.
      Với cấu trúc compositor riêng, có vẻ khó chạy cả một môi trường desktop hoàn chỉnh, nhưng Linux rất cần một cách chạy ứng dụng từ xa ổn định, dù chỉ từng app một. Server tích hợp của KDE và GNOME nhìn chung đều có vấn đề và còn yêu cầu màn hình phải bật.
  • Với Sunshine và Moonlight, tôi đã có thể stream game PS2 SSX Tricky được giả lập và upscale trên desktop sang một set-top box Android hơn 7 năm tuổi một cách rất mượt.
    Tuy nhiên game vẫn hiển thị nguyên trên màn hình desktop nên không thể dùng host khi người khác đang chơi; có vẻ Moonshine giải quyết được điều này. Nó giống như mảnh ghép hoàn thiện cho một combo vốn đã tuyệt vời.

    • Tôi nhớ dòng SSX. Thật tiếc là EA Big đóng cửa và không công ty nào khác tiếp quản; trong số đó tôi thích Tricky nhất.
  • Tôi đang dùng Moonlight và Apollo theo cách kết nối DualSense với MacBook, mở Moonlight để vào toàn màn hình desktop chơi game, rồi chạy các game AAA trên Steam.
    Trên Wi-Fi 7 hầu như không cảm nhận được độ trễ, và chiếc Minisforum nối với TV lớn cũng có thể truy cập bằng một tổ hợp nút khác của DualSense. Apollo lưu cấu hình nên việc chuyển giữa hai thiết bị gần như không gặp vấn đề.

    • Cũng đáng thử trên điện thoại Android. Chơi Diablo 2 Remastered trên giường với màn OLED 6,7 inch 2340×1080, 120Hz HDR gắn controller còn thỏa mãn hơn cả Steam Deck.
      Điện thoại chỉ phát video nên không nóng và pin cũng lâu.
    • Tôi cũng thắc mắc liệu có cần tắt AWDL để tránh các đợt tăng vọt độ trễ khi streaming hay không.
    • Ngoài hỗ trợ game ngoài Steam, tôi cũng tò mò liệu nó hoạt động tốt hơn Steam Link không.
  • Tôi thắc mắc Moonshine tạo thứ gì đó như desktop ảo cho từng phiên, hay chỉ là một màn hình riêng, hay là một instance compositor hoàn toàn độc lập.

    • Theo mô tả tính năng, mỗi stream chạy trong compositor riêng hoàn toàn tách khỏi môi trường desktop. Ý tưởng về một server game có thể host nhiều instance rất hấp dẫn.
  • Dùng cách này để giả lập game Switch trên PC rồi stream sang Wii U và 3DS đời cũ

    • Cũng dùng trên các thiết bị cầm tay hiện đại chạy Android như Ayn Odin·Thor
    • Vài năm trước tôi từng tạo một công cụ bằng Rust để hỗ trợ chơi mạng nhiều người cho mọi trình giả lập, và bất ngờ là việc triển khai khá dễ
  • Đang dùng khá hài lòng bộ đôi Moonlight và Sunshine trên máy chủ GPU RTX 4000 Pro
    Chỉ tiếc là thiếu tự động điều chỉnh độ phân giải theo client được kết nối, nhưng đã giải quyết bằng cách viết script với Home Assistant Windows client

  • Tôi đã làm theo hướng dẫn để thiết lập stream Sunshine và Moonlight từ laptop sang điện thoại, nhưng không đạt được kết quả dùng được
    Cuối cùng tôi bỏ cuộc vì đã tiêu hết một tuần thời gian rảnh ít ỏi dành cho game để chỉnh codec, độ trễ, thiết lập Wi-Fi và đủ loại ứng dụng; giờ đã khoảng 3 năm trôi qua nên không biết đã cải thiện chưa

    • Thỉnh thoảng cũng có phiên hoạt động hoàn hảo nên tôi biết về mặt kỹ thuật là khả thi, nhưng khoảng 90% thời gian thì gặp lỗi kỳ lạ, vấn đề cấu hình, hoặc cập nhật làm vỡ tương thích. Có người dùng tốt, nhưng có vẻ vẫn cần rất nhiều việc để mài giũa các vấn đề
    • Khoảng một tuần trước, nhờ LLM hỗ trợ, tôi đã thiết lập trong 30 phút với host Windows và client Ubuntu, rồi xử lý cả vấn đề kết nối mạng ngoài trong khoảng 15 phút
      Rốt cuộc game tôi định chơi chỉ hỗ trợ nhiều người cục bộ, và trái với đánh giá tương thích hạn chế trên ProtonDB, nó chạy trực tiếp trên laptop nên không cần stream, nhưng bản thân việc thiết lập thì khá dễ. Tôi cũng dùng Tailscale
    • PC host nên nối LAN có dây, còn client nên dùng tối thiểu Wi-Fi 6 ở mức 1080p 60fps trở lên. Một số router bị mất gói nghiêm trọng, nên tốt hơn là dùng thiết bị ổn hoặc tự cấu hình trực tiếp
    • Tôi đang dùng Sunshine và Moonlight giữa desktop và PS Vita; điểm mấu chốt là ít nhất phải nối host bằng dây và giảm độ trễ tới router Wi-Fi
      Ngay cả trong môi trường lý tưởng, kết nối không dây vẫn có nhiều gói cần truyền lại hơn hẳn, nên tốt nhất chỉ dùng Wi-Fi ở phía client
  • Tôi đang dùng Sunshine và Moonlight để truy cập từ xa vào VM dùng phát triển ROS 2 có GPU passthrough
    Tôi chọn VM vì cần Ubuntu cũ, và cần kết nối trực tiếp GPU do mô phỏng Gazebo. Với RDP, desktop rất chậm và gần như không phản hồi, nhưng bộ đôi này khiến nó đủ dùng

  • Tự stream game PC giờ khó thiết lập hơn nhiều so với thời chỉ cần bật tính năng của Nvidia
    Lần thử gần nhất tôi không tìm ra cách làm cho nó hoạt động nên đã bỏ cuộc; bất chấp các ưu điểm khác, có vẻ các lập trình viên mã nguồn mở vẫn chưa chăm chút đúng mức cho tính dễ dùng

    • Hiện nay môi trường đã tốt hơn nhiều so với thời tính năng độc quyền của Nvidia, nên đáng thử lại. Cách đơn giản nhất là Remote Play tích hợp trong Steam và ứng dụng chính thức; Sunshine và Moonlight cho kết quả tốt hơn, cấu hình chi tiết hơn và hỗ trợ ứng dụng ngoài Steam
      Bạn cũng có thể nhờ hướng dẫn YouTube hoặc AI; thực tế tôi từng cùng AI tìm ra nguyên nhân là tường lửa của bản phân phối Linux đang chặn các cổng stream
      Ban đầu nên bắt đầu trong mạng cục bộ, rồi hãy thiết lập stream qua Internet sau; nhưng nếu có VPN tại nhà như WireGuard hoặc Tailscale thì có thể không khó. Host tốt nhất là dùng dây, còn Wi-Fi phía client nếu hỗ trợ 6GHz thì nhìn chung ổn
      Không tiện lợi như phép màu kiểu PS Remote Play, nhưng tôi khuyên nên thử lại
    • 5 năm trước tôi đã bỏ hẳn game streaming vì các vấn đề tương tự, nhưng một tháng trước để chơi Oxygen Not Included trên sofa bằng chiếc laptop Linux cũ, tôi đã thiết lập Sunshine và Moonlight trong 5 phút và nó hoạt động hoàn hảo ngay lập tức
      Trái với khuyến nghị, host cũng dùng Wi-Fi nhưng vẫn chạy tốt; đó là một trong những khoảnh khắc kỳ diệu nhất tôi từng có với công nghệ trong vài năm gần đây. Tuy nhiên tôi chỉ dùng stream qua Wi-Fi cục bộ