1 ポイント 投稿者 GN⁺ 3 시간 전 | 1件のコメント | WhatsAppで共有
  • Moonshineは、PCゲームの映像をMoonlightクライアントへ送信し、キーボード・マウス・コントローラー入力をホストへ返送してリモートプレイを実現するLinuxホスト
  • ストリームごとに独立したWaylandコンポジタを使用してデスクトップと分離し、ストリーミング中でもホストPCを使い続けられ、モニターのないサーバーでも実行可能
  • GPUによるH.264・H.265・AV1エンコード、10ビットHDR、モーション・タッチパッド・ハプティクスを含む入力、Opusベースの低遅延5.1・7.1chオーディオをサポート
  • Linuxとsystemd、Vulkanビデオエンコードに対応したNVIDIA RTX・AMD RDNA2+・Intel Arc GPU、Moonlight v6.0.0以降が必要
  • GameStreamプロトコルのトラフィックはアプリケーション層で完全には暗号化されないため、ポートをインターネットへ直接公開してはならず、外部アクセスにはTailscale・WireGuard・ZeroTierのようなVPNが必要

分離されたゲームストリーミング

  • 各アプリケーションは、ホストのデスクトップから分離された専用のストリーミングセッションで実行される
    • ストリーミング中でもホストPCを別の作業に使える
    • アクティブなデスクトップセッションやモニター、HDMIダミープラグなしでヘッドレスサーバー上で動作する
  • GPUのVulkanビデオエンコードでH.264・H.265・AV1を処理する
  • 対応ゲームでは実際の10ビットHDRストリーミングを提供する
  • マウス、キーボード、ゲームパッドに対応し、ゲームパッドのモーション・タッチパッド・ハプティクス入力も扱える
  • オーディオは低遅延のOpusエンコードを使用し、ステレオと5.1・7.1サラウンドに対応する

動作要件

  • 現在はLinux専用で、Arch Linuxでテストされており、ほかのLinuxディストリビューションでも動作例がある
  • アプリケーションプロセスの起動と管理にはsystemdが必要
  • VulkanビデオエンコードをサポートするNVIDIA RTX、AMD RDNA2以降、またはIntel Arc GPUが必要
  • クライアントはMoonlight v6.0.0以降である必要があり、それ以前のバージョンや非公式ポートとの互換性は保証されない

インストールと実行

  • Arch LinuxではAUR経由でyay -S moonshineとしてインストールできる
  • ユーザーがログアウトした状態でもアプリケーションを実行するにはsudo loginctl enable-linger $USERを使う
    • ストリーミング時にユーザーが常にログインしているなら、この手順は省略できる
  • sudo systemctl enable --now moonshine@$USERで起動時にサービスを開始し、即座に実行する
  • ソースビルドにはclang、CMake、Rust、Wayland、Vulkanヘッダー、shaderc、Mesa、Opus、PulseAudio関連ライブラリなどが必要
  • ビルド後はcargo run --release -- /path/to/config.tomlで実行する

設定とクライアント接続

  • 指定したパスにファイルがなければ設定ファイルを自動生成する
    • AURパッケージの既定パスは$XDG_CONFIG_HOME/moonshine/config.toml
  • Moonlightは初回接続時にPINを表示し、ホスト通知またはhttp://localhost:47989/pinからペアリングできる
  • /submit-pinエンドポイントへuniqueidpinをPOSTして、コマンドラインからもペアリング可能

アプリケーション構成

  • config.toml[[application]]ごとに、分離セッションで実行するプログラムを定義する
    • title: Moonlightに表示する名前
    • boxart: 任意のカバー画像パス
    • command: 実行ファイルと引数の一覧
  • pre_commandはアプリケーション開始前にコマンドを順番に同期実行し、すべて完了するまでセッションは待機する
  • post_commandはストリーミング終了後にコマンドを順番に同期実行し、すべて完了するまでサーバーは待機する
  • これを使って競合するサービスを停止したり、ストリーミング前後でGPU状態を変更したりできる

