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

26

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

Итак, я попробовал xev для мониторинга события пресса, и этот ключ не был захвачен.

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

ОС и amp; Ноутбук

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

Модуль Thinkpad: X220 4290LY9

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

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

НАКОНЕЦ

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

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

    
задан daisy 26.04.2012 в 15:29
источник

2 ответа

33

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

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

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

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

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

Общие шаги

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

  • Открыть терминал с Ctrl+Alt+T
  • Запустите acpi_listen и нажмите клавишу отключения звука
  • Обратите внимание на результат, который должен выглядеть примерно так: % Co_de%

  • Затем запустите ibm/hotkey HKEY 00000080 0000101b , на выходе вы увидите одно из следующих:

Simple mixer control 'Internal Mic',0

или

Simple mixer control 'Capture',0

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

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

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

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

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

  • Сделайте это, если вы хотите простое решение и не хотите использовать исправленный модуль ядра (см. C-2).
  • Открыть терминал, введите acpi_listen
  • В редакторе вставьте:

    #!/bin/bash
    INPUT_DEVICE="'Internal Mic'"
    YOUR_USERNAME="place_your_username_here"
    if amixer sget $INPUT_DEVICE,0 | grep '\[on\]' ; then
        amixer sset $INPUT_DEVICE,0 toggle
        echo "0 blink" > /proc/acpi/ibm/led
        su $YOUR_USERNAME -c 'DISPLAY=":0.0" notify-send -t 50 \
                -i microphone-sensitivity-muted-symbolic "Mic MUTED"'
    else
        amixer sset $INPUT_DEVICE,0 toggle                       
        su $YOUR_USERNAME -c 'DISPLAY=":0.0" notify-send -t 50 \
                -i microphone-sensitivity-high-symbolic "Mic ON"'
        echo "0 on" > /proc/acpi/ibm/led 
    fi
    
  • Замените значение переменной INPUT_DEVICE на gksudo gedit /etc/acpi/lenovo-mutemic.sh , если это ваше имя устройства ввода (оставьте все тики нетронутыми).

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

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

Настройка сценария

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

  • Вставьте эту строку после заголовка ( /etc/acpi/lenovo-mutemic.sh ):

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

    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
    
  • Загрузите исходный файл echo... из репозитория git 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
    

    ИЛИ вставьте нижеследующее в файл с именем thinkpad_acpi.c :

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

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

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

  • Если это подтверждено, выполните следующие действия для замены текущего модуля thinkpad_acpi.ko :

    TPDIR=/lib/modules/$(uname -r)/kernel/drivers/platform/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
    
  • Прокомментируйте или удалите строки питания в thinkpad_acpi

d. Тестирование

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

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

    1. Отключить галочку в окне
    2. Буферы уведомлений (не будут отображаться мгновенно, если вы нажимаете Mic Mute более одного раза каждые несколько секунд!)
    3. Ваш выбранный индикатор: индикатор мигающей кнопки питания или встроенный микрофон Mute.
ответ дан izx 31.12.2012 в 14:24
источник
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 ... oops

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

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

#!/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 08.04.2013 в 09:01