Bagaimana saya bisa mengubah volume dengan peningkatan yang lebih kecil?

53

Ketika saya menekan tombol volume atas / bawah pada keyboard saya, volume terlalu banyak berubah. Bagaimana saya bisa membuat ukuran langkah lebih kecil sehingga saya memiliki kontrol yang lebih baik?

ændrük
sumber

Jawaban:

12

11.10 / 12.04

Dari laporan bug ini , tampaknya tombol langkah-volume menghilang di 11.10 dan belum (belum) muncul kembali.

Dengan demikian, tidak ada perubahan konfigurasi sederhana yang dapat Anda lakukan untuk mengurangi langkah volume.

Posting # 18 di tautan memberikan solusi yang menarik yang melibatkan penggunaan alsamixerpeningkatan dan penurunan kemampuan bersama dengan mengirim pemberitahuan ke desktop.

Namun saya tidak bisa membuatnya bekerja - jadi saya mengambil solusi didasarkan pada posting itu.

Dengan solusi ini, langkah volume default akan dikurangi menjadi langkah dua persen.


Bagaimana caranya

Instal xbindkeyspaket (menggunakan Synaptic, atau dengan sudo apt-get install xbindkeys).

Menggunakan editor teks favorit Anda, buat file di folder rumah Anda yang disebut .volumeHack.shdan salin dan tempel konten di bawah ini ke dalam file itu yaitu

gedit ~/.volumeHack.sh

Jalankan chmod a+x .volumeHack.shuntuk membuatnya dapat dieksekusi.

Kemudian edit file ~/.xbindkeysrcdan salin & tempel teks di bawah di bagian bawah file ini. yaitu

gedit ~/.xbindkeysrc

Logout dan login

.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"
kebebasan fosil
sumber
jawaban delty bekerja untuk saya setelah saya menonaktifkan pintasan keyboard gnome untuk volume naik / turun. Peringatan dari xbindkeys ini adalah petunjuk yang saya butuhkan: *** Peringatan *** Harap verifikasi bahwa tidak ada program lain yang berjalan yang menangkap salah satu kunci yang diambil oleh xbindkeys. Tampaknya ada konflik, dan xbindkeys tidak dapat mengambil semua kunci yang ditentukan dalam file konfigurasinya.
1
Sebagai catatan, pelakunya adalah keengganan pengembang Gnome untuk memberikan solusi pragmatis: bugzilla.gnome.org/show_bug.cgi?id=650371
Jakub Kotowski
17

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

Saya akhirnya memiliki solusi yang tepat untuk pengguna Trusty, Vivid, Wily, Xenial, Yakkety, dan Zesty. Daripada menggunakan banyak peretasan atau skrip, saya memutuskan untuk memperbaiki masalah dalam kode sumber. Saya menerapkan tambalan ini ke gnome-settings-daemonInstal gnome-settings-daemon dan unity-settings-daemonInstal unity-settings-daemon (beberapa modifikasi sepele dibuat pada tambalan).

Saya telah mengunggah paket ke PPA:

ppa: george-edison55 / gnome-settings-daemonLogo launchpad ( Klik di sini untuk instruksi menggunakan PPA. )

Setelah Anda menambahkan PPA, jalankan:

sudo apt-get update
sudo apt-get upgrade

Anda harus memulai ulang setelah instalasi selesai. Setelah paket telah ditingkatkan, Anda dapat menggunakan yang dconfperintahIkon halaman manual untuk mengubah kenaikan volume yang:

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

(Nilai default adalah 6.)

Sekarang ketika Anda menekan tombol volume, volume akan berubah dengan kelipatan 2:

masukkan deskripsi gambar di sini

