Yine Başka Bir Evye Değiştirici Komut Dosyası
Ubuntu 16.04'te test edildi
Ancak bu, yalnızca istediğiniz uygulamanın sesini değiştirmenizi sağlar.
KULLANIM: Lavabosunu değiştirmek istediğiniz uygulamaya odaklanın ve bu komut dosyasını çalıştırın. Bu kadar!!!
Bu komut dosyası odakta olan uygulamayı algılar, ondan çalınan tüm sesleri bulur ve bunları bir sonraki kullanılabilir lavaboya geçirir.
https://gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe3
Komut dosyasını açıklama
Uygulamanın PID'sini odakta bulmamız gerekiyor
Ama önce xid'e ihtiyacımız var
xprop -root _NET_ACTIVE_WINDOW
Sonra $xid
uygulama pid almak için buraya yerleştirin
xprop -id $xid _NET_WM_PID
Şimdi bu PID ile ilgili lavabo girişlerini bulmamız gerekiyor
İlk önce pacmd list-sink-inputs
her satıra bir lavabo girişi listelemek için komutun çıktısını doğrusallaştıralım , aynı satırda indeksini, batmasını ve pid'ini gösterelim
pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2
hadi adım adım analiz edelim:
grep -E 'index:|sink:|process.id
Sadece içeren satırları tutmak index:
, sink:
ya daprocess.id
tr '\n' ' '
tüm hatlara katılır
tr -d '"'
tüm "
karakterleri kaldırır . Teklifi tırnak işaretleri olmadan almak için gerekli
sed -e 's/index:/\n/g'
tüm index:
tekrarlamaları yeni bir satır karakteriyle değiştirir\n
tail -n +2
boş olduğu için ilk satırı kaldırır
Ve sonuç şöyle bir şeydir:
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
Bunun ne anlama geldiğini anlamak için bir satırı analiz edelim:
# 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
182
lavabo-giriş indeksi, 0
lavabo indeksi ve 13752
sonunda ait uygulamanın pid'i
Sonra her satırda tekrarlıyoruz
... | while IFS= read -r line || [ -n "$line" ]; do
sink_input_pid=$(echo $line | awk '{print $NF}')
Ve son olarak yalnızca odaklanan uygulamanın pidine uyan lavabo girişinin pid'ini filtreleyin
if [ $sink_input_pid = $app_pid ]; then
Veri ayıklanıyor
İle awk
biz unsurları alabilirsiniz ihtiyacımız
sink_input_index=$(echo $sink_input | awk '{print $1}')
current_sink_index=$(echo $sink_input | awk '{print $3}')
Lavabo dönüşünün 0'dan ne zaman yeniden başlaması gerektiğini bilmek için çok sayıda lavabo alın.
sink_list_size=${#sink_list_array[@]}
Bir sonraki lavaboyu bulmak için, lavaboların listesini tekrar etmeliyiz, hangisinin current_sink_index ile eşleştiğini ve bir sonraki lavabonun dizinini bilmeliyiz.
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
Ve son olarak, next_sink_index'te oynamak için lavabo girişini taşıyoruz
pacmd move-sink-input $sink_input_index $next_sink_index
Ubuntu 16.04 ile ilgili not:
Kısayol tuşunu yapılandırırken, ubuntu'nun kısayol yöneticisiyle çalışmasını sağlayamadım. Bu yüzden compizconfig-settings-manager uygulamasını kurmak zorundaydım
sudo apt-get install compizconfig-settings-manager