Come posso modificare il volume con incrementi più piccoli?


53

Quando premo i tasti volume su / giù sulla tastiera, il volume cambia troppo. Come posso ridurre le dimensioni del gradino in modo da avere un controllo più preciso?

Risposte:


12

11.10 / 12.04

Da questo bug report sembra che la chiave del passo del volume sia scomparsa in 11.10 e non sia (ancora) ricomparsa.

Pertanto, non è possibile apportare una semplice modifica alla configurazione per ridurre il volume.

Il post n. 18 nel collegamento offre un'interessante soluzione che prevede l'utilizzo della funzionalità di alsamixerincremento e decremento insieme all'invio di notifiche sul desktop.

Tuttavia non sono riuscito a farlo funzionare, quindi la mia opinione sulla soluzione si basa su quel post.

Con questa soluzione, il passaggio del volume predefinito verrà ridotto a passi del due percento.


Come

Installa il xbindkeyspacchetto (usando Synaptic o con sudo apt-get install xbindkeys).

Usando il tuo editor di testo preferito, crea un file nella tua cartella home chiamato .volumeHack.she copia e incolla il contenuto qui sotto in quel file

gedit ~/.volumeHack.sh

Esegui chmod a+x .volumeHack.shper renderlo eseguibile.

Quindi modifica il file ~/.xbindkeysrce copia e incolla il testo qui sotto in fondo a questo file. vale a dire

gedit ~/.xbindkeysrc

Esci e accedi

.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"

La risposta di delty ha funzionato per me una volta che ho disabilitato le scorciatoie da tastiera di gnome per aumentare / diminuire il volume. Questo avvertimento di xbindkeys era l'indizio di cui avevo bisogno: *** Avvertimento *** Si prega di verificare che non ci sia un altro programma in esecuzione che catturi una delle chiavi catturate da xbindkeys. Sembra che ci sia un conflitto e xbindkeys non può afferrare tutte le chiavi definite nel suo file di configurazione.

1
Per la cronaca, il colpevole è la riluttanza degli sviluppatori di Gnome a fornire una soluzione pragmatica: bugzilla.gnome.org/show_bug.cgi?id=650371
Jakub Kotowski

17

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

Finalmente ho una soluzione adeguata per gli utenti di Trusty, Vivid, Wily, Xenial, Yakkety e Zesty. Piuttosto che usare un mucchio di hack o uno script, ho deciso di risolvere il problema nel codice sorgente. Ho applicato questa patch a gnome-settings-daemonInstalla gnome-settings-daemon e unity-settings-daemonInstalla unity-settings-daemon (alla patch sono state apportate alcune banali modifiche).

Ho caricato i pacchetti su un PPA:

ppa: george-edison55 / gnome-settings-daemonLogo del launchpad (fare clic qui per istruzioni sull'uso dei PPA. )

Dopo aver aggiunto il PPA, esegui:

sudo apt-get update
sudo apt-get upgrade

Sarà necessario riavviare al termine dell'installazione. Dopo aver aggiornato i pacchetti, è possibile utilizzare il dconfcomandoIcona Manpage per modificare l'incremento del volume:

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

(Il valore predefinito è 6.)

Ora quando si premono i tasti del volume, il volume cambierà con incrementi di 2:

inserisci qui la descrizione dell'immagine


3
Questo ppa rimarrà aggiornato con il demone upstream gnome / unity-settings-daemon in futuro?
Starbeamrainbowlabs

1
@starbeamrainbowlabs sì, spero di rimanere al top.
Nathan Osman,

1
Grazie! Volevo solo controllare. Passerò a utilizzare il tuo ppa fino a quando non verrà unito al ppa principale (supponendo che accada mai).
Starbeamrainbowlabs

1
@NathanOsman hai qualche possibilità che tu possa applicare patch e pacchetti mate-settings-daemon? Sarei eternamente grato :-)
Alex Grin,

3
@AlexGrin buone notizie - MATE supporta già questo out-of-the-box. Hai solo bisogno di usare un comando diverso per modificare il valore dell'incremento: dconf write /org/mate/settings-daemon/plugins/media-keys/volume-step <NUM>dov'è <NUM>il nuovo valore. Ho appena provato questo il MATE 16.04.
Nathan Osman,

11

10.04 / 10.10 / 11.04

Ho appena scoperto che gconf-editorha un'impostazione per "Aumento del volume come percentuale del volume":

/apps/gnome_settings_daemon/volume_step

Molto più elegante e funziona con le notifiche del volume OSD.


10

Questa soluzione semplice funziona per (almeno) 12.04 e non richiede CCSM.

