Sesuaikan volume melalui commandline sehingga volume memberitahukan muncul

14

apakah ada cara untuk menyesuaikan volume sistem melalui commandline sehingga popup volume default (yang muncul saat menekan tombol media pada notebook) masih ditampilkan.

Saya memerlukan ini untuk remote control saya. Ini akan dijalankan menggunakan file lircrc dan irexec.

Lincoln
sumber

Jawaban:

15

Instal paket xdotool , dan cobalah mengeluarkan

xdotool key XF86AudioLowerVolume

dan

xdotool key XF86AudioRaiseVolume
senapan
sumber
1
Anda mungkin perlu menambahkannya dengan DISPLAY=:0(atau yang lain jika tampilan Anda berbeda) agar pengguna lirc dapat mengirimnya ke tempat yang tepat. Mungkin tidak.
Oli
1
Terima kasih banyak! Saya tidak perlu mengatur variabel DISPLAY ...
Lincoln
1
Anda mungkin perlu menggunakan --clearmodifiersparameter setelah kunci untuk menggunakannya pada pengaturan pintasan keyboard Ubuntu.
Pablo Bianchi
@ Oli Ya, Anda akan membutuhkannya untuk misalnya mengubah volume lebih dari SSH.
wjandrea
@PabloBianchi Dalam pengalaman saya, Unity remaps kunci dengan sangat mudah, tidak perlu --clearmodifiers, namun Anda pasti membutuhkannya untuk xbindkeys.
wjandrea
3

Anda dapat mengikat pintasan ke skrip ini yang saya temukan di forum Arch (perlu paket libnotify-bin):

#!/bin/sh

usage="usage: $0 -c {up|down|mute} [-i increment] [-m mixer]"
command=
increment=5%
mixer=Master

while getopts i:m:h o
do case "$o" in
    i) increment=$OPTARG;;
    m) mixer=$OPTARG;;
    h) echo "$usage"; exit 0;;
    ?) echo "$usage"; exit 0;;
esac
done

shift $(($OPTIND - 1))
command=$1

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"
    elif [ "$display_volume" -lt "33" ]; then
        icon_name="notification-audio-volume-low"
    elif [ "$display_volume" -lt "67" ]; then
        icon_name="notification-audio-volume-medium"
    else
        icon_name="notification-audio-volume-high"
    fi
fi
notify-send " " -i $icon_name -h int:value:$display_volume -h string:synchronous:volume

Tampaknya berfungsi dengan baik di Ubuntu 10.10.

htorque
sumber
1

Kontrol Volume Suara

Anda dapat menggunakan amixeruntuk mengontrol volume suara, mis

amixer set 'Master' 50%
amixer set 'Master' 10%+
amixer set 'Master' 2dB-

Anda mungkin perlu mengatur kartu suara menggunakan mis. -c 1Untuk kartu suara kedua, lihat man amixer.

Memainkan suara

Suara dapat dimainkan menggunakan pemutar seperti aplayatau paplay, misalnya

paplay /usr/share/sounds/freedesktop/stereo/audio-volume-change.oga

Anda mungkin ingin melihat pertanyaan ini: Di mana saya menemukan suara sistem?

Tampilkan Pemberitahuan Di Layar

Anda dapat mereproduksi pemberitahuan di layar menggunakan pustaka X On-Screen Display XOSD. Paket dipanggil xosd-bindan perintah osd_catini digunakan untuk menampilkan teks, bilah status dll di layar.

osd_cat -b percentage -P 20 -T Status: -f "-adobe-helvetica-bold-*-*--34-*-*-*-*"

menampilkan

masukkan deskripsi gambar di sini

Lihat halaman wiki Jerman ini untuk opsi dan contoh dan man osd_catuntuk lebih banyak.

pencuci mulut
sumber
0

Saya menginstal xmacro dan menambahkan baris berikut ke .lircrc :

begin
        prog = irexec
        button = KEY_VOLUMEUP
        repeat = 1
        delay = 2
        config = echo KeyStrPress XF86AudioRaiseVolume KeyStrRelease XF86AudioRaiseVolume | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = KEY_VOLUMEDOWN
        repeat = 1
        delay = 2
        config = echo KeyStrPress XF86AudioLowerVolume KeyStrRelease XF86AudioLowerVolume | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = KEY_MUTE
        config = echo KeyStrPress XF86AudioMute KeyStrRelease XF86AudioMute | xmacroplay $DISPLAY
end
Jakob
sumber
0

Ini adalah versi perbaikan dari script htorque yang diposting .

Ini bekerja untuk saya pada 14,04. Beri tahu saya jika berfungsi pada 16.04 atau lebih baru.

Itu membutuhkan libnotify-bindiinstal.

#!/bin/sh
# Adjust the volume, play a sound, and show a notification.
#
# Replacement for default Ubuntu volume adjustment behaviour.
#
# Based on /ubuntu//a/12769/301745

command=""
device="pulse"
display_volume=0
icon_name="error"
increment=5
mixer="Master"
usage="usage: $0 [-d device] [-i increment] [-m mixer] (up|down|mute)"

# For compatibility with SSH sessions.
export DISPLAY=:0

_amixer(){
    # amixer alias
    local set_get="$1"
    shift
    amixer -D "$device" "$set_get" "$mixer" "$@"
}

_get_display_volume(){
    # grep alias
    grep -Pom 1 '(?<=\[)[0-9]+(?=%\])'
}

while getopts d:hi:m: opt; do
    case "$opt" in
        d)
            device="$OPTARG"
            ;;
        h)
            echo "$usage"
            exit 0
            ;;
        i)
            increment="$OPTARG"
            ;;
        m)
            mixer="$OPTARG"
            ;;
        ?)
            echo "$usage"
            exit 1
            ;;
    esac
done

shift "$(($OPTIND - 1))"
command="$1"

case "$command" in
    down)
        display_volume="$(
            _amixer set "$increment%-" unmute |
                _get_display_volume
            )"
        ;;
    mute)
        if _amixer get | grep -q "\[on\]"; then
            display_volume=0
            icon_name="notification-audio-volume-muted"
            _amixer set mute > /dev/null
        else
            display_volume="$(
                _amixer set unmute |
                    _get_display_volume
                )"
        fi
        ;;
    up)
        display_volume="$(
            _amixer set "$increment%+" unmute |
                _get_display_volume
            )"
        ;;
    *)
        echo "$usage"
        exit 1
        ;;
esac

if [ "$icon_name" = "error" ]; then
    if [ "$display_volume" = "0" ]; then
        icon_name="notification-audio-volume-off"
    elif [ "$display_volume" -lt "33" ]; then
        icon_name="notification-audio-volume-low"
    elif [ "$display_volume" -lt "67" ]; then
        icon_name="notification-audio-volume-medium"
    else
        icon_name="notification-audio-volume-high"
    fi

    # In a subshell in the background to minimize latency.
    ( canberra-gtk-play --id=audio-volume-change & )
fi

notify-send "Volume: $display_volume%" -i "$icon_name" -h "string:synchronous:volume" -h "int:value:$display_volume"
wjandrea
sumber