Włączanie przycisku wyciszenia mikrofonu i światła w komputerach Lenovo Thinkpads

26

Mam przycisk wyciszania mikrofonu na moim Lenovo Thinkpad T420, ale to nie działa.

Próbowałem xevwięc monitorować zdarzenie prasowe i ten klucz nie został przechwycony.

Czy można to naprawić, na przykład dodać surowy kod klucza?

System operacyjny i laptop

Ubuntu 12.04 , mam również nadzieję, że działa na Arch Linux, ale nie ma większego znaczenia ;-P

Moduł Thinkpad: X220 4290LY9

Poprawka jądra dla Arch Linux

Pobierz tutaj

WRESZCIE

To trochę trudne, ale dzięki łatce na jądro i skryptowi acpid działa teraz.

Reszta, której potrzebuję, to demon powiadomień, taki jak ten do wyciszania wyjścia, ale teraz nie ma to większego znaczenia.

stokrotka
źródło
Który model Lenovo?
Ish
@izx Thinkpad X220 4290LY9
stokrotka
Zamiast xev, użyj acpi-listendo monitorowania i naciśnij, powinieneś dostać coś takiego ibm/hotkey HKEY 00000080 0000101b. Prześlij ten kod tutaj.
ish
@izx, nie ma szczęścia, ale widziałem inne przyciski, np. zwiększanie / zmniejszanie głośności, myślę, że korzystasz
daisy
Masz wbudowane światło w przycisku wyciszenia? Naciśnij przycisk również kilka razy i zakładać wyjściedmesg|tail
ish

Odpowiedzi:

34

To rozwiązanie powinno działać dla wszystkich Thinkpadów z przyciskiem wyciszenia, który ma również wbudowane światło. Może również działać z innymi Thinkpadami.

Oprócz bąbelków powiadomień:

wprowadź opis zdjęcia tutajwprowadź opis zdjęcia tutaj

Istnieją dwa możliwe wskaźniki „sprzętowe” (pokazujące, że wyciszenie jest włączone lub wyłączone):

  1. Kontrolka przycisku zasilania (zielona) będzie migać, wskazując włączenie wyciszenia
  2. Lampka przycisku wyciszenia mikrofonu (pomarańczowa) będzie włączona lub wyłączona, aby pokazać status wyciszenia (podobnie jak w systemie Windows)

    Rozwiązanie 2 wymaga poprawionego thinkpad_acpimodułu jądra i jest zalecane tylko dla zaawansowanych użytkowników, którzy wiedzą, co robią. Wynika to z faktu, że łatka nie jest domyślnie dołączana przez programistów thinkpad_acpi ( więcej szczegółów można znaleźć w tej dyskusji ).

Wspólne kroki


za. Określanie kodu skrótu Mic-Mute i urządzenia wejściowego Mic

  • Otwórz terminal za pomocą Ctrl+Alt+T
  • Uruchom acpi_listeni naciśnij klawisz wyciszenia
  • Zwróć uwagę na wynik, który powinien być mniej więcej taki: ibm/hotkey HKEY 00000080 0000101b

  • Następnie uruchom amixer scontrols, powinieneś zobaczyć jeden z następujących wyników:

Proste sterowanie mikserem „Internal Mic”, 0

lub

Proste sterowanie mikserem „Capture”, 0

W zależności od tego, co widzisz, „Internal Mic” lub „Capture” jest urządzeniem wejściowym.

b. Utwórz moduł obsługi zdarzeń Mic-Mute ACPI

  • Otwórz terminal, wpisz gksudo gedit /etc/acpi/events/lenovo-mutemic aby otworzyć edytor.
  • W edytorze wklej poniższy tekst, w którym pierwszym wierszem powinien być kod pokazany w poprzedniej sekcji przez acpi_listen :
    event = IBM / Hotkey HKEY 00000080 0000101b
    action = / etc / acpi / lenovo-mutemic.sh
    
  • Zapisz i zamknij edytor.

Wybieranie wskaźników Power Light lub Mic Mute