Quando si utilizzano le scorciatoie da tastiera, non si avrà un'azione sulla barra del volume sullo schermo, ma si avrà comunque un controllo del volume a grana fine come si desidera.

  1. Impostazioni di sistema> Tastiera> scheda "Scorciatoie"> categoria "Audio e contenuti multimediali"

  2. Disabilita le scorciatoie "Volume giù" e "Volume su" esistenti. Per fare ciò, su ciascuno di essi fare clic per selezionarlo e quindi premere Backspace per cancellare qualsiasi combinazione di tasti ad esso associata.

  3. Ora seleziona la categoria "Collegamenti personalizzati" e fai clic sull'icona "+" per creare due nuovi collegamenti come segue:

    Nome: Volume Up 
    Comando: set amixer Master 3% +
    Nome: Volume Down 
    Comando: set amixer Master 3% -

    (Sperimenta con le percentuali. Se hai bisogno di andare molto bene, ometti il ​​segno% e utilizzerà una scala 0-255 anziché la percentuale).

  4. Ora assegna a ciascuna delle tue nuove scorciatoie un tasto o una combinazione di tasti: seleziona un tasto di scelta rapida e digita il tasto oi tasti desiderati sulla tastiera.

Dopodiché, quando usi i controlli del volume della tastiera, dovresti avere gli incrementi di volume che hai specificato. Puoi sempre tornare al comportamento originale disabilitando le scorciatoie personalizzate e riattivando quelle predefinite nella categoria "Audio e media".


Questo ha funzionato dalla riga di comando e dalle mie mappature dei tasti ieri, ma dopo un riavvio, nessun effetto alla riga di comando o alla mappatura dei tasti.
GlenPeterson,

8

