Jak mogę zmieniać głośność w mniejszych krokach?

53

Kiedy naciskam klawisze zwiększania / zmniejszania głośności na klawiaturze, głośność zmienia się zbyt mocno. Jak mogę zmniejszyć rozmiar kroku, aby mieć lepszą kontrolę?

ændrük
źródło

Odpowiedzi:

12

11.10 / 12.04

Z tego raportu błędów wynika, że klawisz zmiany głośności zniknął w 11.10 i nie pojawił się (jak dotąd).

Dlatego nie ma prostej, prostej zmiany konfiguracji, którą można wprowadzić w celu zmniejszenia kroku głośności.

Link nr 18 w linku daje ciekawe obejście, które polega na użyciu funkcji alsamixerzwiększania i zmniejszania wraz z wysyłaniem powiadomień na pulpit.

Nie udało mi się jednak uruchomić - dlatego moje podejście do rozwiązania oparte jest na tym poście.

Dzięki temu rozwiązaniu domyślny krok głośności zostanie zmniejszony do dwóch procent.


Jak

Zainstaluj xbindkeyspakiet (używając Synaptic lub za pomocą sudo apt-get install xbindkeys).

Za pomocą swojego ulubionego edytora tekstu utwórz plik w folderze domowym o nazwie, .volumeHack.sha następnie skopiuj i wklej zawartość poniżej do tego pliku, tj

gedit ~/.volumeHack.sh

Uruchom, chmod a+x .volumeHack.shaby był wykonywalny.

Następnie edytuj plik, ~/.xbindkeysrca następnie skopiuj i wklej poniższy tekst na dole tego pliku. to znaczy

gedit ~/.xbindkeysrc

Wyloguj się i zaloguj

.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"
fossfreedom
źródło
Odpowiedź delty zadziałała, kiedy wyłączyłem skróty klawiaturowe gnome do zwiększania / zmniejszania głośności. To ostrzeżenie od xbindkeys było wskazówką, której potrzebowałem: *** Ostrzeżenie *** Sprawdź, czy nie działa inny program, który przechwytuje jeden z kluczy przechwyconych przez xbindkeys. Wygląda na to, że występuje konflikt i xbindkeys nie może pobrać wszystkich kluczy zdefiniowanych w pliku konfiguracyjnym.
1
Dla przypomnienia, winowajcą jest niechęć programistów Gnome do zapewnienia pragmatycznego rozwiązania: bugzilla.gnome.org/show_bug.cgi?id=650371
Jakub Kotowski
17

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

W końcu mam odpowiednie rozwiązanie dla użytkowników Trusty, Vivid, Wily, Xenial, Yakkety i Zesty. Zamiast używać kilku hacków lub skryptu, postanowiłem naprawić problem w kodzie źródłowym. Zastosowałem tę łatkę do gnome-settings-daemonZainstaluj gnome-settings-daemon i unity-settings-daemonZainstaluj demona ustawień jedności (wprowadzono kilka trywialnych modyfikacji w łatce).

Przesłałem pakiety do PPA:

ppa: george-edison55 / gnome-settings-daemonLogo Launchpad ( Kliknij tutaj, aby uzyskać instrukcje dotyczące korzystania z PPA. )

Po dodaniu PPA uruchom:

sudo apt-get update
sudo apt-get upgrade

Musisz zrestartować po zakończeniu instalacji. Kiedy pakiety zostały zmodernizowane, można skorzystać z dconfpoleceniaIkona strony , aby zmienić przyrost głośności:

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

(Wartość domyślna to 6.)

Teraz, gdy naciśniesz klawisze głośności, głośność będzie się zmieniać w krokach co 2:

wprowadź opis zdjęcia tutaj

