Увімкнення кнопки та підсвічування Mic Mute на Thinkpads Lenovo


26

На моєму Lenovo Thinkpad T420 у мене є кнопка відключення звуку, але вона не працює.

Тому я спробував xevкоманду відстежувати події в пресі, і цей ключ не був захоплений.

Чи все-таки це можна виправити, як-от додати неочищений код ключа?

ОС і ноутбук

Ubuntu 12.04 , також сподіваємось, що він працює в Arch Linux, але це не має великого значення ;-P

Модуль Thinkpad: X220 4290LY9

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

Завантажте тут

ОКОНЧНО

Це трохи хитро, але з патчем ядра та швидким скриптом він працює і зараз.

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


Яка модель Lenovo?
Останній

@izx Thinkpad X220 4290LY9
ромашка

Замість xev, використовуйте acpi-listenдля моніторингу та натискання, ви повинні отримати щось подібне ibm/hotkey HKEY 00000080 0000101b. Будь ласка, опублікуйте цей код тут.
Останній

@izx, не пощастило, але я міг побачити інші кнопки, наприклад, звук вгору / зменшення напруги, подумайте про вигідність
Дейзі

У вас вбудований світло всередині кнопки відключення звуку? Також натисніть на кнопку кілька разів і після виведенняdmesg|tail
іш

Відповіді:


34

Це рішення має працювати для всіх Thinkpads із кнопкою відключення звуку, яка також має вбудоване світло. Це також може працювати для інших Thinkpads.

Крім бульбашок сповіщень:

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

Є два можливі "апаратні" індикатори (щоб показати, що вимкнути звук увімкнено або вимкнено):

  1. Індикатор кнопки живлення (зелений) блимає, показуючи, коли звук увімкнено
  2. Індикатор кнопки відключення звуку (помаранчевий) буде увімкнено або вимкнено, щоб відображати стан відключення звуку (як у Windows)

    Рішення 2 вимагає виправленого thinkpad_acpiмодуля ядра і рекомендується лише досвідченим користувачам, які знають, що роблять. Це пов’язано з тим, що патч не включений розробниками Thinkpad_acpi за замовчуванням ( див. Цю дискусію для отримання більш детальної інформації ).

Загальні кроки


а. Визначення коду швидкої клавіші Mic-Mute та пристрою введення мікрофона

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

  • Потім запустіть amixer scontrols, ви побачите одне з наступних у виході:

Просте управління змішувачем 'Internal Mic', 0

або

Просте управління змішувачем "Захоплення", 0

Залежно від того, що ви бачите, "Internal Mic" або "Capture" є вашим пристроєм введення.

б. Створіть обробник подій Mic-Mute ACPI

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

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


c-1. Сценарій Mic-Mute з індикатором кнопки живлення

  • Зробіть це, якщо ви хочете просте рішення і не хочете використовувати модуль виправленого ядра (див. C-2).
  • Відкрити термінал, набрати gksudo gedit /etc/acpi/lenovo-mutemic.sh
  • В редактор вставити:

    #! / бін / баш
    INPUT_DEVICE = "" Внутрішній мікрофон ""
    YOUR_USERNAME = "місце_ява_користувача_тут"
    якщо 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" сповістити-надіслати -t 50 \
                -i мікрофон-чутливість-вимкнено-символьний "Mic MUTED" '
    ще
        amixer sset $ INPUT_DEVICE, 0 тумблер                       
        su $ YOUR_USERNAME -c 'DISPLAY = ": 0,0" сповістити-надіслати -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
    
  • Перейдіть до розділу "Тестування", щоб підтвердити, що він працює.

c-2. Мік-звук із офіційним індикатором світлодіодного мікрофона

Налаштування сценарію

  • Будь ласка, не використовуйте цей метод, якщо ви не знайомі з терміналом / оболонкою.
  • Для цього знадобиться компілювати виправлений thinkpad_acpiмодуль і перевірено, щоб він працював з Ubuntu Precis 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із сховища 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". Ви можете завантажити його безпосередньо з цього пастебіна , використовуючи:

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

    АБО вставте нижче у файл під назвою Makefile:

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

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

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

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

    TPDIR = / lib / module / $ (unme -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. Поле "Вимкнути звук" у вікні
    2. Бульбашки сповіщення (не з’являться миттєво, якщо натиснути Mic Mute більше одного разу кожні кілька секунд!)
    3. Вибраний індикатор: блимання індикатора кнопки живлення або вбудований індикатор Mic Mute.

Додано миготливе світло живлення як індикатор - неможливо використовувати фактичне світло мікрофона без спеціального ядра.
Останній

1
@Andrey: Я додав вбудований патч замість завантаження модифікованого джерела. Перегляньте сторінку відповідей, 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 ... 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 на /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.