2018/08/24ディスプレイとスピーカーのないサーバーで実行するsound_splitでは、実行結果を表示するのにディスプレイが、再生するのにスピーカーが必要です。Engine(GCE)などのサーバーシステムでは、sshで接続するだけでディスプレイやスピーカーがありません。いったサーバーで実行して、結果だけ手元のホストで表示/再生する方法を紹介します。ここでは、手元のホストがLinux/macであることを想定しています。Windowsであっても、同様のアイデアで共有できます。VNC接続によるディスプレイ転送まず、GUI表示を見るためにリモートディスプレイ環境を構築します。Serverを使用します。tightvncserverデスクトップ環境に、軽量のxfceを使います。リモートに、仮想ディスプレイを立ち上げます。1920x1200初回は、接続に必要となるパスワードの設定があります。接続できると、仮想ディスプレイ番号が与えられ表示されます。いくつもディスプレイは作成でき、接続する待ち受けポートが異なります。5902というふうに割り当てられています。待ち受けが必要でなくなった場合は、以下のコマンドで仮想ディスプレイを削除できます。:1ここで:1は削除したい仮想ディスプレイ番号を与えます。次に、待ち受けポートのポート転送の設定を行います。ファイアウォールに穴を空けて直接接続してもよいのですが、セキュリティ上パスワードの管理をしっかりしないと危険になります。そのため、sshのポートフォワード機能によりリモートのポートをローカルに振り替えます。5901:127.0.0.1:5901ssh接続をする際に、-Lオプションを与えることでポートフォワードすることができます(サーバーで許可されている場合)。この場合、ssh接続を開始するローカルホストの5901番ポートに接続をかけると、あたかもリモートサーバーから見た127.0.0.1:5901に接続をかけたのと同様の効果が得られます。5901で待ち受けしています。5901にVNC接続を行うことでssh接続の安全性と同等のセキュリティでVNC接続できます。次にスピーカーを転送します。ここではPulseAudioのtcp接続による再生を利用します。先程と同様に、今度は逆方向にポートフォワードをします。4713:127.0.0.1:4713ssh接続をする際に、-Rオプションを与えることで先程とは逆に、ssh接続先のプロセスがリモートホストの4713番ポートに接続をかけると、あたかもローカルホストから見た127.0.0.1:4713に接続をかけたのと同様の効果が得られます。ここで、リモートサーバーで音声出力をするPulseAudioの出力先をtcpの127.0.0.1:4713とした上で、ローカルホストでPulseAudioサーバーを立ててtcp待ち受けを許可しておくと、リモートで実行したプロセスが音声出力をしようとした際に、ローカルのスピーカーを鳴らすことができます。pulseaudiowindowsの場合は、バイナリが用意されているので公式サイトからダウンロードして利用します。module-native-protocol-tcpの行を編集します。default.paを編集します。auth-ip-acl=127.0.0.1設定が終わったら、PulseAudioを再起動します。--startサービスとして動かしていない場合は、フォアグラウンドで動かしてもよいでしょう。pulseaudio&リモートホストの準備リモートホストでもpulseaudioの設定が必要です。sound_splitをコンパイルする際に依存関係で既にインストールされているはずです。プログラムを起動する前にシェルで環境変数を設定してから起動すると、音声出力先を容易に切り替えることができます。input.wavVNC接続とPulseAudio転送を同時に行うここまでの設定が済めば、画面と音を同時に転送することができます。ssh接続の際に、以下のように両方のポートフォワードを設定します。4713:127.0.0.1:4713あとはそれぞれの接続の手順を両方行った上で、VNC接続上のシェルからsound_splitを実行することで、ローカルで画面と音を両方得ることができます。