さらに別のシンクスイッチャースクリプト
Ubuntu 16.04でテスト済み
ただし、これにより、必要なアプリケーションの音声のみを切り替えることができます。
使用法:シンクを変更するアプリケーションに焦点を合わせ、このスクリプトを実行します。それでおしまい!!!
このスクリプトは、フォーカスされているアプリケーションを検出し、そこから再生されているすべてのオーディオを見つけて、次に利用可能なシンクに切り替えます。
https://gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe3
スクリプトの説明
フォーカスされているアプリケーションのPIDを見つける必要があります
しかし、最初にxidが必要です
xprop -root _NET_ACTIVE_WINDOW
次に、ここ$xid
に挿入して、アプリケーションのPIDを取得します
xprop -id $xid _NET_WM_PID
次に、そのPIDに関連するシンク入力を見つける必要があります
まず、コマンドの出力を線形化して、 pacmd list-sink-inputs
各行に1つのシンク入力をリストし、同じ行にそのインデックス、シンク、およびpidを表示します。
pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2
段階的に分析してみましょう。
grep -E 'index:|sink:|process.id
を含む行のみを保持するindex:
、sink:
またはprocess.id
tr '\n' ' '
すべての行を結合します
tr -d '"'
すべての"
文字を削除します。引用符なしでpidを取得する必要があります
sed -e 's/index:/\n/g'
すべてのindex:
出現を改行文字で置き換えます\n
tail -n +2
空であるため、最初の行を削除します
結果は次のようになります。
180 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 3521
181 sink: 1 <alsa_output.pci-0000_00_01.0.analog-stereo> application.process.id = 2733
182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
1行を分析して、その意味を理解しましょう。
# 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
182
シンク入力インデックス、0
シンクインデックス、13752
最後に属するアプリケーションのPID
次に、各行を繰り返します
... | while IFS= read -r line || [ -n "$line" ]; do
sink_input_pid=$(echo $line | awk '{print $NF}')
そして最後に、フォーカスされたアプリのpidに一致するシンク入力のpidのみをフィルター処理します
if [ $sink_input_pid = $app_pid ]; then
データの抽出
ではawk
、私たちは私たちに必要な要素を取得することができます
sink_input_index=$(echo $sink_input | awk '{print $1}')
current_sink_index=$(echo $sink_input | awk '{print $3}')
シンクの回転を0から再開するタイミングを知るために、シンクの数を取得します。
sink_list_size=${#sink_list_array[@]}
次のシンクを見つけて、シンクのリストを反復処理し、どれがcurrent_sink_indexと一致するか、次のシンクのインデックスを知る必要があります。
i=0
for sink in "${sink_list_array[@]}"; do
i=$((($i+1)%sink_list_size)) # i++ mod(#sinks)
if [ $sink = $current_sink_index ]; then
next_sink_index=${sink_list_array[i]}
break
fi
done
最後に、シンク入力を移動してnext_sink_indexで再生します
pacmd move-sink-input $sink_input_index $next_sink_index
Ubuntu 16.04に関する注意:
ショートカットキーを設定するとき、ubuntuのショートカットマネージャーで動作させることができませんでした。だから私はcompizconfig-settings-managerをインストールする必要がありました
sudo apt-get install compizconfig-settings-manager