Как я могу изменить громкость с меньшими приращениями?

53

Когда я нажимаю клавиши увеличения / уменьшения громкости на клавиатуре, громкость меняется слишком сильно. Как я могу сделать размер шага меньше, чтобы у меня был более точный контроль?

ændrük
источник

Ответы:

12

11,10 / 12,04

Из этого сообщения об ошибке видно, что клавиша регулировки громкости исчезла в 11.10 и еще не появилась (пока).

Таким образом, нет простого изменения конфигурации, которое вы можете сделать, чтобы уменьшить шаг громкости.

Пост №18 в ссылке дает интересный обходной путь, который включает использование возможности alsamixerувеличения и уменьшения вместе с отправкой уведомлений на рабочий стол.

Однако я не мог заставить его работать - таким образом, мое решение основано на этом посте.

При использовании этого решения шаг по умолчанию будет сокращен до двух процентов.


Как

Установите xbindkeysпакет (используя Synaptic или с помощью sudo apt-get install xbindkeys).

Используя ваш любимый текстовый редактор, создайте файл в вашей домашней папке с именем .volumeHack.shи скопируйте и вставьте содержимое ниже в этот файл, т.е.

gedit ~/.volumeHack.sh

Запустите, chmod a+x .volumeHack.shчтобы сделать его исполняемым.

Затем отредактируйте файл ~/.xbindkeysrcи скопируйте и вставьте текст внизу этого файла. т.е.

gedit ~/.xbindkeysrc

Выйти и войти

.xbindkeysrc

# Increase volume
#"amixer set Master playback 1+"
"sh ~/.volumeHack.sh -c up -i 2% -m Master"
    m:0x0 + c:123
    XF86AudioRaiseVolume

# Decrease volume
"sh ~/.volumeHack.sh -c down -i 2% -m Master"
    m:0x0 + c:122
    XF86AudioLowerVolume

# Toggle mute - this is not used here
#"amixer set Master toggle"
# m:0x0 + c:121
# XF86AudioMute

.volumeHack.sh

#!/bin/sh

usage="usage: $0 -c {up|down|mute} [-i increment] [-m mixer]"
command=
increment=5%
mixer=Master

while getopts c:i:m:h o
do case "$o" in
    c) command=$OPTARG;;
    i) increment=$OPTARG;;
    m) mixer=$OPTARG;;
    h) echo "$usage"; exit 0;;
    ?) echo "$usage"; exit 0;;
esac
done

#echo "command:$command"
#echo "increment:$increment"
#echo "mixer:$mixer"

if [ "$command" = "" ]; then
    shift $(($OPTIND - 1))
    command=$1
    exit 0;
fi

if [ "$command" = "" ]; then
    echo "usage: $0 {up|down|mute} [increment]"
    exit 0;
fi

display_volume=0

if [ "$command" = "up" ]; then
    display_volume=$(amixer set $mixer $increment+ unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1)
fi

if [ "$command" = "down" ]; then
    display_volume=$(amixer set $mixer $increment- unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1)
fi

icon_name=""

if [ "$command" = "mute" ]; then
    if amixer get Master | grep "\[on\]"; then
        display_volume=0
        icon_name="notification-audio-volume-muted"
        amixer set $mixer mute
    else
        display_volume=$(amixer set $mixer unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1)
    fi
fi

if [ "$icon_name" = "" ]; then
    if [ "$display_volume" = "0" ]; then
        icon_name="notification-audio-volume-off"
    else
        if [ "$display_volume" -lt "33" ]; then
            icon_name="notification-audio-volume-low"
        else
            if [ "$display_volume" -lt "67" ]; then
                icon_name="notification-audio-volume-medium"
            else
                icon_name="notification-audio-volume-high"
            fi
        fi
    fi
fi
notify-send " " -i $icon_name -h int:value:$display_volume -h string:synchronous:volume

#echo "icon: $icon_name and $display_volume"
свобода ископаемых
источник
Ответ delty сработал для меня, как только я отключил горячие клавиши gnome для увеличения / уменьшения громкости. Это предупреждение от xbindkeys было ключом, который мне был нужен: *** Предупреждение *** Пожалуйста, убедитесь, что не запущена другая программа, которая захватывает один из ключей, захваченных xbindkeys. Кажется, что есть конфликт, и xbindkeys не может захватить все ключи, определенные в его файле конфигурации.
1
Напомним, что виновником является нежелание разработчиков Gnome предоставить прагматичное решение: bugzilla.gnome.org/show_bug.cgi?id=650371
Якуб Котовски,
17