自動アプリケーション探索

  • Steamスキャナーは指定したSteamライブラリからインストール済みゲームを見つけ、ゲームIDを含む実行コマンドを構成する
  • Desktopスキャナーは指定ディレクトリ内の.desktopファイルからアプリケーションを見つける
    • ターミナルアプリケーションを含めるかどうか、アイコンパスを解決するかどうかを設定できる

Sunshineとの違いと制限

  • Sunshineはより多くのプラットフォームと全体的に多くの機能をサポートするが、MoonshineはLinux専用
  • Moonshineの差別化ポイントは、ストリーミングセッションをデスクトップから分離することでホストを使い続けられ、アクティブなデスクトップがなくても動作する点
  • 2つのクライアントへの同時ストリーミングは現在サポートされておらず、プロジェクトの重点でもない

ネットワークセキュリティ

  • Moonshineは公開ネットワーク向けには設計されていない
  • 基盤となるGameStreamプロトコルの制約により、トラフィックはアプリケーション層で完全には暗号化されない
  • インターネット越しのストリーミングにはTailscaleWireGuardZeroTierのようなVPNを使う必要があり、Moonshineのポートを直接公開してはならない

ベースとなるプロジェクト

  • Moonlight: Moonshine向けクライアントを提供
  • Sunshine: ホストAPIの基盤を提供
  • Inputtino: 入力デバイス実装の基盤を提供
  • magic-mirror: VulkanとWaylandコンポジタを使ったヘッドレスストリーミングの着想元

