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-24

Vimから:makeでビルドする際に別のディレクトリに移動する方法

Vimには、ビルドするコマンド:makeが備わっており、統合開発環境 (IDE) のように使用することができる。 Vimから抜けずにビルドできるだけでなく、GCCのエラーメッセージが出た行へ自動でジャンプしてくれる。

最近はビルドをビルド専用のディレクトリで行うことが推奨されているが、Vimでの設定方法を説明する。

手順

Autoconf, automakeを使用する場合を例に説明する。
  1. ビルドディレクトリを作成する。
    mkdir build
  2. Makefileを作成する。
    cd build
    ../configure
  3. 下のディレクトリに移動する。
    cd ..
  4. Vimでソースファイルを開く。(Vimだけを開いても良い)
    vim src/main.c
  5. Vim内で、makeprgを設定する。
    :let &makeprg='cd build && make'
  6. Vim内でビルドを開始する。
    :make
    このとき、-jなどのオプションを付けることもできる。

デバッグ

エラー・ワーニングが出た場合は、最初のエラーの行にジャンプする。 メッセージ間を移動する場合、:cn:cpを使用する。

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を付けることだ。これらのオプションがなくても機能するが、段々と音声のバッファリングが増え、徐々に遅れが目立ち始める。