Як переключити звук за допомогою amixer?


48

У тому числі з Натті я завжди міг перемикати (вимкнути / увімкнути звук) гучність звуку "Master" за допомогою

amixer sset Master toggle

команда, яку я прив’язав до крайового прив'язки в CompizConfig-Manager.

Тепер після встановлення Oneiric команда лише вимикає звук, але не вимикає його. Я навіть спробував це в Терміналі, але він також не працює. Він змінює " Моно: відтворення 68 [78%] [-14,25 дБ] [вимкнено] " на "... [увімкнено"), але звук залишається приглушеним, тому мені доведеться відключити його через "звуковий індикатор" у панель.

Як я можу змусити це знову працювати? Що змінилося після Натті? Хтось знає команду, яку "звуковий індикатор" використовує для перемикання гучності звуку?


І ще більше дивно: на моєму іншому ноутбуці, де я перейшов з Натті до Онеріка замість нової установки, він все ще працює.
joschi

Відповіді:


51

Це працює для мене 13.04, як відключити звук, так і вимкнути звук:

amixer -D pulse set Master 1+ toggle

Він задає імпульсний звук, щоб забезпечити вимкнення звуку, вмикати все.


Працював над лубунту 13.10. Шукали цього за тиждень!
luisgonzalez

1
EDIT: Він працював лише під час запуску як команди в терміналі. Але коли я намагаюся налаштувати як ключове прив'язку, я отримую: Домашній каталог недоступний: В дозволі відмовлено ALSA lib pulse.c: 243: (pulse_connect) PulseAudio: Неможливо підключити: Підключення відхилено змішувач: Помилка імпульсу приєднати змішувач:
Відключення

5
Це працює навіть краще без 1+параметра.
Дж. Кацвінкель

3
Ще працює в 17.10 (майстерно). Я використовую це для медіа-прив’язок i3:bindsym XF86AudioMute exec --no-startup-id amixer -D pulse set Master 1+ toggle
Джоель

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і після виклику, і вимкнути все, що використовує GUI, щоб зрозуміти, що потрібно вимкнути.


  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Центром програмного забезпечення. Почніть це, відкрийте три файли, і на панелі прокрутки ви побачите, де між файлами є відмінності. Використовуйте знайдені імена шанелю, щоб додати їх до описаного вище сценарію.


На жаль, сценарій лише приглушує звук, але не
вмикає

Це, мабуть, тому, що ваші речі, які потрібно вимкнути, не називаються "Фронт" та "Навушники", як вони є в моїй системі.
Jim Hunziker

Я також зробив різницю і з’ясував, чого не вистачає, щоб сценарій працював на моєму комп’ютері, зараз він працює. Дуже дякую.
joschi

5

Я не зміг приглушити звук, щоб переключитись правильно. Незалежно від того, я використовував CLI і вводив перемикання Amixer sset Master або натискав кнопку переключення медіа-версії HP pavillion media, я отримую той же результат: Якщо звук увімкнено і працює, він автоматично вимкне головний канал і канал PCM. Потім, коли я знову натискаю на тумблер (кліп або клавіша), ВСЕГДА вмикається 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 і встановив його на виконуваний файл, клацнувши правою кнопкою миші в тунарі, і під дозволом поставлено прапор). Потім я призначив їй швидку клавішу HP Pavilion, натиснувши цю клавішу. Тепер воно перемикається правильно - Дивовижно. Сподіваюся, що це допомагає комусь іншому.

Мир


2

Якщо я не помиляюся, це помилка, яка викликає відключення та вимкнення інших каналів змішувача. Щоб вимкнути звук, спробуйте

набір амікерів Master 0;

Щоб вимкнути звук, спробуйте

набір амікерів Master 1% +; набір амікерів Master 7dB +;


Ці команди працюють, але вони не дозволяють мені перемикати гучність однією командою, яку я можу поєднувати з крайовим прив'язкою.
joschi

1
Якщо когось цікавить пов’язаний з цим повідомлення про помилку, дивіться тут .
joschi


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. Також може бути щось інше в рядку греп "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.