リモートで使っているPCはWindows10ですがサポートが秋までとの事で11にするかどうか又はUbuntuにしてしまおうかと思いUbuntuのインストール、リモート用にCHROME REMOTE DESUKTOPを設定していましたが音が鳴らないので困っていましたがChatGPTが解決してくれました
その忘備録です



Ubuntu 24.04でChrome Remote Desktopをローカルセッション&音声付きで使う方法(PipeWire対応)

🎯 やりたいこと

Ubuntu 24.04 環境で 既存のローカルセッション(:0)に Chrome Remote Desktop(CRD)で接続し、さらに PipeWire を使って音声もリモート転送する環境を構築します。

  • 仮想XやXfce不要
  • GNOMEそのまま使える
  • 音声もリモート転送(YouTube再生OK)
  • systemdで自動起動&永続化

🧩 構成図

[アプリ音声]
     ↓
[PipeWire/PulseAudio]
     ↓
[仮想 Sink: chrome_remote_desktop_session]
     ↓
[FIFO: /run/user/1000/crd_audio#XXXX/fifo_output]
     ↓
[Chrome Remote Desktop]
     ↓
[クライアントに音声配信]

🛠 手順一覧

① CRD 本体スクリプトのカスタマイズ

ファイル: /opt/google/chrome-remote-desktop/chrome-remote-desktop

DISPLAY番号を :0 に固定:

FIRST_X_DISPLAY_NUMBER = 0

仮想Xサーバー起動をスキップ:

# self._launch_server(server_args)
# if not self._launch_pre_session():
#     self.launch_desktop_session()

display = self.get_unused_display_number()
self.child_env["DISPLAY"] = ":%d" % display

音声のみ有効化:

host_id = self.host_config.get("host_id")
self.setup_audio(host_id, backoff_time)

② PipeWire用 Sink ノードをpipewire.confに追記

ファイル: /run/user/1000/crd_audio#XXXX/pipewire.conf の末尾(context.objects内)に追加:

{ factory = spa-node-factory
  args = {
    factory.name    = support.node.sink
    node.name       = "fifo_output"
    media.class     = "Audio/Sink"
    audio.format    = "S16LE"
    audio.rate      = 48000
    audio.channels  = 2
    audio.position  = [ FL FR ]
    stream.props = {
      node.name = "chrome_remote_desktop_session"
      node.description = "Chrome Remote Desktop FIFO Output"
    }
    device = {
      object.path = "/run/user/1000/crd_audio#XXXX/fifo_output"
    }
  }
}

③ 自動化スクリプトの作成

ファイル: ~/.config/crd-audio/load-crd-sink.sh

#!/bin/bash
FIFO=$(ls -d /run/user/1000/crd_audio#*/fifo_output 2>/dev/null | head -n1)

if [ -n "$FIFO" ]; then
  pkill -f pipewire.*crd_audio
  sleep 5
  pactl load-module module-pipe-sink file="$FIFO" sink_name=chrome_remote_desktop_session
  conf_dir=$(dirname "$FIFO")
  pipewire -c "$conf_dir/pipewire.conf" &
else
  echo "FIFO not found after timeout"
  exit 1
fi

作成後は実行権限を付与し、所有者をユーザー自身に変更:

chmod +x ~/.config/crd-audio/load-crd-sink.sh
sudo chown $USER:$USER ~/.config/crd-audio/load-crd-sink.sh

④ systemd ユーザーサービスで自動起動

ファイル: ~/.config/systemd/user/crd-audio-sink.service

[Unit]
Description=Load CRD virtual audio sink
After=chrome-remote-desktop@$user.service
Requires=chrome-remote-desktop@$user.service

[Service]
ExecStart=/home/$user/.config/crd-audio/load-crd-sink.sh
Restart=on-failure

[Install]
WantedBy=default.target

有効化:

systemctl --user daemon-reload
systemctl --user enable --now crd-audio-sink.service

✅ 確認方法

FIFO が生成されているか:

ls /run/user/1000/crd_audio#*/fifo_output

Sink が登録されているか:

pactl list short sinks

音声テスト:

paplay --device=chrome_remote_desktop_session /usr/share/sounds/freedesktop/stereo/complete.oga

📌 まとめ

  • 仮想X不要、GNOMEそのままで接続
  • PipeWire経由で音声をFIFOに転送
  • systemdユーザーサービスで再起動後も自動化

💬 最後に

この構成は非常にニッチかつ便利です。Xfceや仮想セッションの導入なしに、既存のデスクトップをそのまま音声付きでリモート操作できます。PipeWire環境でCRDを最大限活用したい方におすすめです。