c-1. Skrypt wyciszania mikrofonu ze wskaźnikiem przycisku zasilania

  • Zrób to, jeśli chcesz łatwego rozwiązania i nie chcesz używać poprawionego modułu jądra (patrz C-2).
  • Otwórz terminal, wpisz gksudo gedit /etc/acpi/lenovo-mutemic.sh
  • W edytorze wklej:

    #! / bin / bash
    INPUT_DEVICE = "„ Wewnętrzny mikrofon ””
    YOUR_USERNAME = "miejsce_nazwa_użytkownika_tutaj”
    jeśli amixer sget $ INPUT_DEVICE, 0 | grep '\ [on \]'; następnie
        amixer sset $ INPUT_DEVICE, 0 przełącz
        echo „0 mignięć”> / proc / acpi / ibm / led
        su $ NAZWA UŻYTKOWNIKA -c 'DISPLAY = ": 0.0" powiadom-wyślij -t 50 \
                -i mikrofon-czułość-wyciszony-symboliczny „Mic MUTED”
    jeszcze
        amixer sset $ INPUT_DEVICE, 0 przełącz                       
        su $ NAZWA UŻYTKOWNIKA -c 'DISPLAY = ": 0.0" powiadom-wyślij -t 50 \
                -i czułość mikrofonu-symboliczne „Mic ON”
        echo „0 on”> / proc / acpi / ibm / led 
    fi
    
  • Zamień wartość zmiennej INPUT_DEVICE na, Capturejeśli jest to nazwa twojego urządzenia wejściowego (pozostaw wszystkie znaczniki nietknięte).

  • Zamień wartość zmiennej YOUR_USERNAME na nazwę konta użytkownika, do którego chcesz wysyłać powiadomienia
  • Zapisz i zamknij edytor.
  • Teraz uruchom następujące polecenie (z terminala):
    sudo chmod + x /etc/acpi/lenovo-mutemic.sh
    usługa sudo acpid restart
    
  • Przejdź do sekcji Testowanie (d), aby potwierdzić, że działa.

c-2. Wyciszanie mikrofonu z oficjalną lampką kontrolną wyciszenia mikrofonu