Vale la pena notare che su Ubuntu 17.10, esiste già (anche se un po 'contorto) tipo di supporto per questo. Premere Shift+ XF86AudioRaiseVolume(o XF86AudioLowerVolume) per modificare il volume con un passo più piccolo.

inserisci qui la descrizione dell'immagine


È stato fantastico in GNOME e mi manca molto in Cinnamon. :( (Dovevo cambiare perché GNOME stava perdendo memoria come un matto per me, gnome-shell aveva un massimo di 6 GB di RAM di utilizzo.)
Per Lundberg,

@PerLundberg Interessante. Non ho davvero avuto effetti negativi dalla perdita di memoria.
Nonny Moose,

Ogni quanto riavvii? Lascio la mia macchina in funzione per una settimana o più, quando il problema accelera davvero.
Per Lundberg,

@PerLundberg lol una volta a notte. Ha senso ora XD
Nonny Moose,

1
Ah, capisco. Eseguo Linux al lavoro, quindi in genere non spengo mai la macchina tranne quando richiesto. Mettilo a dormire la sera, ripristina la mattina dopo.
Per Lundberg,

5

Puoi farlo con CompizConfig Settings Manager. Utilizzare il comando sudo apt-get install compizconfig-settings-manager se non lo si è già installato.

Ora apri Gestione impostazioni CompizConfig e vai a Comandi nella sezione Generale . Seleziona la casella di controllo Abilita comandi a destra. Nella scheda Comandi , immettere i seguenti due comandi separatamente come due comandi:

amixer set Master 5%+ -q

amixer set Master 5%- -q

Assegna due scorciatoie da tastiera per i comandi nella scheda Associazioni tasti . Uso la combinazione Super + [e Super +]. Ora chiudi CompizConfig Settings Manager e questo dovrebbe funzionare.

Non sono sicuro di poter assegnare i comandi ai controller di volume integrati nel computer.


1
L'amixer ha bisogno di Compiz?
Takkat,

Puoi farlo usando anche le scorciatoie da tastiera nelle Preferenze. In ogni caso quella di Compiz direttore dà più opzioni, tra cui l'assegnazione di eventi click, ecc
thameera

2
Il amixercomando è meraviglioso, ma non è necessario per istruire i lettori a installare CompizConfig Settings Manager.
ændrük,

2
All'inizio questo ha funzionato per me, ma il buon risultato non è stato stabile. Per nessuna ragione ovvia il mio sistema 12.04 è tornato al suo comportamento originale con incrementi di volume troppo grandi, anche se le mie nuove impostazioni erano ancora impostate e abilitate in CCSM. Ho anche provato a cancellarli e ricrearli inutilmente. Ho trovato un altro modo 12.04 per farlo e lo pubblicherò come un'altra risposta.
cdaddr,

3

12.04 (e forse 11.10)

Se si desidera controllare direttamente il volume di pulseaudio piuttosto che seguire il percorso ALSA, è possibile utilizzare il seguente script. Mentre dovrebbe anche essere possibile controllare il volume tramite DBUS come dettagliato in questa risposta StackOverflow , tuttavia non sono riuscito a trovare un modo per farlo funzionare in Ubuntu 12.04.

Come si dice nello script stesso, utilizza questa risposta StackOverflow su come modificare a livello di programmazione il volume in Ubuntu ed espande l'idea in uno script che accetta la modifica del volume come argomento della riga di comando e mostra anche una notifica OSD. Ho provato a modellarlo il più vicino possibile al comportamento predefinito di Ubuntu (12.04).

Lo script accetta le modifiche del volume come numero assoluto o relativo o valore percentuale. Quindi per esempio:

  • pavol.sh 2000 imposta il volume su 2000,
  • pavol.sh 30% imposta il volume al 30 percento,
  • pavol.sh +1000 aumenta il volume di 1000 e
  • pavol.sh -5% riduce il volume del 5 percento.

È anche abbastanza liberamente commentato nella speranza che sia utile per ulteriori modifiche.

Come

Usa il tuo editor di testo preferito per creare un file nella tua cartella home (o in qualsiasi altro luogo - ricorda il percorso) chiamato pavol.she copia e incolla i contenuti sottostanti in quel file, ad es.

gedit ~/pavol.sh

Esegui chmod a+x ~/pavol.shper renderlo eseguibile.

Quindi apri Sytem Settings, vai alle Keyboardimpostazioni e passa alla Shortcutsscheda. Fai clic su Custom Shortcutse crea due nuove scorciatoie da tastiera con il pulsante più.

Dai a ciascuno un nome e come comando inserisci qualcosa del genere: /home/username/pavol.sh "+3%"è importante inserire il percorso completo dello pavol.shscript (a meno che lo script non si trovi in ​​una cartella inclusa nella variabile di ambiente PATH). Usa anche le virgolette ""intorno al valore del volume o la scorciatoia da tastiera non funzionerà.

Successivamente, fai clic sul lato destro di ciascuna voce per impostare una combinazione di tasti o un tasto multimediale. Se la combinazione o il tasto desiderato è già assegnato a un altro collegamento, il programma chiederà se si desidera riassegnarlo.

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

funziona bene tranne per l'accumulo di notifica-invio OSD quando si utilizza gnome-shell. Ogni stampa aggiunge un nuovo OSD e il precedente non scompare. L'OSD è carino, ma non essenziale per me. Ho provato a commentare la notifica OSD dello spettacolo, ma questo ha rotto la sceneggiatura per me.
Kendor,

Spiacente @kendor che non ha funzionato per te. L'ho provato solo con Unity. Hai provato la soluzione alternativa dal commento in questa segnalazione di bug: https://bugzilla.redhat.com/show_bug.cgi?id=693207#c3 ? Basta aggiungere --hint=int:transient:1prima "Volume"sulla riga con il comando di notifica-invio (dovrebbe essere il numero di riga 130). Forse aiuta.
Kuro

2

Kubuntu 17.04

Modifica il file che main.xmlsi trova in genere su: /usr/share/plasma/plasmoids/org.kde.plasma.volume/contents/config/main.xmlcome root.

Cerca la voce volumeStep:

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

e modifica la percentuale per passaggio in base a ciò che desideri. Uso il 2% come puoi vedere.

Come scritto in Kubuntu 16.04, dovrai riavviare Plasma affinché questo abbia effetto:

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

0

Kubuntu 16.04

Ho eseguito l'aggiornamento da 14.04, che aveva un livello di volume principale, nonché le singole fonti di input e di output e un passaggio di incremento / decremento del 3% (che in seguito è passato al 5%). Sono riuscito a mantenerlo a circa il 2% e il 3% di passi semplicemente regolando i livelli del volume della sorgente di uscita per compensare i passi del volume principale.

Quindi, naturalmente, mi sono un po 'seccato quando il 16.04 ha aumentato questo valore al 6% e rimosso il controllo del volume principale, invece i pulsanti del volume controllano entrambe le fonti di uscita.

La correzione precedente per Ubuntu 16.04 non funziona con l'interfaccia Plasma 5 usata su KDE5, quindi non funzionerà per Kubuntu 16.04 - Ho provato e non funziona.

Quindi, ho fatto un rapido controllo online e il processo richiede la modifica manuale di un file, ma è abbastanza semplice.

Modifica il file che ListItemBase.qmlsi trova in genere /usr/share/plasma/plasmoids/org.kde.plasma.volume/contents/ui/ListItemBase.qmlcome root.

Ci sono un paio di righe all'interno delle funzioni increaseVolumee decreaseVolumeche definiscono il passo dividendo il volume massimo per 15. Sembrano:

var step = slider.maximumValue / 15;

Più alto è il numero, minori sono i passaggi. Se fosse 1, il volume è 0% o 100%, ma se fosse 100, il volume aumenterebbe con incrementi dell'1%.

Personalmente, ho puntato al 2%, quindi ho cambiato entrambe queste linee in

var step = slider.maximumValue / 50;

Il merito va a questo Reddit: https://www.reddit.com/r/kde/comments/3t1xr0/how_to_change_the_volume_increment_step_size_for/

Tuttavia, è necessario riavviare Plasma affinché questo abbia effetto:

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

Spero che questo possa aiutare qualcuno, o forse anche portare qualcuno a presentare una modifica al plasma per rendere questa configurazione guidata ... entrambi potrebbero finire per essere me dopo un altro aggiornamento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.