Nathan Osman
sumber
3
Akankah ppa ini tetap mengikuti perkembangan upstream gnome / unity-settings-daemon di masa depan?
starbeamrainbowlabs
1
@ starbeamrainbowlabs ya, saya berharap untuk tetap di atas itu.
Nathan Osman
1
Terima kasih! Hanya ingin memeriksa. Saya akan beralih menggunakan ppa Anda sampai digabung menjadi ppa utama (dengan asumsi itu pernah terjadi).
starbeamrainbowlabs
1
@NathanOsman ada kemungkinan Anda bisa menambal dan mengemas mate-settings-daemonjuga? Saya akan berterima kasih selamanya :-)
Alex Grin
3
@AlexGrin kabar baik - MATE sudah mendukung ini out-of-the-box. Anda hanya perlu menggunakan perintah yang berbeda untuk mengubah nilai kenaikan: di dconf write /org/mate/settings-daemon/plugins/media-keys/volume-step <NUM>mana <NUM>nilai baru. Saya baru saja menguji ini pada MATE 16.04.
Nathan Osman
11

10.04 / 10.10 / 11.04

Saya baru saja menemukan bahwa gconf-editormemiliki pengaturan untuk "Volume step sebagai persentase volume":

/apps/gnome_settings_daemon/volume_step

Jauh lebih elegan, dan berfungsi dengan notifikasi volume OSD.

ændrük
sumber
10

Solusi mudah ini berfungsi untuk (setidaknya) 12,04 dan tidak memerlukan CCSM.

Anda tidak akan memiliki aksi bilah volume pada layar ketika Anda menggunakan pintasan keyboard, tetapi Anda akan memiliki kontrol volume yang halus seperti yang Anda inginkan.

  1. Pengaturan Sistem> Keyboard> tab "Pintasan"> kategori "Suara dan Media"

  2. Nonaktifkan pintasan "Volume Turun" dan "Volume Naik" yang ada. Untuk melakukan ini, pada masing-masing klik untuk memilihnya dan kemudian tekan Backspace untuk menghapus semua kombo kunci yang terkait dengannya.

  3. Sekarang pilih kategori "Pintasan Khusus" dan klik ikon "+" untuk membuat dua pintasan baru sebagai berikut:

    Nama: 
    Perintah Volume Naik : amixer atur Master 3% +
    Nama: 
    Perintah Volume Turun : amixer atur Master 3% -

    (Percobaan dengan persentase. Jika Anda perlu melakukannya dengan sangat baik maka hilangkan tanda% dan itu akan menggunakan skala 0-255 daripada persen).

  4. Sekarang tetapkan masing-masing pintasan baru Anda ke tombol atau kombo kunci: Pilih pintasan dan ketik tombol atau tombol yang diinginkan pada keyboard Anda.

Setelah ini, ketika Anda menggunakan kontrol volume keyboard Anda, Anda harus memiliki kenaikan volume apa pun yang Anda tentukan. Anda selalu dapat kembali ke perilaku asli dengan menonaktifkan pintasan khusus dan mengaktifkan kembali yang premade dalam kategori "Suara dan Media".

cdaddr
sumber
Ini bekerja dari baris perintah dan dari pemetaan kunci saya kemarin, tetapi setelah reboot, tidak ada efek pada baris perintah atau pemetaan kunci.
GlenPeterson
8

Perlu dicatat bahwa pada Ubuntu 17.10, sudah ada (walaupun agak berbelit-belit) jenis dukungan untuk ini. Tekan Shift+ XF86AudioRaiseVolume(atau XF86AudioLowerVolume) untuk mengubah volume dengan ukuran langkah yang lebih kecil.

masukkan deskripsi gambar di sini

