ラベル vnc の投稿を表示しています。 すべての投稿を表示
ラベル vnc の投稿を表示しています。 すべての投稿を表示

2020-11-28

SSH経由で遠隔のホストからPulseAudioの音を出す方法

TigerVNC viewerはオプション-viaを使用することで簡単にSSH経由で遠隔のVNCサーバーへ接続することができる。 残念なことに、VNCのプロトコルには音声を転送するプロトコルが定義されていないので、たいていのVNCサーバー・クライアントでは音声を送ることが出来ない。

このページでは、サーバー上で、vncserverを使用して起動したVNCのセッション内で音声を再生するアプリケーションを起動し、遠隔のクライアントでその音声を聴く方法を説明する。

クライアント側の設定

pactl load-module module-native-protocol-tcp 'auth-ip-acl=127.0.0.1'
もしauth-ip-aclに複数のホスト・ネットワークを設定したい場合、;で区切って記載する。

サーバー側の設定

環境変数PULSE_SERVERを以下のように設定する。
export PULSE_SERVER=tcp:127.0.0.1:4715
ポート番号4715の部分は、後述のトンネリングの設定とあわせておけば何でも良い。 この設定をした上で、PulseAudioを使用するアプリケーションを起動する。

SSHトンネリングの設定

クライアント側から、以下のようにトンネルを掘る。
ssh -NfR 4715:127.0.0.1:4713 server.example.net

制限事項

サーバー側で環境変数が設定されたアプリケーションの音声しか送ることが出来ないため、既に起動しているアプリケーションの音声は送ることが出来ない。 従って、例えばx11vncと併用する使用方法には適していない。 既に起動している (ローカルの) デスクトップの音声を送る場合、以下のページが参考になる。

2020-11-03

SSHを通して遠隔にあるLinuxマシンのデスクトップ音声を聴く方法

はじめに

SSHでログインできるLinuxマシンのデスクトップ音声を聴く方法を説明する。 X11VNCを使うとデスクトップを操作することが可能だ。しかしながら、VNCには音声を転送する機能が付いていない。このようなとき、音声を圧縮してSSH経由で送ることで、やや遅延があるが、音声を一緒に聴くことができるようになる。

環境

接続先は、Pulse Audioが動いており、オーディオデバイスが接続されていることが必要である。 以下の手順は、遠隔ホストとしてScientific Linux 7を使用した。

手順

  1. まず、出力デバイスのモニターを確認する。最後に.monitorと名前が着いているものが出力デバイスのモニター (出力中の音を入力できる) である。
    $ LANG=C pactl list sources | grep Name
  2. 予め、無音の音声を再生しておく。
    $ ffplay -loglevel error -vn -nodisp -f s16le /dev/zero &
  3. SSHで接続した先でffmpegによりモニターをmp3に変換し、ローカルへパイプして、ffplayで再生する。
    $ input=alsa_output.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo.monitor # 上記で取得したモニターの名前
    $ ssh user@example.com ffmpeg -fflags nobuffer -flags low_delay -loglevel error -f pulse -ac 2 -i ${input} -c:a aac -f flv - | ffplay -fflags nobuffer -flags low_delay -nodisp -loglevel error -f flv -
ここで重要なのは、ffmpegとffplayそれぞれに-fflags nobuffer -flags low_delayを付けることだ。これらのオプションがなくても機能するが、段々と音声のバッファリングが増え、徐々に遅れが目立ち始める。

2011-01-20

XFCE4 をセッションにした VNC サーバが起動しない

端末で XFCE を使用していて, その中で VNC サーバを起動すると, 以下のエラーが出て VNC は起動するが XFCE のセッションが起動しないことがある.
xfce4-session: Another session manager is already running

これは, VNC サーバを起動するときに, 端末の XFCE セッションが設定した環境変数が, VNC 中の XFCE セッションに伝わってしまって, 既にセッションが起動済みであると判断してしまっているためだろう.

こんなときには一度ローカルマシンに SSH などでログインして, その中で VNC サーバを起動すればよい.

$ ssh localhost vncserver