Nathan Osman
źródło
3
Czy ten ppa będzie na bieżąco z upstreamem gnome / unity-settings-daemon w przyszłości?
starbeamrainbowlabs,
1
@starbeamrainbowlabs tak, mam nadzieję pozostać na szczycie.
Nathan Osman,
1
Dzięki! Chciałem tylko sprawdzić. Przejdę na używanie twojego PPA, dopóki nie zostanie scalony z głównym PPA (zakładając, że kiedykolwiek się zdarzy).
starbeamrainbowlabs,
1
@NathanOsman jest szansa, że ​​możesz również załatać i spakować mate-settings-daemon? Byłbym wiecznie wdzięczny :-)
Alex Grin
3
@AlexGrin dobra wiadomość - MATE już teraz obsługuje to urządzenie po wyjęciu z pudełka. Musisz tylko użyć innego polecenia, aby zmienić wartość przyrostu: dconf write /org/mate/settings-daemon/plugins/media-keys/volume-step <NUM>gdzie <NUM>jest nowa wartość. Właśnie przetestowałem to na MATE 16.04.
Nathan Osman,
11

10.04 / 10.10 / 11.04

Właśnie odkryłem, że gconf-editorma ustawienie „Krok głośności jako procent objętości”:

/apps/gnome_settings_daemon/volume_step

Znacznie bardziej elegancki i działa z powiadomieniami woluminu OSD.

ændrük
źródło
10

To łatwe rozwiązanie działa (przynajmniej) 12.04 i nie wymaga CCSM.

Podczas korzystania ze skrótów klawiaturowych nie będziesz mieć akcji paska głośności na ekranie, ale będziesz mieć precyzyjną regulację głośności, jak chcesz.

  1. Ustawienia systemowe> Klawiatura> karta „Skróty”> kategoria „Dźwięk i multimedia”

  2. Wyłącz istniejące skróty „Zmniejsz głośność” i „Zwiększ głośność”. Aby to zrobić, kliknij jedno kliknięcie, aby je zaznaczyć, a następnie naciśnij klawisz Backspace, aby wyczyścić dowolną powiązaną kombinację klawiszy.

  3. Teraz wybierz kategorię „Niestandardowe skróty” i kliknij ikonę „+”, aby utworzyć dwa nowe skróty w następujący sposób:

    Nazwa: 
    Zwiększenie głośności Polecenie: amixer set Master 3% +
    Nazwa: 
    Zmniejszenie głośności Polecenie: amixer set Master 3% -

    (Eksperymentuj z wartościami procentowymi. Jeśli musisz iść bardzo dobrze, pomiń znak%, a użyje on skali 0–255 zamiast wartości procentowej).

  4. Teraz przypisz każdy nowy skrót do klawisza lub kombinacji klawiszy: Wybierz skrót i wpisz żądany klawisz lub klawisze na klawiaturze.

Następnie, kiedy używasz regulacji głośności klawiatury, powinieneś mieć przyrosty głośności określone przez Ciebie. Zawsze możesz wrócić do pierwotnego zachowania, wyłączając niestandardowe skróty i ponownie włączając wstępnie utworzone w kategorii „Dźwięk i multimedia”.

cdaddr
źródło
Działało to z wiersza poleceń i z moich mapowań klawiszy wczoraj, ale po ponownym uruchomieniu komputera, brak efektu w linii poleceń lub mapowaniu klawiszy.
GlenPeterson
8

Warto zauważyć, że w Ubuntu 17.10 istnieje już (choć nieco skomplikowany) rodzaj wsparcia dla tego. Naciśnij Shift+ XF86AudioRaiseVolume(lub XF86AudioLowerVolume), aby zmienić głośność mniejszym krokiem.

wprowadź opis zdjęcia tutaj

