Tommi Kyntoya'nın cevabının, lavabon numarasını alabilmeniz için kullanılan lavaboya dayandığını unutmayın.
Ayrıca, sayılan indeks ile aynı olması için adlandırılmış havuz indekslerine dayandığını unutmayın . Örneğin, 3 lavabo 1, 2 ve 3 var ve bu 3 bizim seçtiğimiz lavabosuz, sonra 2 numarayı kesiyoruz, bizi 1 ve 3 ile bırakıyoruz. Şimdi Tommi Kyntola'nın çözümü ile 3'ü batıramazsınız çünkü pactl list sinks | grep "^[[:space:]]Volume:"
sadece 2 Hacim alan çıktısı alacaktır, bu yüzden başa / kuyruğa boru $SINK + 1
hattı kurarak hattını çalışmayacak.
Çözümüm, pacmd'nin her zaman belirli bir sırayla lavaboları listeleyeceği varsayımına dayanarak çalışır. Daha güvenilir bir çözüm istiyorsanız, çıktıyı ayrıştırmanız gerekir.
#!/bin/sh
# Get the index of the selected sink:
getsink() {
pacmd list-sinks |
awk '/index:/{i++} /* index:/{print i; exit}'
}
# Get the selected sink volume
getvolume() {
pacmd list-sinks |
awk '/^\svolume:/{i++} i=='$(getsink)'{print $5; exit}'
}
getvolume
Not: Cilt alanlarının farklılık gösterip göstermediğini bilmiyorum, benimki şu şekilde görünüyor pacmd list-sinks
:
volume: front-left: 42706 / 65% / -11.16 dB, front-right: 42706 / 65% / -11.16 dB
Ayrıca sadece ilk kanalın hacmini (ön-sol) yüzde biçiminde (yani alan 5) alıyorum, kanallarınız farklı seviyelerde olabilir.
DÜZENLE:
İkinci düşüncede muhtemelen pacmd stat
daha az karmaşık bir çözüm için varsayılan lavabo adını almak isteyeceksinizdir :
#/bin/sh
getdefaultsinkname() {
pacmd stat | awk -F": " '/^Default sink name: /{print $2}'
}
getdefaultsinkvol() {
pacmd list-sinks |
awk '/^\s+name: /{indefault = $2 == "<'$(getdefaultsinkname)'>"}
/^\s+volume: / && indefault {print $5; exit}'
}
setdefaulsinkvol() {
pactl $(getdefaultsinkname) $1
}
pactl list sinks
size hacmi verir, ancak set-sink-volume gibi güzel ve kolay bir biçimde değildir.