1件のコメント

 
GN⁺ 3 시간 전
Hacker Newsのコメント
  • 要するに、Nvidia GameStreamは独自技術だったがNvidiaが廃止し、その後SunshineとMoonlightが全プラットフォームで低遅延ストリーミングをサポートするオープンソースのサーバー・クライアントとして登場した
    Game on Whalesはマルチユーザーストリーミングと仮想ディスプレイを加え、既存のログインセッションに影響しないセルフホスト版Stadia/GeForce Nowに近く、Steam・Firefoxなどを選別されたコンテナで実行する
    その後ApolloとArtemisが仮想ディスプレイのストリーミングを簡単にしたが、Apolloの仮想ディスプレイは実質的にWindows専用で、MoonshineはこれをLinuxサーバーで実装している
    Apolloから分岐したVibepolloはほぼ全面的にバイブコーディングで作られた改良版なので、個人的には使うつもりはないが、この系譜で抜けているものがあるか気になる

    • Steam Linkも抜けている。ハードウェア販売は終わったが、Androidアプリなどを通じてソフトウェアはまだ生きている
      SteamはGoogleと違ってすでに顧客基盤まで持っているので、明日にでもあらゆるハードウェアで所有ゲームを実行するStadia風サービスを発表しても驚かない気がする
    • コンシューマー向けGPUを複数の仮想化ホストで共有するのは、いまだに実質不可能で活用度が限られる。強力なサーバー1台にシンクライアントをつないで、旧作のCODのようなゲームを遊ぶ構成が理想的だ
    • MoonshineはLinuxでヘッドレスSunshineのように動作するのだろうか
      Sunshineはストリーミング中にホスト画面にもゲームが表示されるが、Moonshineは物理ディスプレイなしで実行したり、複数のゲームを同時に実行できるという意味なのか確認したい
    • Proxmox内のFedoraが起動時に実際のモニター仕様をまねる偽ディスプレイを作るよう、カーネル引数を設定している
      Sunshineがそれを実ディスプレイとして認識するので、電源とLANケーブルだけ残せばよく、HDMIダミープラグや仮想ディスプレイドライバーなしでもLinuxゲームサーバーがうまく動く
    • SunshineとMoonlightは再び活発に開発されていて、ApolloやArtemisより新しいリリースも出ているように見える
      Windowsでリモートゲーム中でも他の人がサーバーを使えるのか気になる。見つけた仮想ディスプレイソリューションの大半はサーバーディスプレイを消してしまう
  • Moonshineの開発者です。中核はSunshineと似ているが、既存のデスクトップ環境に依存せず独自コンポジターを生成する点が違う
    デスクトップ環境なしでヘッドレス実行でき、ダミープラグなしで任意の解像度・リフレッシュレートを作れ、モニターが対応していなくてもHDRを使える。既存デスクトップを使いながら同時にゲームをストリーミングすることも可能だ
    技術的には、Vulkanエンコーダー1つ、Linux 1つ、GUIなし、旧Moonlightクライアント非対応という狭い範囲を意図的に選び、コードベースを軽く保っている。その代わり、比較的新しいGPU・ドライバーと新しいMoonlightクライアントが必要になる
    2022年から作っていた趣味プロジェクトで、当初はSunshineより劣っていたためREADMEで使わないよう勧めていたが、差別化できる機能が生まれた後にその文言を削除した
    新規ユーザーには、情報が豊富でうまく動く可能性が高いSunshineをまず勧めるが、新しいものを触るのが好きならMoonshineも悪くない

    • 月20ドルのClaudeやCodexの料金プランがあるだけでも、Linuxを触ってみるための参入障壁は大きく下がった。以前なら数時間から数日詰まっていたことをコーヒー1杯飲む間に解決できるので、Bazziteマシンで試すときに多少荒削りな部分があっても、昔ほど邪魔にならなさそうだ
    • 紹介が謙虚すぎる気がする。Linux版Sunshineでは任意の解像度が使えないという違いは非常に大きい
    • SunshineのLinux関連の問題にうんざりしていて、昨夜Moonshineを見つけたが、今のところ非常に満足している
    • 10分ほど使ってみたが、印象的だった。VS Codeは起動できなかったが、リモートモードがあるのでそれほど重要ではなく、あとで別のアプリで再挑戦するつもりだ
      独自コンポジター構造の都合上、完全なデスクトップ環境を動かすのは難しそうだが、Linuxにはアプリを1つずつでも安定してリモート実行できる方法が切実に必要だ。KDEやGNOMEの内蔵サーバーは全般的に問題が多く、モニターも点いていなければならない
  • SunshineとMoonlightで、デスクトップ上でエミュレーションしてアップスケールしたPS2ゲームSSX Trickyを、7年以上前のAndroidセットトップボックスに非常に滑らかにストリーミングできた
    ただしデスクトップ画面にゲームがそのまま表示されるので、他の人が遊んでいる間はホストを使えなかったが、Moonshineはこれを解決してくれそうだ。すでに素晴らしかった組み合わせに最後の仕上げを加えたようなものだ

    • SSXシリーズが恋しい。EA Bigが閉鎖され、他社も引き継がなかったのが残念で、その中でもTrickyが一番好きだった
  • MacBookにDualSenseを接続し、Moonlightを開いてゲーム用デスクトップへフルスクリーン接続し、SteamのAAAゲームを起動する形でMoonlightとApolloを使っている
    Wi‑Fi 7では体感できるような遅延はほとんどなく、大型TVにつないだMinisforumにもDualSenseの別ボタン組み合わせで接続できる。Apolloが設定を保存してくれるので、2台の機器の間をほぼ問題なく切り替えられる

    • Androidスマホでも試す価値がある。コントローラーを装着した6.7インチOLED 2340×1080、120Hz HDR画面でベッドでDiablo 2 Remasteredを遊ぶと、Steam Deckより満足度が高い
      スマホは映像を再生するだけなので熱くならず、バッテリーも長持ちする
    • ストリーミング中の遅延急増を防ぐには、AWDLを終了する必要があるのかも気になる
    • Steam以外のゲーム対応に加えて、Steam Linkよりもうまく動くのかも気になる
  • Moonshineがセッションごとに仮想デスクトップのようなものを作るのか、単なる別画面なのか、それとも完全に独立したコンポジターインスタンスなのか気になる

    • 機能説明の通り、各ストリームはデスクトップ環境から完全に分離された独自コンポジター上で実行される。複数インスタンスをホストできるゲームサーバーという発想は非常に魅力的だ
  • PCでSwitchゲームをエミュレーションし、旧型のWii Uと3DSへストリーミングするのにこの方式を使っている

    • AndroidベースのAyn OdinやThorのような最新携帯機でも使っている
    • 数年前にRustですべてのエミュレータにマルチプレイのネットワーク対戦を対応させるツールを作ったが、意外と実装は簡単だった
  • MoonlightとSunshineの組み合わせをRTX 4000 Pro GPUサーバーで満足して使っている
    接続されたクライアントに合わせた自動解像度調整だけが惜しかったが、Home Assistant Windowsクライアントでスクリプトを書いて解決した

  • ノートPCから携帯電話へSunshineとMoonlightのストリーミングを設定しようとガイドに従ったが、実用的な結果は得られなかった
    休息として遊ぶはずのゲームのための限られた余暇の1週間を、コーデック・遅延・Wi‑Fi設定・複数アプリの調整に費やしてしまい諦めたが、約3年経った今は改善されたのか気になっている

    • たまに完璧に動作したセッションもあり、技術的に可能であることは確認できたが、90%くらいは奇妙なエラー・設定問題・アップデートによる互換性破壊に悩まされた。うまく使っている人もいるが、問題を洗練させるにはまだ多くの作業が必要そうだ
    • 約1週間前、LLMの助けでWindowsホストとUbuntuクライアントを30分で設定し、外部ネットワーク接続の問題も15分ほどで解決した
      結局やろうとしていたゲームはローカルマルチプレイしか対応しておらず、ProtonDBの限定的互換判定とは違ってノートPCでそのまま動いたのでストリーミングは不要だったが、設定自体は容易だった。Tailscaleも使った
    • ホストPCは有線LANに接続し、クライアントは1080p 60fps以上なら最低でもWi‑Fi 6を使うべきだ。一部のルーターはパケットロスがひどいので、まともな機材を使うか自前で構成したほうがいい
    • デスクトップとPS Vitaの間でSunshineとMoonlightを使っているが、要点は少なくともホストを有線接続し、無線ルーターまでの遅延を低くすることだ
      無線は理想的な環境でも再送が必要なパケットがはるかに多いので、Wi‑Fiはクライアント側だけで使うほうがよい
  • GPUを直結したROS 2開発用VMにリモート接続するためにSunshineとMoonlightを使っている
    古いUbuntuが必要だったのでVMを選び、GazeboシミュレーションのためGPU直結が必要だった。RDPではデスクトップがひどく遅く無反応だったが、この組み合わせで実用的になった

  • 自前のPCゲームストリーミングは、Nvidiaの機能を有効にするだけだった時代より設定がずっと難しくなった
    最後に試したときは動かし方がわからず諦めてしまい、ほかの利点はあってもオープンソース開発者は使い勝手を十分に重視していないように思える

    • 今はNvidia専用機能だった時代よりはるかに良い環境になっているので、もう一度試してみる価値はある。最も簡単な方法はSteam内蔵のRemote Playと公式アプリで、SunshineとMoonlightはより良い結果、細かな設定、Steam外アプリの対応を提供する
      YouTubeのガイドやAIの助けも借りられ、実際にLinuxディストリビューションのファイアウォールがストリーミング用ポートを塞いでいる原因をAIと一緒に突き止めたこともある
      最初はローカルネットワークから始めて、インターネット経由のストリーミングは後で設定するのがよいが、WireGuardやTailscaleのようなホームVPNがあれば難しくないかもしれない。ホストは有線が最適で、クライアント側のWi‑Fiも6GHz対応ならだいたい問題ない
      PS Remote Playほど魔法のように簡単ではないが、もう一度試してみることを勧める
    • 5年前には似たような問題でゲームストリーミングを完全に諦めたが、1か月前に古いLinuxノートPCでソファからOxygen Not Includedを遊ぶために5分でSunshineとMoonlightを設定し、すぐに完璧に動いた
      推奨事項とは違ってホストもWi‑Fiだったが問題なく、ここ数年で体験した技術の中で最も魔法のような瞬間だった。ただし使ったのはローカルWi‑Fiストリーミングだけだった