Nonny Moose
źródło
To było świetne w GNOME i naprawdę tęsknię za tym w Cinnamon. :( (Musiałem się przełączyć, ponieważ GNOME przeciekało dla mnie jak szaloną pamięć, gnome-shell maksymalnie używał pamięci RAM o pojemności 6 GiB.)
Per Lundberg
@PerLundberg Ciekawe. Tak naprawdę nie doświadczyłem negatywnych skutków wycieku pamięci.
Nonny Moose
Jak często restartujesz? Zostawiam maszynę na tydzień lub dłużej, a wtedy problem naprawdę przyspiesza.
Per Lundberg,
@PerLundberg lol raz na noc. Teraz ma sens XD
Nonny Moose
1
Aha widzę. Pracuję pod Linuksem w pracy, więc zazwyczaj nigdy nie zamykam komputera, chyba że jest to wymagane. Połóż go wieczorem, przywróć następnego ranka.
Per Lundberg,
5

Możesz to zrobić za pomocą CompizConfig Settings Manager. Użyj polecenia, sudo apt-get install compizconfig-settings-manager jeśli jeszcze go nie zainstalowałeś.

Teraz otwórz Menedżera ustawień CompizConfig i przejdź do poleceń w sekcji Ogólne . Zaznacz pole wyboru Włącz polecenia po prawej stronie. Na karcie Polecenia wprowadź osobno następujące dwa polecenia jako dwa polecenia:

amixer set Master 5%+ -q

amixer set Master 5%- -q

Przypisz dwa skróty klawiaturowe dla poleceń na karcie Powiązania klawiszy . Używam kombinacji Super + [i Super +]. Teraz zamknij CompizConfig Settings Manager i to powinno działać.

Nie jestem jednak pewien, czy możesz przypisać polecenia do wbudowanych kontrolerów głośności komputera.

Thameera
źródło
1
Czy amixer potrzebuje Compiz?
Takkat
Możesz to zrobić również za pomocą Skrótów klawiszowych w Preferencjach. W każdym razie ten w Menedżerze Compiz daje więcej opcji, w tym przypisywanie zdarzeń kliknięcia itp.
thameera
2
amixerPolecenia jest wspaniała, ale nie ma potrzeby, aby polecić czytelnikom zainstalować CompizConfig Settings Manager.
ændrük
2
Na początku działało to dla mnie, ale dobry wynik nie był stabilny. Bez żadnego oczywistego powodu mój system 12.04 powrócił do swojego pierwotnego zachowania z przyrostami głośności o wiele za dużymi, mimo że moje nowe ustawienia były nadal ustawione i włączone w CCSM. Próbowałem też usunąć i odtworzyć je bezskutecznie. Znalazłem inny przyjazny dla 12.04 sposób, aby to zrobić i opublikuję to jako kolejną odpowiedź.
cdaddr
3

12.04 (i ewentualnie 11.10)

Jeśli chcesz bezpośrednio kontrolować głośność pulseaudio, zamiast iść drogą ALSA, możesz użyć następującego skryptu. Chociaż powinna być również możliwa kontrola głośności za pomocą DBUS, jak szczegółowo opisano w odpowiedzi Stackoverflow , nie mogłem jednak znaleźć sposobu, aby to działało w Ubuntu 12.04.

Jak powiedziano w samym skrypcie, wykorzystuje on odpowiedź Stackoverflow dotyczącą programowej zmiany głośności w Ubuntu i rozwija pomysł w skrypcie, który przyjmuje zmianę głośności jako argument wiersza poleceń, a także wyświetla powiadomienie OSD. Próbowałem modelować go tak dokładnie, jak to możliwe, do domyślnego zachowania Ubuntu (12.04).

Skrypt przyjmuje zmiany głośności jako wartość bezwzględną lub względną lub wartość procentową. Na przykład:

  • pavol.sh 2000 ustawia głośność na 2000,
  • pavol.sh 30% ustawia głośność na 30 procent,
  • pavol.sh +1000 zwiększa głośność o 1000 i
  • pavol.sh -5% zmniejsza głośność o 5 procent.

Jest również dość swobodnie komentowany w nadziei, że przydaje się on do dalszego ulepszania.

Jak

Użyj ulubionego edytora tekstu, aby utworzyć plik w folderze domowym (lub gdziekolwiek indziej - pamiętaj tylko ścieżkę), pavol.sha następnie skopiuj i wklej zawartość poniżej do tego pliku, tj.

gedit ~/pavol.sh

Uruchom, chmod a+x ~/pavol.shaby był wykonywalny.

Następnie otwórz Sytem Settings, przejdź do Keyboardustawień i przejdź do Shortcutskarty. Tam kliknij Custom Shortcutsi utwórz dwa nowe skróty klawiaturowe za pomocą przycisku plus.

Nadaj każdemu nazwę, a jako polecenie wpisz coś takiego: /home/username/pavol.sh "+3%"Ważne jest, aby wprowadzić pełną ścieżkę do pavol.shskryptu (chyba że skrypt znajduje się w folderze zawartym w zmiennej środowiskowej PATH). Użyj także znaków cudzysłowu ""wokół wartości głośności, w przeciwnym razie skrót klawiaturowy nie będzie działał.

Następnie kliknij prawą stronę każdego wpisu, aby ustawić kombinację klawiszy lub klawisz multimedialny. Jeśli żądana kombinacja lub klawisz jest już przypisany do innego skrótu, program zapyta, czy chcesz go ponownie przypisać.

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
źródło
działa to dobrze, z wyjątkiem gromadzenia OSD powiadomień-wysyłania podczas używania gnome-shell. Każde naciśnięcie dodaje nowy OSD, a poprzedni nie znika. OSD jest fajne, ale nie jest dla mnie niezbędne. Próbowałem skomentować powiadomienie OSD programu, ale to złamało mi skrypt.
Kendor
Przepraszamy @kendor, że to nie zadziałało. Testowałem to tylko z Unity. Czy próbowałeś obejść ten problem z komentarza w tym raporcie o błędzie: https://bugzilla.redhat.com/show_bug.cgi?id=693207#c3 ? Po prostu dodaj --hint=int:transient:1przedtem "Volume"w wierszu za pomocą polecenia powiadom-wyślij (powinna to być linia 130). Może to pomaga.
Kuro
2

Kubuntu 17.04

Edytuj plik main.xmlzwykle znajdujący się w: /usr/share/plasma/plasmoids/org.kde.plasma.volume/contents/config/main.xmljako root.

Poszukaj wpisu volumeStep:

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

i zmień procent na krok na cokolwiek chcesz. Używam 2%, jak widać.

Jak napisano w Kubuntu 16.04, musisz ponownie uruchomić Plazmę, aby to zadziałało:

killall plasmashell #to stop it
kstart plasmashell #to restart it
Bas
źródło
0

Kubuntu 16.04

Uaktualniłem z 14.04, który miał główny poziom głośności, a także poszczególne źródła wejściowe i wyjściowe oraz 3% krok przyrostu / zmniejszenia (który później zmienił się na 5%). Udało mi się utrzymać go na poziomie około 2% i 3%, po prostu dostosowując poziomy głośności źródła wyjściowego, aby skompensować kroki głośności głównej.

Więc naturalnie trochę się zirytowałem, gdy 16.04 podniosło to do 6% i usunąłem główny regulator głośności, zamiast tego przyciski głośności kontrolują oba źródła wyjściowe.

Powyższa poprawka dla Ubuntu 16.04 nie działa z interfejsem Plazmy 5 używanym na KDE5, więc nie będzie działać dla Kubuntu 16.04 - próbowałem i to nie działa.

Zrobiłem więc szybką kontrolę online, a proces wymaga ręcznej zmiany pliku, ale jest to dość proste.

Edytuj plik ListItemBase.qmlzwykle znajdujący się /usr/share/plasma/plasmoids/org.kde.plasma.volume/contents/ui/ListItemBase.qmljako root.

Istnieje kilka linii wewnątrz funkcji increaseVolumei decreaseVolumektóre definiują krok dzieląc maksymalną głośność 15. Wyglądają jak:

var step = slider.maximumValue / 15;

Im wyższa liczba, tym mniejsze kroki. Gdyby to było 1, głośność wynosiłaby 0% lub 100%, ale gdyby było 100, głośność wzrastałaby co 1%.

Osobiście dążyłem do 2%, więc zmieniłem obie te linie na

var step = slider.maximumValue / 50;

Kredyt trafia do tego Reddit: https://www.reddit.com/r/kde/comments/3t1xr0/how_to_change_the_volume_increment_step_size_for/

Aby to zadziałało, musisz jednak ponownie uruchomić Plazmę:

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

Mam nadzieję, że to pomoże komuś wyjść, a może nawet sprawi, że ktoś zgłosi zmianę w Plazmie, aby napędzić tę konfigurację ... oba mogą skończyć jako ja po kolejnej aktualizacji.

SEoF
źródło