Konfigurowanie skryptu

  • Nie używaj tej metody, jeśli nie znasz terminala / powłoki.
  • Będzie to wymagało skompilowania łatanego thinkpad_acpimodułu i zostało sprawdzone, czy działa z Ubuntu Precise 12.04 i Quantal 12.10, jądra 3.2.0-23 oraz 3.2.0-24 i 3.5.0-21.
  • Najpierw stwórzmy skrypt: /etc/acpi/lenovo-mutemic.shpowinien być jak w sekcji c-1, z następującymi dodatkami:

  • Wstaw ten wiersz po nagłówku ( #!/bin/bash):

    MICMUTE=/sys/devices/platform/thinkpad_acpi/leds/tpacpi::micmute/brightness
    
  • Po pierwszym echo...wierszu wstaw:

    echo 1 > $MICMUTE
    
  • A po drugim echo...wierszu wstaw:

    echo 0 > $MICMUTE
    
  • W tym wklejeniu możesz znaleźć przykładowy wygląd pełnego skryptu

  • Następnie:

    sudo chmod +x /etc/acpi/lenovo-mutemic.sh
    sudo service acpid restart
    
  • Potwierdź, że naciśnięcie przycisku wyciszenia powoduje miganie lampki zasilania; ponowne naciśnięcie przycisku świeci światłem ciągłym.

Budowanie, testowanie i instalowanie modułu jądra

  • Zainstaluj (lub upewnij się), że masz nagłówki i zbudowane narzędzia dla aktualnie uruchomionego jądra, używając:

    sudo apt-get install linux-headers-$(uname -r) build-essential
    
  • Utwórz katalog tymczasowy i przejdź do niego:

    mkdir ~/tpacpi && cd ~/tpacpi
    
  • Pobierz plik źródłowy thinkpad_acpi.cz repozytorium git jądra Ubuntu:

    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" 
    
  • Łata za pomocą (skopiuj i wklej pełną linię):

    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
    
  • W tym samym folderze, w którym thinkpad_acpi.czostał pobrany, potrzebujesz „Makefile”. Możesz pobrać go bezpośrednio z tego Pastebin , używając:

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

    LUB wklej poniżej do pliku o nazwie Makefile:

    obj-m + = thinkpad_acpi.o
    wszystko: make -C / lib / modules / $ (shell uname -r) / build M = $ (PWD) moduły
    czysty: oczyść -C / lib / modules / $ (uname powłoki -r) / build M = $ (PWD)
  • Teraz wpisz, makeaby utworzyć moduł; po zakończeniu zobaczysz thinkpad_acpi.koplik w folderze.

  • Przetestuj załatany moduł po załadowaniu go za pomocą:

    sudo rmmod thinkpad_acpi && sudo insmod thinkpad_acpi.ko
    
  • Teraz potwierdź, że naciśnięcie przycisku mikrofonu spowoduje włączenie / wyłączenie pomarańczowej kontrolki mikrofonu ORAZ kontrolki zasilania migającej / ciągłej.

  • Jeśli zostanie to potwierdzone, wykonaj następujące czynności, aby wymienić bieżący thinkpad_acpimoduł:

    TPDIR = / lib / moduły / $ (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
    
  • Skomentuj lub usuń linie doprowadzające zasilanie lenovo-micmute.sh


re. Testowanie

  • Oprócz wyboru wskaźnika możesz również wyciszyć, wykonując następujące czynności:

Wejście mikrofonowe

  • Kliknij ikonę głośności w prawym górnym rogu, a ustawienia dźwięku u dołu:
  • Przejdź do zakładki „Wejście”.
  • Teraz baw się dobrze, naciskając przycisk wyciszania mikrofonu, powinieneś zobaczyć to odzwierciedlone w:

    1. Pole wyboru Wycisz w oknie
    2. Pęcherzyki powiadomień (nie pojawią się natychmiast, jeśli naciśniesz Mic Mute więcej niż raz na kilka sekund!)
    3. Wybrany wskaźnik: migające światło przycisku zasilania lub wbudowane światło wyciszenia mikrofonu.
izx
źródło
Dodano migającą lampkę zasilania jako wskaźnik - niemożliwe użycie rzeczywistego światła mikrofonu bez niestandardowego jądra.
ish
1
@Andrey: Dodałem łatkę wbudowaną zamiast pobierać zmodyfikowane źródło. Wyszukaj na stronie odpowiedzi, Patch it witha znajdziesz sedlinię niezbędną do aktywacji diody LED wyciszenia mikrofonu.
ish
2
Niestety nie mogę już skompilować thinkpad_acpi.c. Makewyjście jest tutaj . Czy ktoś mógłby mi pomóc rozwiązać ten problem?
Andrey
1
13.10 (Saucy) wymaga innego thinkpad_acpi.c. Łatka pozostaje taka sama jak w oryginalnej odpowiedzi. To działało dla mnie w jądrze 3.11.0-15-generic (i odpowiednich nagłówkach).
Daniel
1
W wersji 16.10 wygląda na to, że światło wyciszenia mikrofonu włącza się, gdy używasz pierwszej metody i naciskasz przycisk wyciszenia, więc migające światło zasilania nie jest już konieczne.
ExplodingKittens
0

Nie mogłem go uruchomić od razu po raz pierwszy na Ubuntu 12.10 przy użyciu środowiska Linux.

Naprawiono to poprzez dodanie cudzysłowów i usunięcie przecinka (i dodanie mojej nazwy użytkownika):

#!/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

a następnie postępował zgodnie ze wskazówkami dotyczącymi kompilacji thinkpad_acpi.

Wszystko na Thinkpad T520 z NVS 4200M, Ubuntu 12.10. Nie zrestartowałem się jeszcze, ale przetestowałem z krokiem testowym, który nakreśliłeś i działa to z włączaniem i wyłączaniem wyciszonej diody LED i faktycznie wyciszaniem (z powiadomieniem). Trochę przeskakiwanie działa wydaje się działać dobrze. Dzięki.

Po ponownym uruchomieniu sam skrypt działa dobrze, wyciszając i wyłączając wyciszenie, ale nie zainstalowałem poprawionego thinkpad_acpi ... oops

Ok, tym razem po ponownym zainstalowaniu uruchomiłem się ponownie, a dioda LED również się świeci. Prawdopodobnie powinien mieć skrypt startowy, aby sprawdzić, czy mikrofon jest wyciszony, czy nie, i włączyć / wyłączyć światło, ponieważ bieżąca konfiguracja włącza / wyłącza światło tylko po naciśnięciu przycisku.


Aby włączyć światło, aby pokazać, czy zostało wyciszone, czy nie podczas uruchamiania zamiast po pierwszym naciśnięciu przycisku, właśnie zapisałem:

#!/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

Pozwolił na wykonanie

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

Jak lenovo-mic-check do /etc/init.d/, a następnie uruchomił:

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

Nie zapomnij również skopiować na /etc/pm/sleep.d/

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

Teraz lampka świeci się, gdy ponownie uruchamiam komputer, UWAGA: druga, jeśli może to być coś innego.

JQuantum
źródło
@andrey To może być głupie pytanie, ale czy próbowałeś pobrać, załatać i skompilować czystą kopię thinkpad_acpi.c?
JQuantum