Ubuntu 14.04 / 15.04 / 15.10 / 16.04 / 16.10 / 17.04

Наконец-то у меня есть подходящее решение для пользователей Trusty, Vivid, Wily, Xenial, Yakkety и Zesty. Вместо того чтобы использовать кучу хаков или скриптов, я решил исправить проблему в исходном коде. Я применил этот патч к gnome-settings-daemonУстановите gnome-settings-daemon и unity-settings-daemonУстановить Демон-настройки-Демон (в него были внесены некоторые тривиальные изменения).

Я загрузил пакеты в PPA:

ppa: george-edison55 / gnome-settings-daemonЛоготип панели запуска ( нажмите здесь для получения инструкций по использованию PPA. )

Как только вы добавили PPA, запустите:

sudo apt-get update
sudo apt-get upgrade

Вам нужно будет перезагрузить компьютер после завершения установки. После того , как пакеты были обновлены, вы можете использовать в dconfкомандуЗначок Manpage , чтобы изменить приращение громкости:

dconf write /org/gnome/settings-daemon/plugins/sound/volume-step 2

(Значение по умолчанию - 6.)

Теперь, когда вы нажимаете клавиши регулировки громкости, громкость будет меняться с шагом 2:

введите описание изображения здесь

Натан Осман
источник
3
Будет ли этот ppa оставаться в курсе вышестоящего gnome / unity-settings-daemon в будущем?
starbeamrainbowlabs
1
@starbeamrainbowlabs да, я надеюсь остаться на вершине этого.
Натан Осман
1
Спасибо! Просто хотел проверить. Я переключусь на использование вашего ppa, пока он не объединится с основным ppa (при условии, что это когда-нибудь произойдет).
starbeamrainbowlabs
1
@NathanOsman, есть ли шанс, что вы тоже можете исправить и запаковать mate-settings-daemon? Буду вечно благодарен :-)
Алекс Грин
3
@AlexGrin хорошая новость - MATE уже поддерживает это из коробки. Вам просто нужно использовать другую команду для изменения значения приращения: dconf write /org/mate/settings-daemon/plugins/media-keys/volume-step <NUM>где <NUM>новое значение. Я только что проверил это на MATE 16.04.
Натан Осман
11

10,04 / 10,10 / 11,04

Я только что обнаружил, что gconf-editorимеет параметр «Шаг громкости в процентах от объема»:

/apps/gnome_settings_daemon/volume_step

Гораздо более элегантный, и он работает с уведомлениями громкости OSD.

ændrük
источник
10

Это простое решение работает (по крайней мере) 12.04 и не требует CCSM.

У вас не будет действия на панели громкости при использовании сочетаний клавиш, но вы будете иметь как угодно мелкозернистый регулятор громкости, как хотите.

  1. Настройки системы> Клавиатура> вкладка «Ярлыки»> категория «Звук и мультимедиа»

  2. Отключите существующие ярлыки «Уменьшение громкости» и «Увеличение громкости». Для этого щелкните каждый раз, чтобы выбрать его, а затем нажмите клавишу «Backspace», чтобы очистить любую комбинацию клавиш, связанную с ним.

  3. Теперь выберите категорию «Пользовательские ярлыки» и щелкните значок «+», чтобы создать два новых ярлыка следующим образом:

    Название: Volume Up 
    Команда: amixer set Master 3% +
    Название: Volume Down 
    Команда: amixer set Master 3% -

    (Поэкспериментируйте с процентами. Если вам нужно идти очень хорошо, опустите знак%, и он будет использовать шкалу 0-255 вместо процентов).

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

После этого, когда вы используете регуляторы громкости клавиатуры, у вас должно быть любое увеличение громкости, которое вы указали. Вы всегда можете вернуться к исходному поведению, отключив пользовательские ярлыки и повторно включив предварительно созданные в категории «Звук и мультимедиа».

cdaddr
источник
Это работало из командной строки и из моих сопоставлений клавиш вчера, но после перезагрузки, не влияет ни на командную строку, ни на сопоставление клавиш.
ГленПетерсон
8

Стоит отметить , что на Ubuntu 17.10, уже есть (хотя и несколько запутанных) вида поддержки для этого. Нажмите Shift+ XF86AudioRaiseVolume(или XF86AudioLowerVolume), чтобы изменить громкость с меньшим шагом.

введите описание изображения здесь

