Lenovo Thinkpadsでマイクミュートボタンとライトを有効にする


26

Lenovo Thinkpad T420にマイクミュートボタンがありますが、機能しません。

そこでxev、プレスイベントを監視するコマンドを試しましたが、そのキーはキャプチャされませんでした。

とにかく、生のキーコードを追加するなど、修正する方法はありますか?

OSおよびラップトップ

Ubuntu 12.04 また、Arch Linuxで動作することを願っていますが、それほど重要ではありません;-P

Thinkpadモジュール: X220 4290LY9

Arch Linuxのカーネルパッチ

ここからダウンロード

最後に

少し注意が必要ですが、カーネルパッチとacpidスクリプトを使用すると、現在は動作します。

私が必要とする残りは、出力muteのような通知デーモンですが、今ではあまり重要ではありません。


どのLenovoモデルですか?
っぽい

@izx Thinkpad X220 4290LY9
デイジー

の代わりにxev、を使用acpi-listenして監視し、を押すと、のようなものが表示されibm/hotkey HKEY 00000080 0000101bます。そのコードをここに投稿してください。
っぽい

@izx、運は、しかし、私が思うに、他のボタン、例えば巻アップ/ダウン容量を見ることができなかったヴァンテージ
デイジー

ミュートボタンの内側にライトが組み込まれていますか?また、数回ボタンを押しての出力をポストdmesg|tail
ISH

回答:


34

このソリューションは、ライトが内蔵されたミュートボタンを備えたすべてのThinkpadで機能するはずです。他のThinkpadでも機能する場合があります。

通知バブルとは別に:

ここに画像の説明を入力してくださいここに画像の説明を入力してください

(ミュートがオンまたはオフであることを示すために)2つの可能な「ハードウェア」インジケータがあります。

  1. ミュートがオンになると、電源ボタンのライト(緑色)が点滅して表示されます
  2. マイクのミュートボタンライト(オレンジ)がオンまたはオフになり、ミュート状態が表示されます(Windowsと同様)

    解決策2は、パッチを適用したthinkpad_acpiカーネルモジュールを必要とし、自分が何をしているかを知っている上級ユーザーにのみお勧めします。これは、パッチがデフォルトでthinkpad_acpi開発者に含まれていないためです(詳細については、この説明を参照してください)。

一般的な手順


a。Mic-MuteホットキーコードとMic入力デバイスの決定

  • ターミナルを開く Ctrl+Alt+T
  • を実行しacpi_listen、ミュートキーを押します
  • 次のような結果になることに注意してください。 ibm/hotkey HKEY 00000080 0000101b

  • 次に、実行するamixer scontrolsと、出力に次のいずれかが表示されます。

シンプルなミキサーコントロール「内部マイク」、0

または

シンプルなミキサーコントロール 'Capture'、0

表示内容に応じて、「内部マイク」または「キャプチャ」が入力デバイスになります。

b。Mic-Mute ACPIイベントハンドラーを作成する

  • ターミナルgksudo gedit /etc/acpi/events/lenovo-mutemicを開き、入力してエディターを開きます。
  • エディターで、次の行を貼り付けます。最初の行は、前のセクションで示したコードですacpi_listen
    event = ibm / hotkey HKEY 00000080 0000101b
    action = / etc / acpi / lenovo-mutemic.sh
    
  • エディターを保存して終了します。

パワーライトまたはマイクミュートインジケーターの選択


c-1。電源ボタンインジケータ付きのマイクミュートスクリプト

  • これは、簡単な解決策が必要で、パッチを適用したカーネルモジュールを使用したくない場合に行います(C-2を参照)。
  • オープンターミナル、タイプ gksudo gedit /etc/acpi/lenovo-mutemic.sh
  • エディターで貼り付けます:

    #!/ bin / bash
    INPUT_DEVICE = "'Internal Mic'"
    YOUR_USERNAME = "place_your_username_here"
    ミキサーが$ INPUT_DEVICE、0を取得する場合| grep '\ [on \]'; それから
        ミキサーセット$ INPUT_DEVICE、0トグル
        echo "0 blink"> / proc / acpi / ibm / led
        su $ YOUR_USERNAME -c 'DISPLAY = ":0.0" notify-send -t 50 \
                -iマイク感度ミュート記号「マイクミュート」 '
    他に
        ミキサーセット$ INPUT_DEVICE、0トグル                       
        su $ YOUR_USERNAME -c 'DISPLAY = ":0.0" notify-send -t 50 \
                -iマイク感度-高シンボリック「マイクオン」 '
        echo "0 on"> / proc / acpi / ibm / led 
    fi
    
  • INPUT_DEVICE変数の値をCapture入力デバイス名に置き換えます(すべてのチェックマークをそのままにします)。

  • YOUR_USERNAME変数の値を、通知を送信するユーザーのアカウント名に置き換えます
  • エディターを保存して終了します。
  • (ターミナルから)次を実行します。
    sudo chmod + x /etc/acpi/lenovo-mutemic.sh
    sudo service acpid restart
    
  • テストセクション(d)にジャンプして、動作することを確認します。

