มีการใช้รหัสอะไรเมื่อหูฟังถูกตัดการเชื่อมต่อ?


9

ฉันต้องการที่จะรันสคริปต์บนหูฟังตัดการเชื่อมต่อ แต่ฉันไม่พอใจความคิดของการเลือกตั้งอย่างต่อเนื่องของสถานะเมื่อมีอยู่แล้วบางรหัสดำเนินการเมื่อมีการเปลี่ยนแปลง

คำตอบ:


9

ในระบบส่วนใหญ่ถ้าไม่ใช่ทั้งหมด ACPI สามารถจัดการกับเหตุการณ์นี้ได้ เพื่อทดสอบว่า:

  1. วิ่ง acpi_listen
  2. ถอดปลั๊กและถอดหูฟังออกตัวอย่าง: (ไมค์ / หูแบ่งปันในแจ็คเดียวกันบนแล็ปท็อปของฉัน)

    jack/headphone HEADPHONE unplug
    jack/microphone MICROPHONE unplug
    jack/headphone HEADPHONE plug
    jack/microphone MICROPHONE plug
    
  3. ใส่your-script.shใน/etc/acpi/

  4. เพิ่มไฟล์ทริกเกอร์เหตุการณ์สำหรับสคริปต์ของคุณใน /etc/acpi/events/

    event=jack/headphone HEADPHONE unplug
    action=/etc/acpi/your-script.sh
    

    ตรวจสอบไฟล์อื่น ๆ ที่นั่นเพื่อเรียนรู้จาก

  5. คุณอาจต้องรีสตาร์ทacpidบริการเพื่อโหลดกฎที่เปลี่ยนใหม่/etc/acpi/events/

    sudo service acpid restart
    

อ้างอิง: man acpid


ตอนนี้ฉันเพียงแค่ต้องค้นหาวิธีการทำให้ dbus ทำงานได้จาก ACPI scrips แต่นั่นเป็นคำถามที่แตกต่าง
int_ua

2
@int_ua คุณต้องเขียนDBUS_SESSION_BUS_ADDRESSตัวแปรสภาพแวดล้อมเป็นไฟล์ใน homedir ~/.config/autostart/dbus.desktopของคุณกับสคริปต์เริ่มต้นด้วย จากนั้นคุณสามารถเรียกใช้su YOURUSER -c "DBUS_SESSION_BUS_ADDRESS=$(cat ~/.dbus_address) amixer ......."จาก/etc/acpi/your-script.sh
Germar

เฮ้ฉันเขียนสคริปต์เพื่อแสดงการแจ้งเตือน ทำตามสิ่งที่คุณพูด สคริปต์ของฉันเรียกใช้งานการแจ้งเตือน "หูฟังที่เชื่อมต่อ" ในเหตุการณ์ปลั๊ก ดูเหมือนว่ามันจะไม่ทำงาน askubuntu.com/questions/877804/…
thewebjackal

1

เวอร์ชันปัจจุบันของสคริปต์ของคุณตอนนี้มีsleep 0.25คำสั่ง

sleepใช้ตัวจับเวลาดังนั้นจึงไม่ใช้รอบการประมวลผลใด ๆในขณะที่หลับ ...

มันใช้ CPU เล็ก ๆ น้อย ๆ ในการตั้งค่าตัวจับเวลา แต่sleep 1(sleep 1 วินาที), sleep 60(sleep เป็นเวลาหนึ่งนาที) และsleep 86400(sleep for a day) ทั้งหมดใช้ CPU รอบจำนวนเดียวกัน

การใช้ ACPIเป็นโซลูชั่นที่สมบูรณ์แบบเนื่องจาก ACPI เป็นตัวขับเคลื่อนเหตุการณ์แทนการใช้โพล

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