Tenga en cuenta que la respuesta de Tommi Kyntola se basa en que el fregadero esté en uso para que pueda obtener el número del fregadero.
También tenga en cuenta que se basa en índices de sumidero nombrados para ser el mismo que el índice contado . Digamos, por ejemplo, que tenemos 3 sumideros 1, 2 y 3 y ese 3 es nuestro sumidero seleccionado, luego desconectamos el número 2, dejándonos con 1 y 3. Ahora no puede contar para hundir 3 con la solución de Tommi Kyntola porque pactl list sinks | grep "^[[:space:]]Volume:"
solo generará 2 campos de volumen, por lo tanto, la tubería a la cabeza / cola para obtener la $SINK + 1
'línea th no funcionará (he experimentado este irl, no solo estoy jugando)
Mi solución funciona basándose en el supuesto de que pacmd siempre listará los sumideros en un orden específico. Si desea una solución más confiable, debe analizar la salida.
#!/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
Nota: No sé si los campos de volumen difieren, el mío se ve así (desde pacmd list-sinks
):
volume: front-left: 42706 / 65% / -11.16 dB, front-right: 42706 / 65% / -11.16 dB
Además, solo obtengo el volumen del primer canal (frontal-izquierdo) en formato de porcentaje (es decir, campo 5), sus canales pueden estar en diferentes niveles.
EDITAR:
Pensándolo bien, probablemente quieras obtener el nombre de sumidero predeterminado pacmd stat
para una solución menos complicada:
#/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
le da el volumen, pero no en un formato sencillo y agradable como set-sink-volume.