Включение кнопки Mic Mute и подсветка на Lenovo Thinkpads

26

У меня на Lenovo Thinkpad T420 есть кнопка отключения микрофона, но она не работает.

Поэтому я попробовал xevкоманду для отслеживания события нажатия, и эта клавиша не была захвачена.

Есть ли способ исправить это, например, добавить необработанный код ключа?

ОС и ноутбук

Ubuntu 12.04 также надеюсь, что он работает на Arch Linux, но не имеет большого значения ;-P

Модуль Thinkpad: X220 4290LY9

Патч ядра для Arch Linux

Скачать здесь

НУ НАКОНЕЦ ТО

Это немного сложно, но с патчем для ядра и скриптом acpid все работает.

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

маргаритка
источник
Какая модель Lenovo?
иш
@izx Thinkpad X220 4290LY9
маргаритка
Вместо этого xevиспользуйте acpi-listenдля мониторинга и нажмите, вы должны получить что-то вроде ibm/hotkey HKEY 00000080 0000101b. Пожалуйста, отправьте этот код здесь.
иш
@izx, не повезло, но я мог видеть другие кнопки, например, громкость вверх / вниз, думаю, выгодно
маргаритка
У вас есть встроенный в кнопку отключения звука? Также нажмите кнопку несколько раз и опубликуйте выводdmesg|tail
ish

Ответы:

34

Это решение должно работать для всех Thinkpad с кнопкой отключения звука, которая также имеет встроенную подсветку. Это может также работать для других Thinkpads.

Помимо пузырьков уведомлений:

введите описание изображения здесьвведите описание изображения здесь

Есть два возможных «аппаратных» индикатора (чтобы показать, что звук отключен):

  1. Индикатор кнопки питания (зеленый) будет мигать, показывая, что звук отключен
  2. Индикатор кнопки отключения микрофона (оранжевый) будет включен или выключен, чтобы показать состояние отключения звука (как в Windows)

    Решение 2 требует исправленного thinkpad_acpiмодуля ядра и рекомендуется только для опытных пользователей, которые знают, что они делают. Это связано с тем, что этот патч по умолчанию не включен разработчиками thinkpad_acpi ( см. Подробности в этом обсуждении ).

Общие шаги


а. Определение кода горячей клавиши Mic-Mute и устройства ввода Mic

  • Открыть терминал с Ctrl+Alt+T
  • Запустите acpi_listenи нажмите кнопку отключения звука
  • Обратите внимание на результат, который должен быть примерно таким: ibm/hotkey HKEY 00000080 0000101b

  • Затем запустите amixer scontrols, вы должны увидеть одно из следующего:

Простое управление микшером 'Internal Mic', 0

или

Простое управление микшером 'Capture', 0

В зависимости от того, что вы видите, «Внутренний микрофон» или «Захват» - это ваше устройство ввода.

б. Создайте обработчик события Mic-Mute ACPI

  • Откройте терминал, введите, gksudo gedit /etc/acpi/events/lenovo-mutemicчтобы открыть редактор.
  • В редакторе вставьте следующее, где в первой строке должен быть код, показанный в предыдущем разделе acpi_listen:
    событие = ibm / горячая клавиша HKEY 00000080 0000101b
    действие = / и т.д. / ACPI / lenovo-mutemic.sh
    
  • Сохраните и выйдите из редактора.

Выбор индикаторов Power Light или Mic Mute


с-1. Скрипт Mic-Mute с индикатором кнопки питания

  • Сделайте это, если вы хотите простое решение и не хотите использовать исправленный модуль ядра (см. C-2).
  • Открытый терминал, тип gksudo gedit /etc/acpi/lenovo-mutemic.sh
  • В редакторе вставьте:

    #! / Bin / Баш
    INPUT_DEVICE = "Внутренний микрофон"
    Your_username = "place_your_username_here"
    если amixer sget $ INPUT_DEVICE, 0 | grep '\ [on \]'; тогда
        amixer sset $ INPUT_DEVICE, переключатель 0
        echo "0 blink"> / proc / acpi / ibm / led
        su $ YOUR_USERNAME -c 'DISPLAY = ": 0.0" notify-send -t 50 \
                -i микрофон-чувствительность-приглушенный-символический "Mic MUTED" '
    еще
        amixer sset $ INPUT_DEVICE, переключатель 0                       
        su $ YOUR_USERNAME -c 'DISPLAY = ": 0.0" notify-send -t 50 \
                -i-чувствительность микрофона-высокий символ "Mic ON" '
        echo "0 on"> / proc / acpi / ibm / led 
    фи
    
  • Замените значение переменной INPUT_DEVICE на, Captureесли это имя вашего устройства ввода (оставьте все галочки без изменений).

  • Замените значение переменной YOUR_USERNAME именем учетной записи пользователя, которому вы хотите отправлять уведомления
  • Сохраните и выйдите из редактора.
  • Теперь запустите следующее (из терминала):
    sudo chmod + x /etc/acpi/lenovo-mutemic.sh
    перезапуск службы sudo
    
  • Перейдите в раздел «Тестирование» (d), чтобы убедиться, что он работает.

