การเปิดใช้งานปุ่ม Mic Mute และไฟบน Lenovo Thinkpads


26

ฉันมีปุ่มปิดเสียงไมค์บน Lenovo Thinkpad T420 ของฉัน แต่ใช้งานไม่ได้

ดังนั้นฉันจึงลองใช้xevคำสั่งเพื่อตรวจสอบเหตุการณ์การกดปุ่มและคีย์นั้นก็ไม่ได้ถูกจับ

อย่างไรก็ตามมีการแก้ไขเช่นเพิ่มรหัสคีย์ดิบหรือไม่

ระบบปฏิบัติการ & แล็ปท็อป

Ubuntu 12.04 หวังว่ามันจะใช้งานได้กับ Arch Linux แต่ก็ไม่สำคัญอะไร ;-P

โมดูล Thinkpad: X220 4290LY9

แพทช์เคอร์เนลสำหรับ Arch Linux

ดาวน์โหลดได้ที่นี่

ในที่สุด

มันค่อนข้างยุ่งยาก แต่ด้วย kernel patch และ acpid script มันทำงานได้แล้ว

ส่วนที่เหลือที่ฉันต้องการคือ alert daemon เหมือนกับที่ใช้สำหรับปิดเสียงเอาต์พุต แต่ตอนนี้มันก็ไม่สำคัญเท่าไหร่


Lenovo รุ่นใด
ish

@izx Thinkpad X220 4290LY9
เดซี่

แทนที่จะxevใช้acpi-listenในการตรวจสอบและกด, ibm/hotkey HKEY 00000080 0000101bคุณควรจะได้สิ่งที่ต้องการ กรุณาโพสต์รหัสที่นี่
ish

@ izx ไม่มีโชค แต่ฉันสามารถเห็นปุ่มอื่น ๆ เช่น vol ขึ้น / ลดลงคิดว่า vantage
daisy

คุณมีไฟในตัวปุ่มปิดเสียงหรือไม่? นอกจากนี้กดปุ่มสองสามครั้งและโพสต์ผลลัพธ์ของdmesg|tail
ish

คำตอบ:


34

วิธีการนี้ควรใช้กับ Thinkpads ทั้งหมดด้วยปุ่มปิดเสียงซึ่งมีแสงในตัวด้วย มันอาจใช้ได้กับ Thinkpads อื่น ๆ ด้วย

นอกเหนือจากฟองอากาศการแจ้งเตือน:

ป้อนคำอธิบายรูปภาพที่นี่ป้อนคำอธิบายรูปภาพที่นี่

มีตัวบ่งชี้ "ฮาร์ดแวร์" ที่เป็นไปได้สองตัว (เพื่อแสดงว่าปิดหรือเปิดปิดเสียง):

  1. ไฟปุ่มเปิด / ปิดเครื่อง (สีเขียว) จะกะพริบเพื่อแสดงเมื่อปิดเสียง
  2. ไฟปุ่มปิดเสียง Mic (สีส้ม) จะเปิดหรือปิดเพื่อแสดงสถานะปิดเสียง (เหมือนใน Windows)

    โซลูชัน 2 ต้องการthinkpad_acpiโมดูลเคอร์เนลที่มีการปะแก้และแนะนำสำหรับผู้ใช้ขั้นสูงที่รู้ว่ากำลังทำอะไรอยู่ นี่เป็นเพราะโปรแกรมแก้ไขไม่ได้รวมอยู่ในค่าเริ่มต้นของนักพัฒนา thinkpad_acpi ( ดูการสนทนานี้สำหรับรายละเอียดเพิ่มเติม )

ขั้นตอนทั่วไป


การกำหนดรหัสฮอตคีย์ Mic-Mute และอุปกรณ์อินพุต Mic

  • เปิดเทอร์มินัลด้วย 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 / hotkey HKEY 00000080 0000101b
    การกระทำ = / etc / ACPI / lenovo-mutemic.sh
    
  • บันทึกและออกจากโปรแกรมแก้ไข

การเลือกไฟแสดงสถานะ Power Light หรือ Mic Mute


C-1 สคริปต์ Mic-Mute พร้อมไฟแสดงสถานะปุ่มเปิดปิด

  • ทำสิ่งนี้หากคุณต้องการวิธีแก้ปัญหาที่ง่ายและไม่ต้องการใช้โมดูลเคอร์เนลที่ถูกแก้ไข (ดู C-2)
  • เปิดเทอร์มินัลพิมพ์ gksudo gedit /etc/acpi/lenovo-mutemic.sh
  • ในตัวแก้ไขวาง:

    #! / bin / ทุบตี
    INPUT_DEVICE = "'Mic ภายใน"
    your_username = "place_your_username_here"
    ถ้า amixer รับ $ INPUT_DEVICE, 0 | grep '\ [on \]'; แล้วก็
        amixer ตั้งค่า $ INPUT_DEVICE, 0 สลับ
        echo "0 blink"> / proc / acpi / ibm / led
        su $ YOUR_USERNAME -c 'DISPLAY = ": 0.0" การแจ้งเตือน - ส่ง -t 50 \
                -i ความไวของไมโครโฟนปิดเสียงสัญลักษณ์ "Mic MUTED" '
    อื่น
        amixer ตั้งค่า $ INPUT_DEVICE, 0 สลับ                       
        su $ YOUR_USERNAME -c 'DISPLAY = ": 0.0" การแจ้งเตือน - ส่ง -t 50 \
                -i ไมโครโฟนไวสูงเป็นสัญลักษณ์ "Mic ON" '
        echo "0 on"> / proc / acpi / ibm / led 
    Fi
    
  • แทนที่ค่าของตัวแปร INPUT_DEVICE ด้วยCaptureถ้านั่นคือชื่ออุปกรณ์อินพุตของคุณ (ปล่อยให้เห็บทั้งหมดยังคงอยู่)

  • แทนที่ค่าของตัวแปร YOUR_USERNAME ด้วยชื่อบัญชีของผู้ใช้ที่คุณต้องการส่งการแจ้งเตือน
  • บันทึกและออกจากโปรแกรมแก้ไข
  • ตอนนี้เรียกใช้ต่อไปนี้ (จาก terminal):
    sudo chmod + x /etc/acpi/lenovo-mutemic.sh
    sudo บริการ acpid เริ่มต้นใหม่
    
  • ข้ามไปที่ส่วนการทดสอบ (d) เพื่อยืนยันว่าใช้งานได้

