pactl list sinks | grep '^[[:space:]]Volume:' | \
head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,'
Вот что у меня есть. Неприятно, но мне хватило. Я не мог найти способа сделать это. pactl
просто, похоже, не имеет никаких средств получения листинга только для одного приемника, но они печатаются в возрастающем порядке. Таким образом, выбирается n-я строка с использованием хвоста
и головы
. Обратите внимание, что в строке громкости могут быть отдельные объемы для правого и левого каналов, и что замена sed
выбирает только первый, потому что мне это и нужно.
Для записи, я использую список приемников pactl short
, чтобы получить номер моего активного приемника:
pactl list short | grep RUNNING | sed -e 's,^\([0-9][0-9]*\)[^0-9].*,\1,'
РЕДАКТИРОВАТЬ 2017-10-05: Мне пришлось немного подправить их из-за изменений в pulseaudio. Вот что у меня сейчас:
SINK=$( pactl list short sinks | sed -e 's,^\([0-9][0-9]*\)[^0-9].*,\1,' | head -n 1 )
NOW=$( pactl list sinks | grep '^[[:space:]]Volume:' | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,' )
У меня MOD
установлено на +10 или -10, я провожу некоторые проверки границ и, наконец:
pactl set-sink-volume $SINK ${MOD}%
gcc -java и gcj устарели. Ubuntu и некоторые дистрибутивы поддерживают более старые версии, а RedHat и CentOS — нет. Если для вас важно иметь gcj, вам нужно переключиться на Ubuntu.