プログラミング
Moonshine: PCからMoonlight対応デバイスへゲームをストリーミング可能に
Moonshine: Lets you stream games from your PC to any device running Moonlight (github.com)
要約
Moonshineは、PCからMoonlightクライアントが動作するあらゆるデバイスへゲームをストリーミングできるLinux専用のアプリケーションです。GPUによるハードウェアエンコーディング(H.264, H.265, AV1)、HDRサポート、低遅延のオーディオストリーミングなどの機能を備えています。各ストリームは分離されたセッションで実行されるため、ホストPCはストリーミング中も他の用途に使用でき、モニターなしでも動作します。
全文翻訳
Moonshine 🌙
Moonshineは、PCからMoonlightが動作するあらゆるデバイスへゲームをストリーミングできます。
キーボード、マウス、コントローラーの入力はホストに送り返されるため、あたかもその場に座っているかのようにリモートでゲームをプレイできます。
機能
分離されたストリーミングセッション: 各ストリームは独自のコンポジターで実行され、デスクトップ環境とは完全に分離されます。ストリーミング中もホストPCは他の用途に使用できます。
モニター不要: ヘッドレスサーバーでも動作します — HDMIダミープラグは不要です。
ハードウェアビデオエンコーディング: GPUを使用したH.264、H.265、AV1エンコーディング。
⚠️ AV1警告: AV1エンコーディングは実験的であり、NVIDIA GPUでは時間の経過とともにフレームサイズが増加する問題があります(issueを参照)。これはドライバーバージョン595.44.3.0で修正されるはずです。それまではH.264またはH.265を使用してください。
HDRサポート: 対応ゲーム向けの真の10ビットHDRストリーミング。
完全な入力サポート: マウス、キーボード、ゲームパッド(モーション、タッチパッド、ハプティクスを含む)。
オーディオストリーミング: 低遅延のOpusエンコーディングによるステレオおよびサラウンドサウンド(5.1/7.1)。
要件
Linuxのみ。
Arch Linuxでテスト済みですが、他のLinuxディストリビューションでも動作することが報告されています。
systemd: アプリケーションプロセスの起動と管理に必要です。ほとんどの最新Linuxディストリビューションにはデフォルトで含まれています。
Vulkanビデオエンコーディング対応GPU: NVIDIA RTX、AMD RDNA2+、またはIntel Arc。
Moonlight v6.0.0以降。古いバージョンや非公式ポートとの互換性は保証されません。
インストール
Arch
最も簡単な方法は、AUR経由でインストールすることです。
yay -S moonshine
ユーザー向けにMoonshineを実行するには:
ユーザーリンガリングを有効にする:
sudo loginctl enable-linger $USER
これにより、ユーザーがログインしていない場合でも、Moonshineはユーザーセッションでアプリケーションを実行できます。ストリーミングしたいときに常にユーザーがログインしている場合は、この手順をスキップできます。
起動時にサービスを開始し、すぐに実行するように有効にする:
sudo systemctl enable --now moonshine@$USER
ソース
ビルドに必要な依存関係は以下の通りです:
sudo pacman -S \
clang \
cmake \
gcc-libs \
glibc \
libc++ \
libevdev \
libpulse \
libxkbcommon \
make \
mesa \
opus \
pkg-config \
rust \
shaderc \
vulkan-headers \
wayland
その後、コンパイルして実行します:
cargo run --release -- /path/to/config.toml
設定
指定したパスに設定ファイルが存在しない場合、自動的に作成されます。AURパッケージを使用する場合、デフォルトは$XDG_CONFIG_HOME/moonshine/config.tomlです。
クライアントとのペアリング
初めてMoonlightで接続すると、PINが表示されます。ホストに通知が表示され、それをクリックしてペアリングページを開くか、http://localhost:47989/pin で手動でアクセスできます。コマンドラインからペアリングすることもできます:
curl -X POST "http://localhost:47989/submit-pin" -d "uniqueid=0123456789ABCDEF&pin=<PIN>"
アプリケーションの追加
各アプリケーションは、独自の分離されたストリーミングセッションで実行されます。config.tomlに以下のように追加します:
[[application]]
title = "Steam"
boxart = "/path/to/steam.png" # オプション
command = ["/usr/bin/steam", "steam://open/bigpicture"]
title: Moonlightに表示される名前。
boxart (オプション): カバー画像のパス。
command: 実行するコマンド。最初の項目が実行ファイル、残りは引数です。
pre_command (オプション): アプリケーションを起動する前に実行するコマンド。各項目は個別のコマンドで、順に実行されます。同期的に実行され、セッションはすべてが完了するまで待機します。
post_command (オプション): ストリーミングセッション終了後に実行するコマンド。各項目は個別のコマンドで、順に実行されます。同期的に実行され、サーバーはすべてが完了するまで待機します。
例:
[[application]]
title = "Steam"
command = ["/usr/bin/steam", "steam://open/bigpicture"]
pre_command = [
["/usr/bin/systemctl", "stop", "conflicting.service"],
["/usr/bin/nvidia-smi", "pstate", "50"],
]
post_command = [
["/usr/bin/nvidia-smi", "pstate", "performance"],
]
アプリケーションスキャナー
スキャナーはインストールされているアプリケーションを自動的に検出するため、手動で追加する必要はありません。
Steamスキャナー — インストールされているすべてのSteamゲームを見つけます:
[[application_scanner]]
type = "steam"
library = "$HOME/.local/share/Steam"
command = ["/usr/bin/steam", "-bigpicture", "steam://rungameid/{game_id}"]
デスクトップスキャナー — .desktopファイルからアプリケーションを見つけます:
[[application_scanner]]
type = "desktop"
directories = [
"$HOME/.local/share/applications",
"/usr/share/applications",
]
include_terminal = false
resolve_icons = true
FAQ
Sunshineと比較してどうですか?
Sunshineはより多くのプラットフォームをサポートし、全体的により多くの機能を持っています。MoonshineはLinux専用です。
Moonshineは各ストリーミングセッションをデスクトップから分離された独自の環境で実行します。これは、ストリーミング中にホストPCが使用可能であり、アクティブなデスクトップセッションなしでも動作することを意味します。
セキュリティ
Moonshineはパブリックネットワークでの使用を想定していません。基盤となるGameStreamプロトコルには、アプリケーションレベルでトラフィックが完全に暗号化されないという制限があります。インターネット経由でストリーミングする必要がある場合は、Tailscale、WireGuard、またはZeroTierのようなVPNを使用してください。Moonshineポートをインターネットに直接公開しないでください。
謝辞
以下のプロジェクトの背後にある素晴らしい人々の尽力なしには、これは不可能でした:
Moonlight: これがなければMoonshineのクライアントは存在しませんでした。
Sunshine: APIのホスト部分の多くの基盤を築きました。
Inputtino: 入力デバイスの徹底的な実装。
magic-mirror: VulkanとWaylandコンポジターを使用してヘッドレスストリーミングを行うためのインスピレーション。