с-2. Микрофон с официальным индикатором Микрофон

Настройка скрипта

  • Пожалуйста, не используйте этот метод, если вы не знакомы с терминалом / оболочкой.
  • Это потребует компиляции исправленного thinkpad_acpiмодуля и было проверено для работы с Ubuntu Precise 12.04 и Quantal 12.10, ядрами 3.2.0-23 и 3.2.0-24 и 3.5.0-21.
  • Давайте сначала создадим скрипт: он /etc/acpi/lenovo-mutemic.shдолжен быть таким же, как в разделе c-1, со следующими дополнениями:

  • Вставьте эту строку после заголовка ( #!/bin/bash):

    MICMUTE=/sys/devices/platform/thinkpad_acpi/leds/tpacpi::micmute/brightness
    
  • После первой echo...строки вставить:

    echo 1 > $MICMUTE
    
  • И после второй echo...строки вставить:

    echo 0 > $MICMUTE
    
  • Вы можете найти пример того, как должен выглядеть полный скрипт в этой вставке

  • Затем:

    sudo chmod +x /etc/acpi/lenovo-mutemic.sh
    sudo service acpid restart
    
  • Убедитесь, что нажатие кнопки отключения звука приводит к миганию индикатора питания; повторное нажатие дает постоянный источник света.

Сборка, тестирование и установка модуля ядра

  • Установите (или убедитесь), что у вас есть заголовки и встроенные инструменты для вашего работающего в данный момент ядра:

    sudo apt-get install linux-headers-$(uname -r) build-essential
    
  • Создайте временный каталог и измените его:

    mkdir ~/tpacpi && cd ~/tpacpi
    
  • Загрузите исходный файл thinkpad_acpi.cиз репозитория Ubuntu Kernel:

    wget -Othinkpad_acpi.c "http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-$(lsb_release -sc).git;\
    a=blob_plain;f=drivers/platform/x86/thinkpad_acpi.c;hb=HEAD" 
    
  • Соедините его (скопируйте и вставьте полную строку):

    sed -i -e 's/"tpacpi::thinkvantage",/"tpacpi::thinkvantage",\n\t"tpacpi::unknown_led4",\n\t"tpacpi::micmute",/g' -e 's/0x1081U/0x5081U/g' -e 's/0x1fffU/0x5fffU/g' thinkpad_acpi.c
    
  • В той же папке, куда thinkpad_acpi.cвы скачали, вам понадобится «Makefile». Вы можете скачать его прямо из этого Pastebin , используя:

    wget -OMakefile http://pastebin.com/raw.php?i=ybpnxeUT
    

    ИЛИ вставьте ниже в файл с именем Makefile:

    obj-m + = thinkpad_acpi.o
    все: модули make -C / lib / modules / $ (shell uname -r) / build M = $ (PWD)
    чистый: make -C / lib / modules / $ (shell uname -r) / build M = $ (PWD) очистить
  • Теперь введите, makeчтобы создать модуль; Вы увидите thinkpad_acpi.koфайл в папке, когда закончите.

  • Протестируйте исправленный модуль после загрузки:

    sudo rmmod thinkpad_acpi && sudo insmod thinkpad_acpi.ko
    
  • Теперь убедитесь, что нажатие кнопки микрофона включит / выключит оранжевый индикатор микрофона, а индикатор питания будет мигать / гореть постоянно.

  • В случае подтверждения сделайте следующее, чтобы заменить текущий thinkpad_acpiмодуль:

    TPDIR = / lib / modules / $ (uname -r) / ядро ​​/ драйверы / платформа / x86
    sudo mv $ TPDIR / thinkpad_acpi.ko $ TPDIR / thinkpad_acpi.ko.stock
    sudo mv /where/you/built/it/tpacpi_micmute/thinkpad_acpi.ko $ TPDIR / thinkpad_acpi.ko
    
  • Закомментируйте или удалите линии питания lenovo-micmute.sh


д. тестирование

  • Помимо выбранного вами индикатора, вы также можете подтвердить отключение звука с помощью следующего:

Микрофонный вход

  • Нажмите на значок громкости в правом верхнем углу и настройки звука в нижней части:
  • Перейдите на вкладку «Вход».
  • Теперь весело проведите время, нажимая кнопку Mic Mute, и вы должны увидеть ее в:

    1. Чекбокс Mute в окне
    2. Пузыри уведомлений (не появятся мгновенно, если вы нажмете Mic Mute чаще, чем раз в несколько секунд!)
    3. Выбранный вами индикатор: мигающий индикатор кнопки питания или встроенный индикатор Mic Mute.
izx
источник
Добавлен мигающий индикатор питания в качестве индикатора - невозможно использовать настоящий микрофонный свет без собственного ядра.
иш
1
@ Андрей: я добавил встроенный патч вместо загрузки модифицированного источника. Patch it withНайдите страницу с ответом, и вы найдете sedстроку, необходимую для включения индикатора отключения звука микрофона.
иш
2
К сожалению, я не могу собрать thinkpad_acpi.cбольше. Makeвыход здесь . Может ли кто-нибудь помочь мне решить эту проблему?
Андрей
1
13.10 (Соси) требует другого thinkpad_acpi.c. Патч остается таким же, как и в оригинальном ответе. Это работало для меня на ядре 3.11.0-15 (и соответствующих заголовках).
Даниил
1
В 16.10 похоже, что индикатор отключения звука микрофона включается сам по себе, когда вы используете первый метод и нажимаете кнопку отключения звука, поэтому мигающий индикатор питания больше не нужен.
ExplodingKittens
0

Я не смог заставить его работать сразу же на Ubuntu 12.10 с использованием среды рабочего стола linux.

Это было исправлено просто добавлением кавычек и удалением запятой (и добавлением моего имени пользователя):

#!/bin/bash
MICMUTE=/sys/devices/platform/thinkpad_acpi/leds/tpacpi::micmute/brightness

ID='"Internal Mic"'
USERNAME="" #put your username here
if amixer sget "$ID"ntenter code herernal Mic" 0 | grep '\[on\]' ; then
    amixer sset "$ID" 0 toggle
    #echo "0 blink" > /proc/acpi/ibm/led #related to blinking power
    echo 1 > $MICMUTE
    su $USERNAME -c 'DISPLAY=":0.0" notify-send -t 50 \
            -i microphone-sensitivity-muted-symbolic "Mic MUTED"'
    echo "MUTE ON"
else
    amixer sset "$ID" 0 toggle                       
    su $USERNAME -c 'DISPLAY=":0.0" notify-send -t 50 \
            -i microphone-sensitivity-high-symbolic "Mic ON"'
    #echo "0 on" > /proc/acpi/ibm/led 
    echo 0 > $MICMUTE
    echo "MUTE OFF"
fi

а затем следовал вашим шагам в составлении thinkpad_acpi.

Все на Thinkpad T520 с NVS 4200M, Ubuntu 12.10. Еще не перезагружен, но я протестировал с шагом теста, который вы обрисовали в общих чертах, и он работает с включением и выключением индикатора отключения звука и его отключением (с уведомлением). Кажется, что прыжки с пистолетом работают нормально. Спасибо.

Хорошо перезагружен, сам скрипт работает нормально, отключая и отключая звук, но я не установил пропатченный thinkpad_acpi ... упс

Ладно, перезагрузите снова после правильной установки на этот раз, и светодиод также загорается. Вероятно, должен быть сценарий запуска, чтобы проверить, отключен ли микрофон или нет, и включить / выключить свет, поскольку текущая настройка будет включать / выключать свет только при нажатии кнопки.


Чтобы свет показывал, был ли он выключен или нет при запуске, а не при первом нажатии кнопки, я просто сохранил:

#!/bin/bash
MICMUTE=/sys/devices/platform/thinkpad_acpi/leds/tpacpi::micmute/brightness
if amixer sget "Internal Mic" 0 | grep '\[on\]' ; then
    echo 0 > $MICMUTE
elif amixer sget "Internal Mic" 0 | grep '\[off\]' ; then
    echo 1 > $MICMUTE
else
    echo "No Mic Detected";
fi

Дал разрешение на выполнение

sudo chmod +x /etc/init.d/lenovo-mic-check

Как lenovo-mic-check в /etc/init.d/ и затем запустил:

sudo update-rc.d lenovo-mic-check defauts 98 02

Также не забудьте скопировать в /etc/pm/sleep.d/

sudo cp /etc/init.d/lenovo-mic-check /etc/pm/sleep.d/lenovo-mic-check

Теперь, если я перезагружаю компьютер, индикатор горит, ПРИМЕЧАНИЕ: второй, если это может быть просто другое.

JQuantum
источник
@andrey Это может быть глупый вопрос, но вы пробовали загрузить, исправить и скомпилировать чистую копию thinkpad_acpi.c?
JQuantum