Рейтинг:1

Установите максимальный предел увеличения громкости с помощью i3, pactl и bash.

флаг in

Я хотел бы настроить i3WM для установки максимального уровня громкости (скажем, 150%), чтобы случайно не увеличить громкость до какого-то огромного значения. Я сделал bash-скрипт, выполнение которого привязано к клавише volume_up. Все элементы работают нормально по отдельности, но когда я собираю все вместе, что-то не так.

Код Bash-скрипта:

#!/бин/баш
max_volume_pc=$1
current_volume_pc=$(список пактов | grep '^[[:space:]]Volume:' | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e s,.* \( [0-9][0-9]*\)%.*,\1,')
если (($current_volume_pc < $max_volume_pc-10)) ; тогда
    pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
еще
    a=$(($max_volume_pc - $current_volume_pc))
    pactl set-sink-volume @DEFAULT_SINK@ +$a% && $refresh_i3status
фи

привязать в конфигурационном файле i3:

bindsym XF86AudioRaiseVolume exec ~/.config/i3/custom_configs/volume_up.sh 150

Что работает просто отлично:

  • увеличение громкости при привязке - это всего лишь одна команда для увеличения громкости с помощью pactl (без какого-либо скрипта bash, просто команда exec pactl в конфигурационном файле i3, такая же, как команда в операторе if выше)
  • выполнение только вышеуказанного скрипта bash с терминала
  • выполнять все вместе, но когда current_volume_pc жестко запрограммировано на некоторое значение

Таким образом, все указывает на проблему с получением текущего значения громкости, когда скрипт выполняется с помощью действия с привязкой клавиш, но я понятия не имею, как это исправить. Также нет сообщений об ошибках от i3, и моя ОС — Ubuntu 20.04, если эта информация будет кому-то полезна. Я также пробовал некоторые другие способы синтаксиса привязки, но результат всегда один и тот же, и приведенный выше синтаксис кажется мне наиболее логичным.

Я также нашел Reddit с подобным вопросом здесь: https://www.reddit.com/r/i3wm/comments/dens5j/limiting_pulseaudio_max_volume/, но я не понимаю, что происходит в файле dikduk, и я думаю, что мне лучше найти помощь в решении моей проблемы, чем копировать чье-то решение

Рейтинг:1
флаг in

Я нашел проблему. Это было вызвано моим системным языком - я из Польши, поэтому я установил польский язык в качестве своего системного языка, но я изменил язык терминала в .bashrc на английский, потому что он более удобен.

В моем случае, когда я выполнил свой скрипт bash прямо из терминала, я получил результат список пактов на английском (я полагаю, из-за смены языка .bashrc), так что все работало нормально. Но когда я выполнил скрипт с помощью привязки клавиш, результат, который я получил от приведенной выше команды, был на польском языке, поэтому grep не смог найти слово «Громкость». Я помещаю правильный скрипт bash, который работает как при вызове с терминала, так и при привязке клавиш ниже, если у кого-то возникла аналогичная проблема.

#!/бин/баш
max_volume_pc=$1
current_volume_pc=$(pactl list sins | grep '<Ваше системное слово, означающее "том">' | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e s,.* \ ([0-9][0-9]*\)%.*,\1,')

если (($(echo -n $current_volume_pc | wc -m) == 0)); тогда
    current_volume_pc=$(список пактов | grep '^[[:space:]]Volume:' | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e s,.* \( [0-9][0-9]*\)%.*,\1,')
фи

если (($current_volume_pc < $max_volume_pc-10)) ; тогда
    pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
еще
    a=$(($max_volume_pc - $current_volume_pc))
    pactl set-sink-volume @DEFAULT_SINK@ +$a% && $refresh_i3status
фи
pa4080 avatar
флаг cn
Вы можете установить локаль, добавив [`export LC_ALL=C`](https://unix.stackexchange.com/q/87745/201297) в начале скрипта (сразу после shebang *#!/bin/bash *), чтобы сделать его независимым от языка.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.