Нонни Лось
источник
Это было так здорово в GNOME, и я очень скучаю по Корице. :( (Пришлось переключаться, потому что GNOME терял память как сумасшедшая для меня, gnome-shell использовал максимум 6 ГБ ОЗУ.)
Per Lundberg
@PerLundberg Интересно. Я действительно не испытал побочных эффектов от утечки памяти.
Нонни Мус
Как часто вы перезагружаетесь? Я оставляю свою машину включенной в течение одной недели или более, когда проблема действительно ускоряется.
По Лундбергу
@PerLundberg LOL раз в ночь. Имеет смысл сейчас XD
Нонни Мус
1
Ага, понятно Я использую Linux на работе, поэтому обычно никогда не выключаю машину, за исключением случаев, когда это необходимо. Уложите его вечером, восстановите на следующее утро.
За Лундберг
5

Вы можете сделать это с помощью CompizConfig Settings Manager. Используйте команду, sudo apt-get install compizconfig-settings-manager если вы ее еще не установили.

Теперь откройте диспетчер параметров CompizConfig и перейдите к пункту « Команды» в разделе « Общие ». Установите флажок Включить команды справа. На вкладке « Команды » введите следующие две команды отдельно в виде двух команд:

amixer set Master 5%+ -q

amixer set Master 5%- -q

Назначьте две комбинации клавиш для команд на вкладке « Привязки клавиш ». Я использую комбинацию Super + [и Super +]. Теперь закройте Менеджер настроек CompizConfig, и это должно работать.

Я не уверен, что вы можете назначить команды встроенным контроллерам громкости компьютера.

thameera
источник
1
Нужен ли amixer Compiz?
Таккат
Вы можете сделать это, используя сочетания клавиш в настройках тоже. В любом случае, в диспетчере Compiz есть больше опций, в том числе назначение событий кликов и т. Д.
thameera
2
Команда amixerзамечательная, но вам не нужно инструктировать читателей устанавливать CompizConfig Settings Manager.
rndrük
2
Сначала это работало для меня, но хороший результат не был стабильным. По непонятной причине моя система 12.04 вернулась к своему первоначальному поведению с слишком большими приращениями громкости, хотя мои новые настройки все еще были установлены и включены в CCSM. Я также попытался удалить и воссоздать их безрезультатно. Я нашел другой 12.04-дружественный способ сделать это и опубликую это как другой ответ.
cdaddr
3

12.04 (и, возможно, 11.10)

Если вы хотите напрямую управлять громкостью импульса, а не идти по маршруту ALSA, вы можете использовать следующий скрипт. Хотя также должно быть возможно управлять громкостью через DBUS, как подробно описано в этом ответе Stackoverflow , я, однако, не смог найти способ сделать это в Ubuntu 12.04.

Как сказано в самом скрипте, он использует этот ответ Stackoverflow о том, как программно изменить громкость в Ubuntu, и расширяет идею в сценарий, который принимает изменение громкости в качестве аргумента командной строки, а также показывает уведомление OSD. Я попытался смоделировать его как можно ближе к поведению Ubuntu по умолчанию (12.04).

Сценарий воспринимает изменения громкости как абсолютное или относительное число или процентное значение. Так, например:

  • pavol.sh 2000 устанавливает громкость на 2000,
  • pavol.sh 30% устанавливает громкость на 30 процентов,
  • pavol.sh +1000 увеличивает громкость на 1000 и
  • pavol.sh -5% уменьшает громкость на 5 процентов.

Это также весьма подробно прокомментировано в надежде, что это полезно для дальнейшей настройки.

Как

Используйте ваш любимый текстовый редактор, чтобы создать файл в вашей домашней папке (или где-то еще - просто запомните путь) pavol.shи скопировать и вставить содержимое ниже в этот файл, т.е.

gedit ~/pavol.sh

Запустите, chmod a+x ~/pavol.shчтобы сделать его исполняемым.

Затем откройте Sytem Settings, зайдите в Keyboardнастройки и переключитесь на Shortcutsвкладку. Там нажмите Custom Shortcutsи создайте два новых сочетания клавиш с кнопкой плюс.

Дайте каждому имя и в качестве команды введите что-то вроде этого: /home/username/pavol.sh "+3%"важно ввести полный путь к pavol.shсценарию (если сценарий не находится в папке, включенной в переменную среды PATH). Также используйте кавычки ""вокруг значения громкости, иначе сочетание клавиш не будет работать.

После этого нажмите на правой стороне каждой записи, чтобы установить комбинацию клавиш или мультимедийную клавишу. Если нужная комбинация или клавиша уже назначены другому ярлыку, программа спросит, хотите ли вы переназначить его.

pavol.sh

#!/bin/bash --

## This script expands upon this answer on stackoverflow:
## https://stackoverflow.com/a/10739764
##



## GLOBAL VARIABLES

# restrict usable commands
PATH="/bin:/usr/bin"

# this script changes the volume of the default sink (as set, for instance, via the Ubuntu sound menu);
# use "pactl info" to display these settings neatly in a terminal
DEFAULT_SINK=$(pacmd dump | grep 'set-default-sink' | cut -d ' ' -f 2)

# get max. volume from the DEFAULT_SINK
MAX_VOL=$(pacmd list-sinks | grep -A 20 "name: <${DEFAULT_SINK}>" | grep "volume steps:" | tr -d '[:space:]' | cut -d ':' -f 2)

# show debug messages?
# 0 means no debug messages; 1 prints the current volume to the console at the end of the script; 2 switches on bash debugging via "set -x"
DEBUG=0



## FUNCTIONS

# generate trace output if DEBUG is 2 or higher
if [ ${DEBUG} -gt 1 ]; then set -x; fi

# use poor man's return buffer via this variable (This is not stackable!)
RETVAL=""


# print simple usage text to console
show_usage() {
    echo "Usage: $(basename ${0}) [+|-][number|percentage]"
}


# return (via RETVAL) the current pulseaudio volume as hexadecimal value
get_cur_vol() {
    RETVAL=$(pacmd dump | grep "set-sink-volume ${DEFAULT_SINK}" | cut -d ' ' -f 3)
}


# change the pulseaudio volume as set in the first parameter variable, i.e. ${1};
# this can either be an absolute percentage or normal value, for instance 20% or 2000,
# or a relative percentage or normal value, for instance +3% or -5% or +200 or -1000
change_vol() {
    step=${1}

    relative=${step:0:1} # extract first character
    percent=${step: -1}  # extract last character

    # cut off first character for easier calculations, if it is either a "+" or "-"
    if [ "${relative}" = "+" -o "${relative}" = "-" ]; then step=${step:1}; fi

    # if the last character of ${step} was, in fact, a percent sign...
    if [ "${percent}" = "%" ]; then
        step=${step:0:-1}        # cut off last character for easier calculations
        step=$[step*MAX_VOL/100] # change percentage into fixed value via MAX_VOL
    fi

    # save current volume in ${old_vol}
    get_cur_vol
    old_vol=$[RETVAL+0] # the dummy calculation turns the hexadecimal number to a decimal one

    # calculate the new volume value ${new_vol} with the operand that was extracted earlier
    if [ "${relative}" = "+" ]; then
        new_vol=$[old_vol+step]
    else
        if [ "${relative}" = "-" ]; then
            new_vol=$[old_vol-step]
        else
            # no operand found, so ${step} must be an absolute value
            new_vol=${step}
        fi
    fi

    # check boundaries - don't go below 0 and above MAX_VOL
    if [ ${new_vol} -lt 0 ]; then new_vol=0; fi
    if [ ${new_vol} -gt ${MAX_VOL} ]; then new_vol=${MAX_VOL}; fi

    # set the new volume
    pactl -- set-sink-volume "${DEFAULT_SINK}" "${new_vol}"

    # mute the sink if the new volume drops to 0 ...
    if [ ${new_vol} -le 0 ]; then
        pactl -- set-sink-mute "${DEFAULT_SINK}" yes
    else
        # ... or unmute the sink if the new volume is greater than the old
        if [ ${new_vol} -gt ${old_vol} ]; then
            pactl -- set-sink-mute "${DEFAULT_SINK}" no
        fi
    fi
}


# show an OSD notification
notify_osd() {
    # get current volume
    get_cur_vol
    cur_vol_percent=$[RETVAL*100/MAX_VOL]

    # get mute state (gives "yes" or "no")
    muted=$(pacmd dump | grep "set-sink-mute ${DEFAULT_SINK}" | cut -d ' ' -f 3)

    # choose suitable icon (modeled after the default Ubuntu 12.04 behavior):
    # muted-icon if volume is muted
    if [ "${muted}" = "yes" ]; then
        icon="notification-audio-volume-muted"
    else
        # icon with loudspeaker and 1 of the 3 circle segments filled if volume is less than 34%
        if [ ${cur_vol_percent} -lt 34 ]; then
            icon="notification-audio-volume-low"
        else
            # icon with loudspeaker and 2 of the 3 circle segments filled if volume is between 34% and 66%
            if [ ${cur_vol_percent} -lt 67 ]; then
                icon="notification-audio-volume-medium"
            else
                # icon with loudspeaker and all 3 of the 3 circle segments filled if volume is higher than 66%
                icon="notification-audio-volume-high"
            fi
        fi
    fi

    # show notification
    notify-send "Volume" -i ${icon} -h int:value:${cur_vol_percent} -h string:synchronous:volume
}


# fake main function, that gets called first and kicks off all the other functions
main() {
    # only change volume if input is a number with either a +/- prefix and/or a % suffix
    if [[ "${1}" =~ ^[+-]?[0-9]+[%]?$ ]]; then
        change_vol ${1}
    else
        show_usage
    fi

    # show volume osd
    notify_osd

    # show the new - now current - volume in hexadecimal, decimal and percentage if DEBUG is greater than 0
    if [ ${DEBUG} -gt 0 ]; then
        get_cur_vol
        echo "${RETVAL} - $[RETVAL+0] - $[RETVAL*100/MAX_VOL]%"
    fi
}



## REAL MAIN

# run the fake main function and pass on all command line arguments; then exit the script
main ${@}
exit 0
Kuro
источник
это работает хорошо, за исключением того, что он накапливает уведомление-отправку OSD при использовании gnome-shell. Каждое нажатие добавляет новое OSD, а предыдущее не исчезает. OSD это хорошо, но не важно для меня. Я попытался закомментировать уведомление о показе OSD, но это сломало сценарий для меня.
Кендор
Извините @kendor, что это не сработало для вас. Я только протестировал это с Unity. Вы пробовали работать из комментария в этом отчете об ошибке: https://bugzilla.redhat.com/show_bug.cgi?id=693207#c3 ? Просто добавьте --hint=int:transient:1перед "Volume"строкой с командой notify-send (должна быть строка номер 130). Может быть, это поможет.
Куро
2

Кубунту 17.04

Отредактируйте файл, main.xmlобычно находящийся по адресу: /usr/share/plasma/plasmoids/org.kde.plasma.volume/contents/config/main.xmlкак root.

Найдите запись volumeStep:

<entry name="volumeStep" type="Int">
  <default>2</default>
</entry>

и измените процент за шаг на то, что вы хотите. Я использую 2%, как вы можете видеть.

Как написано в Kubuntu 16.04, вам нужно перезапустить Plasma, чтобы это вступило в силу:

killall plasmashell #to stop it
kstart plasmashell #to restart it
Bas
источник
0

Кубунту 16.04

Я обновил с 14.04, который имел основной уровень громкости, а также отдельные входные и выходные источники, и шаг увеличения / уменьшения 3% (который позже изменился на 5%). Мне удалось сохранить его на уровне 2% и 3%, просто отрегулировав уровни громкости выходного источника, чтобы компенсировать шаги основного громкости.

Естественно, я был немного раздражен, когда 16.04 поднял это значение до 6% и удалил основной регулятор громкости, вместо этого кнопки громкости управляют обоими источниками вывода.

Вышеупомянутое исправление для Ubuntu 16.04 не работает с интерфейсом Plasma 5, используемым в KDE5, поэтому не будет работать для Kubuntu 16.04 - я пытался, и он не работает.

Итак, я быстро проверил онлайн, и процесс требует ручного изменения файла, но это довольно просто.

Отредактируйте файл, ListItemBase.qmlобычно находящийся в/usr/share/plasma/plasmoids/org.kde.plasma.volume/contents/ui/ListItemBase.qml качестве пользователя root.

Там есть пара линий внутри функций increaseVolumeи decreaseVolumeкоторые определяют шаг путем деления максимальной громкости на 15. Они выглядят как:

var step = slider.maximumValue / 15;

Чем выше число, тем меньше шаги. Если бы это было 1, объем был бы или 0% или 100%, но если бы это было 100, объем увеличился бы шагами на 1%.

Лично я нацелился на 2%, поэтому я изменил обе эти строки на

var step = slider.maximumValue / 50;

Кредит идет на этот Reddit: https://www.reddit.com/r/kde/comments/3t1xr0/how_to_change_the_volume_increment_step_size_for/

Тем не менее, вам нужно будет перезапустить Plasma, чтобы это вступило в силу:

killall plasmashell #to stop it
kstart plasmashell #to restart it

Надеюсь, это поможет кому-то, или, может быть, даже приведет к тому, что кто-то отправит изменение в Plasma, чтобы заставить этот конфиг управляться ... оба могут оказаться мной после другого обновления.

SEoF
источник