Включение кнопки 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.

Добавлен мигающий индикатор питания в качестве индикатора - невозможно использовать настоящий микрофонный свет без собственного ядра.
иш

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

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


@andrey Это может быть глупый вопрос, но вы пробовали загрузить, исправить и скомпилировать чистую копию thinkpad_acpi.c?
JQuantum
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.