Как мне переключить звук с помощью amixer?


48

Включая Natty, я всегда мог переключать (отключать / включать) громкость звука «Master» с помощью

amixer sset Master toggle

команда, которую я связал с привязкой ребра в CompizConfig-Manager.

Теперь после установки Oneiric команда только отключает звук, но не включает его. Я даже попробовал это в Терминале, но это также не работает. Он изменяет « Mono: Playback 68 [78%] [-14.25dB] [off] » на «... [on]», но звук остается приглушенным, поэтому мне нужно включить его с помощью «звукового индикатора» в панель.

Как я могу заставить это работать снова? Что изменилось с Нетти? Кто-нибудь знает команду, которую звуковой индикатор использует для переключения громкости звука?


И чтобы это стало еще более странным: на моем другом ноутбуке, где я обновил Natty до Oneiric вместо новой установки, он все еще работает.
Йоси

Ответы:


52

Это работает для меня 13.04, как без звука, так и без звука:

amixer -D pulse set Master 1+ toggle

Он определяет импульсный звук, чтобы обеспечить включение звука, включение звука.


Работал на lubuntu 13.10. Искал это на НЕДЕЛЯХ!
luisgonzalez

1
РЕДАКТИРОВАТЬ: Это работало только при запуске в качестве команды в терминале. Но когда я пытаюсь настроить привязку ключа, я получаю: Домашний каталог недоступен: Отказано в разрешении ALSA lib pulse.c: 243: (pulse_connect) PulseAudio: Невозможно подключиться: Отказано в соединении amixer: Ошибка при подключении микшера:
Отказано в

5
Это работает еще лучше без 1+параметра.
J. Katzwinkel

3
До сих пор работает в 17.10 (хитрый). Я использую это для i3 media bindings:bindsym XF86AudioMute exec --no-startup-id amixer -D pulse set Master 1+ toggle
Joel

2
В чем причина 1+?
Гаян Виракутти

16

Я использую этот скрипт в качестве обходного пути:

#!/bin/bash

CURRENT_STATE=`amixer get Master | egrep 'Playback.*?\[o' | egrep -o '\[o.+\]'`

if [[ $CURRENT_STATE == '[on]' ]]; then
    amixer set Master mute
else
    amixer set Master unmute
    amixer set Front unmute
    amixer set Headphone unmute
fi

Я сделал разницу amixer scontentsдо вызова amixer set Master muteи после вызова и включения звука, используя графический интерфейс, чтобы выяснить, что нужно включить звук.


  1. При включенном звуке amixer scontents > ~/before(вы получите файл со статусом всех звуковых каналов)
  2. Затем переключите громкость с amixer set Master toggle
  3. Создайте второй файл состояния канала с amixer scontents > ~/after
  4. Снова переключите звук, с помощью amixer set Master toggleкоторого предполагается вернуть громкость обратно до уровня перед первой командой переключения
  5. Создайте третий файл с amixer scontents > ~/afterafter

Теперь у вас есть три файла, которые сообщают вам о состоянии звуковых каналов, используемых для нормального звука, которые отключаются amixer set Master toggleи не включаются снова при повторном включении звука той же командой.

Чтобы легко сравнивать файлы и видеть различия (каналы, которые отключаются и не включаются впоследствии), вы можете использовать meldиз Центра программного обеспечения. Запустите его, откройте три файла и на полосе прокрутки вы увидите, где существуют различия между файлами. Используйте найденные имена каналов, чтобы добавить их в вышеописанный скрипт.


К сожалению, сценарий только отключает звук, но не включает его
joschi 24.10.11

Вероятно, это потому, что ваши вещи, которые должны быть включены, не называются «Фронт» и «Наушники», как в моей системе.
Джим Хунзикер

Я также сделал различие и выяснил, чего не хватает для работы скрипта на моем компьютере, теперь он работает. Большое спасибо.
Йоси

5

Я не мог отключить звук, чтобы правильно переключаться. Независимо от того, использовал ли я CLI и набрал в мастере Amixer sset Master или нажал клавишу переключения носителя HP pavillion, я получу тот же результат: если звук включен и работает, он автоматически отключит мастер-канал и канал PCM. Затем, когда я снова нажимаю на тумблер (cli или key), он ВСЕГДА включает Master, но отключает PCM. Для моей установки (HP Pavilion DV6 под управлением Xubuntu Oneric) это означает, что звук выключен даже при включенном мастере. При запуске из CLI - те же результаты. Если с помощью cli я переключаю PCM, он также отключает основной канал и снова не включает его, хотя он правильно переключает PCM.

Сценарий, который работал, был:

#!/bin/bash
    if amixer -c 0 get Master | grep -q off
then
    amixer set Master unmute
    amixer set PCM unmute

else
    amixer set Master mute
fi

Затем я использовал сочетания клавиш Xubuntu (настройки> менеджер настроек> клавиатура> ярлыки приложений), чтобы перейти к сценарию (я назвал его sndfx.sh и установил его на исполняемый файл, щелкнув правой кнопкой мыши в thunar и в разделе разрешений поставил галочку сделать исполняемый файл). Затем я назначил ему быструю клавишу HP Pavilion, нажав эту клавишу. Теперь он переключается правильно - потрясающе. Надеюсь, это поможет кому-то еще.

мир


2

Если я не ошибаюсь, это ошибка, которая заставляет другие каналы микшера отключать и включать звук. Чтобы отключить звук, попробуйте

набор микшеров Master 0;

Включить звук попробовать

набор амиксеров Мастер 1% +; набор микшеров Master 7дБ +;


Эти команды работают, но они не позволяют мне переключать громкость одной командой, которую я могу комбинировать с привязкой края.
Йоси

1
Если кто-то заинтересован в сообщении об ошибке, смотрите здесь .
Йоси


1

Если вы хотите заменить amixer в .lircrc для вашего удаленного управления, работающего с lirc, вы можете попробовать следующие строки. Убедитесь, что установлен xmacro. Регулятор громкости теперь работает снова.

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

0

Хитрость заключается в том, чтобы заставить состояние динамика или наушников следовать состоянию основного канала в зависимости от того, подключены наушники или нет. Этот скрипт делает это для меня на моем древнем ноутбуке Dell Latitude:

#!/bin/bash

amixer -q sset Master toggle

MASTER_STATE=`amixer get Master | awk -F"dB] " 'NR == 5 {print $2;}'`
HEADPHONES_PLUGGED=`amixer contents | grep -A 2 Headphone\ Jack | awk -F"=" 'NR == 3 {print $2;}'`

if [[ $HEADPHONES_PLUGGED == 'on' ]]; then
    SLAVE="Headphone"
else
    SLAVE="Speaker+LO"
fi

if [[ $MASTER_STATE == '[on]' ]]; then
    amixer -q sset $SLAVE unmute
else
    amixer -q sset $SLAVE mute
fi

Возможно, вам придется проверить свои каналы с помощью amixer на вашем компьютере и соответственно изменить определения SLAVE. Кроме того, строка grep «Headphone \ Jack» в определении HEADPHONES_PLUGGED может потребовать чего-то другого.


-1

Грубая сила включения звука:

for i in $(amixer |grep -o \'.*\'); do amixer set $i unmute; done

2
Я не думаю, что включение 80 и более устройств - хорошая идея. Это включает в себя микрофоны, которые могут привести к нежелательным петлям обратной связи. сделать for i in $(amixer |grep -o \'.*\'); do echo amixer set $i unmute; doneраньше, чтобы увидеть, что будет сделано.
пользователь неизвестен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.