C-2 ไมโครโฟนปิดเสียงพร้อมไฟแสดงสถานะปิดไมโครโฟนอย่างเป็นทางการ

การตั้งค่าสคริปต์

  • กรุณาอย่าใช้วิธีนี้หากคุณไม่คุ้นเคยกับ terminal / shell
  • สิ่งนี้จะต้องรวบรวมthinkpad_acpiโมดูลที่ได้รับการติดตั้งและได้รับการตรวจสอบแล้วว่าสามารถทำงานกับ Ubuntu Precise 12.04 และ Quantal 12.10, kernels 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" คุณสามารถดาวน์โหลดได้โดยตรงจากPastebinนี้โดยใช้:

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

    หรือวางด้านล่างลงในไฟล์ที่เรียกว่าMakefile:

    obj-m + = thinkpad_acpi.o
    ทั้งหมด: ทำให้โมดูล -C / lib / modules / $ (shell uname -r) / build M = $ (PWD) โมดูล
    สะอาด ทำให้ -C / lib / modules / $ (shell uname -r) / build M = $ (PWD) ล้าง
  • ตอนนี้พิมพ์makeเพื่อสร้างโมดูล คุณจะเห็นthinkpad_acpi.koไฟล์ในโฟลเดอร์เมื่อเสร็จสิ้น

  • ทดสอบโมดูลที่ได้รับการติดตั้งหลังจากโหลดด้วย:

    sudo rmmod thinkpad_acpi && sudo insmod thinkpad_acpi.ko
    
  • ตอนนี้ยืนยันว่าการกดปุ่ม mic จะเป็นการเปิด / ปิดไฟสัญญาณสีส้มและไฟแสดงการเปิด / ปิดกระพริบ

  • หากได้รับการยืนยันให้ทำดังต่อไปนี้เพื่อแทนที่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 การทดสอบ

  • นอกเหนือจากตัวเลือกตัวบ่งชี้ที่คุณเลือกแล้วคุณยังสามารถยืนยันการปิดเสียงได้ดังต่อไปนี้

อินพุตไมค์

  • คลิกที่ไอคอนระดับเสียงที่ด้านบนขวาและการตั้งค่าเสียงที่ด้านล่าง:
  • สลับไปที่แท็บ "ป้อนข้อมูล"
  • ตอนนี้ขอให้สนุกกดปุ่ม Mic Mute คุณจะเห็นมันสะท้อนให้เห็นใน:

    1. กล่องกาเครื่องหมายปิดเสียงในหน้าต่าง
    2. ฟองอากาศแจ้งเตือน (จะไม่ปรากฏขึ้นทันทีหากคุณกดไมค์ปิดเสียงมากกว่าหนึ่งครั้งทุกสองสามวินาที!)
    3. ตัวบ่งชี้ที่คุณเลือก: ไฟปุ่มเปิด / ปิดกระพริบหรือไฟสัญญาณปิดเสียงไมโครโฟนในตัว

เพิ่มไฟแสดงการทำงานกระพริบเป็นตัวบ่งชี้ - เป็นไปไม่ได้ที่จะใช้แสงไมค์จริงโดยไม่ต้องใช้เคอร์เนลที่กำหนดเอง
ish

1
@Andrey: ฉันได้เพิ่มอินไลน์แพทช์แทนที่จะดาวน์โหลดแหล่งที่แก้ไข โปรดค้นหาหน้าคำตอบPatch it withและคุณจะพบsedบรรทัดที่จำเป็นในการเปิดใช้งาน LED ไมค์ปิดเสียง
ish

2
น่าเสียดายที่ฉันไม่สามารถรวบรวมได้thinkpad_acpi.cอีก Makeผลผลิตที่นี่ มีคนได้โปรดช่วยฉันแก้ไขปัญหานี้ได้ไหม
Andrey

1
13.10 (ทะลึ่ง) ต้องใช้ thinkpad_acpi.c แพทช์ยังคงเหมือนเดิมในคำตอบเดิม สิ่งนี้ใช้ได้กับฉันในเคอร์เนล 3.11.0-15-General (และส่วนหัวที่สอดคล้องกัน)
แดเนียล

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 ยังไม่ได้บูตเครื่องใหม่ แต่ฉันทดสอบด้วยขั้นตอนการทดสอบที่คุณระบุไว้และใช้งานได้กับการเปิดและปิด LED 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

ในฐานะ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.