Відповіді:
З цього звіту про помилку, схоже, ключ з кроком гучності зник у 11.10 і ще не з'явився (поки що).
Таким чином, не існує простої прямої зміни конфігурації, яку ви можете зробити, щоб зменшити крок гучності.
Пост №18 у посиланні дає цікаве вирішення, яке передбачає використання можливостей alsamixer
збільшення та зменшення, а також надсилання повідомлень на робочий стіл.
Однак я не міг змусити його працювати - тому моє прийняття рішення базується на цій посаді.
За допомогою цього рішення крок гучності за замовчуванням буде зменшено до двох відсотків.
Встановіть xbindkeys
пакет (за допомогою Synaptic або за допомогою sudo apt-get install xbindkeys
).
Використовуючи улюблений текстовий редактор, створіть файл у своїй домашній папці під назвою .volumeHack.sh
та скопіюйте та вставте вміст нижче у цей файл, тобто
gedit ~/.volumeHack.sh
Запустіть, chmod a+x .volumeHack.sh
щоб зробити його виконуваним.
Потім відредагуйте файл ~/.xbindkeysrc
та скопіюйте та вставте текст внизу цього файлу. тобто
gedit ~/.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
#!/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"
Зрештою, у мене є правильне рішення для користувачів Trusty, Vivid, Wily, Xenial, Yakkety та Zesty. Замість того, щоб використовувати купу хаків чи сценарію, я вирішив виправити проблему у вихідному коді. Я застосував цей патч до gnome-settings-daemon та Unіg-settings-daemon (до патчу були внесені деякі тривіальні модифікації).
Я завантажив пакети в PPA:
ppa: george-edison55 / gnome-settings-daemon ( Клацніть тут, щоб отримати інструкції щодо використання PPA. )
Після додавання PPA запустіть:
sudo apt-get update
sudo apt-get upgrade
Вам потрібно буде перезапустити після завершення інсталяції. Після того , як пакунки буде оновлено, ви можете використовувати в dconf
команду , щоб змінити приріст гучності:
dconf write /org/gnome/settings-daemon/plugins/sound/volume-step 2
(Значення за замовчуванням - 6.)
Тепер, коли ви натискаєте клавіші гучності, гучність змінюватиметься з кроком 2:
mate-settings-daemon
? Я був би вічно вдячний :-)
dconf write /org/mate/settings-daemon/plugins/media-keys/volume-step <NUM>
де <NUM>
нове значення. Я щойно тестував це MATE 16.04.
При використанні комбінацій клавіш на екрані у вас не буде діяти на екрані панелі гучності, але ви матимете тонкий контроль гучності за вашим бажанням.
Налаштування системи> Клавіатура> вкладка "Ярлики"> "Звук і медіа"
Вимкніть наявні ярлики "Зменшення гучності" та "Збільшення гучності". Для цього на кожному клацанні клавіші виберіть його, а потім натисніть Backspace, щоб очистити будь-яку клавішну комбінацію, пов'язану з ним.
Тепер виберіть категорію "Спеціальні ярлики" та натисніть піктограму "+", щоб створити дві нові ярлики наступним чином:
Ім'я:
Команда збільшення гучності : набір змішувачів Master 3% +
Ім'я:
Команда зменшення гучності : набір змішувачів Master 3% -
(Експериментуйте з відсотками. Якщо вам потрібно вкрай добре, тоді опустіть знак%, і він використовуватиме шкалу 0-255, а не відсоток).
Тепер призначте кожен ваш новий ярлик клавіші або комбінації клавіш: Виберіть ярлик і введіть потрібну клавішу або клавіші на клавіатурі.
Після цього, використовуючи елементи керування гучністю на клавіатурі, ви повинні мати різницю збільшення гучності, яку ви вказали. Ви завжди можете повернутися до початкової поведінки, відключивши власні ярлики та повторно включивши попередньо створені в категорії "Звук та медіа".
Варто відзначити , що в Ubuntu 17.10, вже є (хоча і дещо заплутані) вид підтримки для цього. Натисніть Shift+ XF86AudioRaiseVolume(або XF86AudioLowerVolume), щоб змінити гучність з меншим розміром кроку.
Це можна зробити за допомогою менеджера налаштувань CompizConfig. Використовуйте команду,
sudo apt-get install compizconfig-settings-manager
якщо ви її ще не встановили.
Тепер відкрийте диспетчер налаштувань CompizConfig і перейдіть до команд у розділі Загальні . Поставте прапорець Увімкнути команди праворуч. На вкладці Команди введіть наступні дві команди окремо як дві команди:
amixer set Master 5%+ -q
amixer set Master 5%- -q
Призначте дві комбінації клавіш для команд на вкладці Прив’язка клавіш . Я використовую комбінації Super + [і Super +]. Тепер закрийте диспетчер налаштувань CompizConfig, і це має працювати.
Я не впевнений, чи можете ви призначити команди вбудованим контролером гучності комп'ютера.
amixer
Команда чудово, але немає ніякої необхідності для вас , щоб проінструктувати читачів встановити CompizConfig Settings Manager.
Якщо ви хочете безпосередньо керувати гучністю імпульсного аудіо, а не йти маршрутом 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). Також використовуйте знаки лапок ""
навколо значення гучності, або комбінація клавіш не працюватиме.
Після цього натисніть праворуч кожного запису, щоб встановити комбінацію клавіш або мультимедійну клавішу. Якщо потрібна комбінація або клавіша вже призначена для іншого ярлика, програма запитає, чи хочете ви її призначити повторно.
#!/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
--hint=int:transient:1
до "Volume"
цього рядка команду notify-send (має бути рядок 130). Можливо, це допомагає.
Відредагуйте файл, який 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, вам потрібно буде перезапустити Плазму, щоб це вступило в силу:
killall plasmashell #to stop it
kstart plasmashell #to restart it
Я модернізував з 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
Сподіваємось, це допоможе комусь вийти, або, можливо, навіть призведе до того, що хтось подає зміни в Плазмі, щоб зробити цей конфігурацію керованим ... і те, і інше може стати мені після іншого оновлення.