Як я можу змінити гучність меншими кроками?


53

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

Відповіді:


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 та Unіg-settings-daemonВстановіть единість-налаштування-демон (до патчу були внесені деякі тривіальні модифікації).

Я завантажив пакети в PPA:

ppa: george-edison55 / gnome-settings-daemonЛоготип Launchpad ( Клацніть тут, щоб отримати інструкції щодо використання 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 / jedinstvo-settings-демон?
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

Набагато елегантніше, і це працює з повідомленнями про обсяг екранного меню.


10

Це просте рішення працює (принаймні) 12,04 і не вимагає CCSM.

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

  1. Налаштування системи> Клавіатура> вкладка "Ярлики"> "Звук і медіа"

  2. Вимкніть наявні ярлики "Зменшення гучності" та "Збільшення гучності". Для цього на кожному клацанні клавіші виберіть його, а потім натисніть Backspace, щоб очистити будь-яку клавішну комбінацію, пов'язану з ним.

  3. Тепер виберіть категорію "Спеціальні ярлики" та натисніть піктограму "+", щоб створити дві нові ярлики наступним чином:

    Ім'я: 
    Команда збільшення гучності : набір змішувачів Master 3% +
    Ім'я: 
    Команда зменшення гучності : набір змішувачів Master 3% -

    (Експериментуйте з відсотками. Якщо вам потрібно вкрай добре, тоді опустіть знак%, і він використовуватиме шкалу 0-255, а не відсоток).

  4. Тепер призначте кожен ваш новий ярлик клавіші або комбінації клавіш: Виберіть ярлик і введіть потрібну клавішу або клавіші на клавіатурі.

Після цього, використовуючи елементи керування гучністю на клавіатурі, ви повинні мати різницю збільшення гучності, яку ви вказали. Ви завжди можете повернутися до початкової поведінки, відключивши власні ярлики та повторно включивши попередньо створені в категорії "Звук та медіа".


Це працювало з командного рядка та з моїх ключових відображень вчора, але після перезавантаження не було ефект ні в командному рядку, ні в відображенні клавіш.
GlenPeterson

8

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

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


Це було так чудово в GNOME, і я дуже сумую за цим у Кориці. :( (Доводилося перемикатися, оскільки GNOME просочував пам'ять, як божевільний для мене, gnome-shell мав до 6 Гб оперативної пам’яті.)
Пер Лундберг

@PerLundberg Цікаво. Я насправді не відчував негативних наслідків від витоку пам'яті.
Nonny Moose

Як часто ви перезавантажуєтесь? Я залишаю свою машину працювати на тиждень і більше, і коли проблема дійсно прискорюється.
Пер Лундберг

@PerLundberg lol один раз на ніч. Має сенс зараз XD
Nonny Moose

1
Ага, бачу. Я запускаю Linux на роботі, тому зазвичай ніколи не вимикаю машину, за винятком випадків, коли це потрібно. Покладіть його спати ввечері, відновіть наступного ранку.
Пер Лундберг

5

Це можна зробити за допомогою менеджера налаштувань CompizConfig. Використовуйте команду, sudo apt-get install compizconfig-settings-manager якщо ви її ще не встановили.

Тепер відкрийте диспетчер налаштувань CompizConfig і перейдіть до команд у розділі Загальні . Поставте прапорець Увімкнути команди праворуч. На вкладці Команди введіть наступні дві команди окремо як дві команди:

amixer set Master 5%+ -q

amixer set Master 5%- -q

Призначте дві комбінації клавіш для команд на вкладці Прив’язка клавіш . Я використовую комбінації Super + [і Super +]. Тепер закрийте диспетчер налаштувань CompizConfig, і це має працювати.

Я не впевнений, чи можете ви призначити команди вбудованим контролером гучності комп'ютера.


1
Чи потрібен аміксер Compiz?
Таккат

Це можна зробити і за допомогою комбінацій клавіш у налаштуваннях. У будь-якому випадку, менеджер Compiz пропонує більше варіантів, включаючи призначення подій кліків тощо
thameera

2
amixerКоманда чудово, але немає ніякої необхідності для вас , щоб проінструктувати читачів встановити CompizConfig Settings Manager.
ændrük

2
Спочатку це працювало для мене, але хороший результат не був стабільним. Без жодної очевидної причини моя система 12.04 повернулася до своєї початкової поведінки із збільшенням обсягу, занадто великим, навіть якщо мої нові налаштування все ще були встановлені та включені в CCSM. Я також спробував їх видалити і створити заново безрезультатно. Я знайшов ще один спосіб, зручний для 12.04, і опублікую це як ще одну відповідь.
cdaddr

3

12.04 (можливо, 11.10)

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

Як сказано в самому сценарії, він використовує цю відповідь Stackoverflow про те, як програмно змінити об'єм в Ubuntu і розширити ідею в сценарій, який приймає зміну гучності як аргумент командного рядка, а також показує повідомлення про екранне меню. Я спробував моделювати його якомога ближче до поведінки 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

це добре працює, за винятком того, що він накопичує сповіщення про надсилання екранного меню при використанні gnome-shell. Кожне натискання додає нове екранне меню, і попереднє не згасає. Екранна екранізація приємна, але для мене не суттєва. Я спробував прокоментувати повідомлення про показ екранного меню, але це порушило сценарій для мене.
Кендор

Вибачте @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.xmlroot.

Шукайте запис volumeStep:

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

і змінити відсоток за крок на все, що завгодно. Я використовую 2%, як ви бачите.

Як написано на Kubuntu 16.04, вам потрібно буде перезапустити Плазму, щоб це вступило в силу:

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

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/

Однак вам потрібно буде перезапустити Плазму, щоб це вступило в силу:

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

Сподіваємось, це допоможе комусь вийти, або, можливо, навіть призведе до того, що хтось подає зміни в Плазмі, щоб зробити цей конфігурацію керованим ... і те, і інше може стати мені після іншого оновлення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.