Nonny Moose
sumber
Ini sangat hebat di GNOME dan saya sangat merindukannya di Cinnamon. :( (Harus beralih karena GNOME membocorkan memori seperti orang gila bagi saya, gnome-shell paling banyak menggunakan RAM 6 GiB.)
Per Lundberg
@ PerLundberg Menarik. Saya belum benar-benar mengalami efek buruk dari kebocoran memori.
Nonny Moose
Seberapa sering Anda reboot? Saya membiarkan mesin saya berjalan selama satu minggu atau lebih, saat itulah masalahnya benar-benar bertambah.
Per Lundberg
@ PerLundberg lol sekali malam. Masuk akal sekarang XD
Nonny Moose
1
Aha, begitu. Saya menjalankan Linux di tempat kerja sehingga saya biasanya tidak pernah mematikan mesin kecuali jika diperlukan. Letakkan di malam hari, kembalikan keesokan paginya.
Per Lundberg
5

Anda dapat melakukan ini dengan CompizConfig Settings Manager. Gunakan perintah sudo apt-get install compizconfig-settings-manager jika Anda belum menginstalnya.

Sekarang buka CompizConfig Settings Manager dan buka Perintah di bagian Umum . Centang kotak Aktifkan perintah di sebelah kanan. Di tab Perintah , masukkan dua perintah berikut secara terpisah sebagai dua perintah:

amixer set Master 5%+ -q

amixer set Master 5%- -q

Tetapkan dua pintasan keyboard untuk perintah di tab Kunci binding . Saya menggunakan kombinasi Super + [dan Super +]. Sekarang tutup CompizConfig Settings Manager dan ini seharusnya berfungsi.

Saya tidak yakin apakah Anda dapat menetapkan perintah ke pengontrol volume bawaan komputer.

thameera
sumber
1
Apakah amixer perlu Compiz?
Takkat
Anda dapat melakukannya dengan menggunakan Pintasan Keyboard di Preferensi juga. Pokoknya yang ada di manajer Compiz memberikan lebih banyak opsi, termasuk menetapkan peristiwa klik, dll
thameera
2
The amixerperintah indah, tetapi tidak ada perlu bagi Anda untuk pembaca menginstruksikan untuk menginstal CompizConfig Settings Manager.
ændrük
2
Awalnya ini bekerja untuk saya, tetapi hasil yang baik tidak stabil. Tanpa alasan yang jelas sistem saya 12,04 kembali ke perilaku semula dengan peningkatan volume terlalu besar, meskipun pengaturan baru saya masih diatur dan diaktifkan di CCSM. Saya juga mencoba menghapus dan membuatnya kembali tidak berhasil. Saya menemukan cara lain ramah 12,04 untuk melakukan ini dan akan mempostingnya sebagai jawaban lain.
cdaddr
3

12.04 (dan mungkin 11.10)

Jika Anda ingin mengontrol volume pulseaudio secara langsung daripada pergi rute ALSA, Anda dapat menggunakan skrip berikut. Meskipun mungkin juga dimungkinkan untuk mengontrol volume melalui DBUS sebagaimana dirinci dalam jawaban Stackoverflow ini , namun saya tidak dapat menemukan cara untuk membuat ini berfungsi di Ubuntu 12.04.

Seperti yang dikatakan dalam skrip itu sendiri, ia menggunakan jawaban Stackoverflow ini tentang bagaimana secara terprogram mengubah volume di Ubuntu dan memperluas ide menjadi skrip yang mengambil perubahan volume sebagai argumen baris perintah dan juga menampilkan pemberitahuan OSD. Saya telah mencoba memodelkannya sedekat mungkin dengan perilaku default Ubuntu (12.04).

Script mengambil perubahan volume baik sebagai angka absolut atau relatif atau nilai persen. Jadi misalnya:

  • pavol.sh 2000 mengatur volume ke 2000,
  • pavol.sh 30% mengatur volume menjadi 30 persen,
  • pavol.sh +1000 meningkatkan volume sebesar 1000 dan
  • pavol.sh -5% mengurangi volume sebesar 5 persen.

Ini juga sangat bebas dikomentari dengan harapan bahwa itu berguna untuk penyesuaian lebih lanjut.

HowTo

Gunakan editor teks favorit Anda untuk membuat file di folder rumah Anda (atau di mana pun juga - ingat jalurnya) yang dipanggil pavol.shdan salin dan tempel konten di bawah ini ke dalam file itu, yaitu

gedit ~/pavol.sh

Jalankan chmod a+x ~/pavol.shuntuk membuatnya dapat dieksekusi.

Kemudian buka Sytem Settings, buka Keyboardpengaturan dan beralih ke Shortcutstab. Klik Custom Shortcutsdan buat dua pintasan keyboard baru dengan tombol plus.

Beri nama masing-masing dan sebagai perintah masukkan sesuatu seperti ini: /home/username/pavol.sh "+3%"Penting untuk memasukkan path lengkap ke pavol.shskrip (kecuali skrip terletak di folder yang termasuk dalam variabel lingkungan PATH). Juga gunakan tanda kutip di ""sekitar nilai volume atau pintasan keyboard tidak akan berfungsi.

Setelah itu klik di sisi kanan setiap entri untuk mengatur kombinasi tombol atau tombol multimedia. Jika kombinasi atau kunci yang diinginkan sudah ditetapkan untuk pintasan lain, program akan menanyakan apakah Anda ingin menetapkan ulang.

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
sumber
ini berfungsi dengan baik kecuali untuk itu mengumpulkan OSD memberitahukan-kirim ketika menggunakan gnome-shell. Setiap pers menambahkan OSD baru dan yang sebelumnya tidak hilang. OSD itu baik, tetapi tidak penting bagi saya. Saya mencoba mengomentari notifikasi acara OSD tapi itu mematahkan skrip untuk saya.
Kendor
Maaf @kendor bahwa itu tidak berhasil untuk Anda. Saya hanya mengujinya dengan Unity. Sudahkah Anda mencoba workaroud dari komentar dalam laporan bug ini: https://bugzilla.redhat.com/show_bug.cgi?id=693207#c3 ? Cukup tambahkan --hint=int:transient:1sebelumnya "Volume"pada baris dengan perintah notify-send (harus nomor baris 130). Mungkin itu membantu.
Kuro
2

Kubuntu 17.04

Edit file yang main.xmlbiasanya ditemukan di: /usr/share/plasma/plasmoids/org.kde.plasma.volume/contents/config/main.xmlsebagai root.

Cari entri VolumeStep:

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

dan ubah persentase per langkah ke apa pun yang Anda inginkan. Saya menggunakan 2% seperti yang Anda lihat.

Seperti yang ditulis di Kubuntu 16.04, Anda harus memulai ulang Plasma agar ini berlaku:

killall plasmashell #to stop it
kstart plasmashell #to restart it
Bas
sumber
0

Kubuntu 16.04

Saya memutakhirkan dari 14,04, yang memiliki tingkat volume master serta sumber input individual dan sumber output, dan langkah kenaikan / penurunan 3% (yang kemudian diubah menjadi 5%). Saya berhasil mempertahankannya menjadi sekitar 2% dan 3% langkah hanya dengan menyesuaikan tingkat volume sumber output untuk mengimbangi langkah-langkah volume master.

Jadi secara alami, saya merasa sedikit terganggu ketika 16,04 menaikkan ini menjadi 6%, dan menghapus kontrol volume master, sebagai gantinya tombol volume mengontrol kedua sumber output.

Perbaikan di atas untuk Ubuntu 16.04 tidak bekerja dengan antarmuka Plasma 5 yang digunakan pada KDE5, jadi tidak akan berfungsi untuk Kubuntu 16.04 - Saya sudah mencoba, dan tidak berhasil.

Jadi, saya melakukan pengecekan cepat secara online, dan prosesnya memerlukan pengubahan file secara manual, tetapi cukup mudah.

Edit file yang ListItemBase.qmlbiasanya ditemukan di /usr/share/plasma/plasmoids/org.kde.plasma.volume/contents/ui/ListItemBase.qmlsebagai root.

Ada beberapa baris dalam fungsi increaseVolumedan decreaseVolumeyang menentukan langkah dengan membagi volume maksimum dengan 15. Mereka terlihat seperti:

var step = slider.maximumValue / 15;

Semakin tinggi angkanya, semakin kecil langkah-langkahnya. Jika ini 1, volumenya 0% atau 100%, tetapi jika ini 100, volumenya akan naik dalam langkah 1%.

Secara pribadi, saya menargetkan 2%, jadi saya mengubah kedua baris ini menjadi

var step = slider.maximumValue / 50;

Kredit diberikan kepada Reddit ini: https://www.reddit.com/r/kde/comments/3t1xr0/how_to_change_the_volume_increment_step_size_for/

Namun, Anda harus memulai ulang Plasma agar ini berlaku:

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

Mudah-mudahan ini akan membantu seseorang, atau bahkan mungkin menyebabkan seseorang mengajukan perubahan dalam Plasma untuk membuat konfigurasi ini digerakkan ... keduanya mungkin berakhir menjadi saya setelah pembaruan lain.

SEoF
sumber