c-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
    
  • そして、2 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.cUbuntu Kernel gitリポジトリからソースファイルをダウンロードします。

    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)modules
    クリーン: make -C / lib / modules / $(shell uname -r)/ build M = $(PWD)clean
  • 次に、入力makeしてモジュールを作成します。thinkpad_acpi.ko完了すると、フォルダ内にファイルが表示されます。

  • ロードした後、パッチを適用したモジュールをテストします。

    sudo rmmod thinkpad_acpi && sudo insmod thinkpad_acpi.ko
    
  • マイクボタンを押すと、オレンジ色のマイクライトがオン/オフになり、電源ライトが点滅/点灯することを確認します。

  • 確認されたら、次の手順に従って現在のthinkpad_acpiモジュールを交換します。

    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
    
  • 電源入力ラインをコメントアウトまたは削除します lenovo-micmute.sh


d。テスト中

  • インジケーターの選択とは別に、次の方法でミュートを確認することもできます。

マイク入力

  • 右上の音量アイコンをクリックし、下部のサウンド設定をクリックします。
  • [入力]タブに切り替えます。
  • マイクミュートボタンを押すと、次のように反映されます。

    1. ウィンドウのミュートチェックボックス
    2. 通知バブル(マイクミュートを数秒に1回以上押すと、すぐには表示されません!)
    3. 選択したインジケータ:点滅する電源ボタンランプまたは内蔵マイクミュートランプ。

インジケーターとして点滅する電源ライトを追加しました-カスタムカーネルなしでは実際のマイクライトを使用することは不可能です。
ISH

1
@Andrey:変更されたソースをダウンロードする代わりに、インラインパッチを追加しました。回答ページを検索してください。マイクミュートLEDを有効にするために必要な行Patch it withが見つかりますsed
-ish

2
残念ながら、これthinkpad_acpi.c以上コンパイルできません。Make出力はこちらです。誰か、この問題の解決を手伝ってくれませんか?
アンドレイ

1
13.10(Saucy)では、異なるthinkpad_acpi.cが必要です。パッチは元の回答と同じままです。これは3.11.0-15-genericカーネル(および対応するヘッダー)で機能しました。
ダニエル14年

1
16.10では、最初の方法を使用してミュートボタンを押すと、マイクのミュートライトが自動的にオンになるように見えるため、電源ライトの点滅はもう必要ありません。
ExplodingKittens

0

Linuxデスクトップ環境を使用しても、Ubuntu 12.10で初めてすぐに動作させることはできませんでした。

引用符を追加してカンマを削除するだけで修正されました(そして、ユーザー名を追加しました)。

#!/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をコンパイルする手順に従いました。

NVS 4200M、Ubuntu 12.10を搭載したThinkpad T520上のすべて まだリブートしていませんが、説明したテスト手順でテストしましたが、ミュートLEDをオンおよびオフにし、実際にミュートします(通知付き)。銃を少しジャンプしてもうまくいくようです。ありがとう。

再起動して、スクリプト自体は正常にミュートおよびミュート解除できますが、パッチを適用したthinkpad_acpiをインストールしませんでした...おっと

さて、今回は適切にインストールした後、再起動し、LEDも点灯します。現在の設定ではボタンが押されたときにのみライトをオン/オフするため、マイクがミュートされているかどうかを確認し、ライトをオン/オフするための起動スクリプトが必要です。


ボタンを最初に押したときではなく、起動時にミュートされているかどうかを示すライトを取得するには、保存しました。

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

/etc/init.d/へのlenovo-mic-checkとして実行しました:

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

これで、コンピューターを再起動するとライトが点灯します。注:2番目のifは他の場合でも可能です。


@andreyこれは愚かな質問かもしれませんが、thinkpad_acpi.cのクリーンコピーのダウンロード、パッチ適用、コンパイルを試みましたか?
JQuantum
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.