ฉันต้องการที่จะรันสคริปต์บนหูฟังตัดการเชื่อมต่อ แต่ฉันไม่พอใจความคิดของการเลือกตั้งอย่างต่อเนื่องของสถานะเมื่อมีอยู่แล้วบางรหัสดำเนินการเมื่อมีการเปลี่ยนแปลง
ฉันต้องการที่จะรันสคริปต์บนหูฟังตัดการเชื่อมต่อ แต่ฉันไม่พอใจความคิดของการเลือกตั้งอย่างต่อเนื่องของสถานะเมื่อมีอยู่แล้วบางรหัสดำเนินการเมื่อมีการเปลี่ยนแปลง
คำตอบ:
ในระบบส่วนใหญ่ถ้าไม่ใช่ทั้งหมด ACPI สามารถจัดการกับเหตุการณ์นี้ได้ เพื่อทดสอบว่า:
acpi_listen
ถอดปลั๊กและถอดหูฟังออกตัวอย่าง: (ไมค์ / หูแบ่งปันในแจ็คเดียวกันบนแล็ปท็อปของฉัน)
jack/headphone HEADPHONE unplug
jack/microphone MICROPHONE unplug
jack/headphone HEADPHONE plug
jack/microphone MICROPHONE plug
ใส่your-script.sh
ใน/etc/acpi/
เพิ่มไฟล์ทริกเกอร์เหตุการณ์สำหรับสคริปต์ของคุณใน /etc/acpi/events/
event=jack/headphone HEADPHONE unplug
action=/etc/acpi/your-script.sh
ตรวจสอบไฟล์อื่น ๆ ที่นั่นเพื่อเรียนรู้จาก
คุณอาจต้องรีสตาร์ทacpid
บริการเพื่อโหลดกฎที่เปลี่ยนใหม่/etc/acpi/events/
sudo service acpid restart
อ้างอิง: man acpid
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
เวอร์ชันปัจจุบันของสคริปต์ของคุณตอนนี้มีsleep 0.25
คำสั่ง
sleep
ใช้ตัวจับเวลาดังนั้นจึงไม่ใช้รอบการประมวลผลใด ๆในขณะที่หลับ ...
มันใช้ CPU เล็ก ๆ น้อย ๆ ในการตั้งค่าตัวจับเวลา แต่sleep 1
(sleep 1 วินาที), sleep 60
(sleep เป็นเวลาหนึ่งนาที) และsleep 86400
(sleep for a day) ทั้งหมดใช้ CPU รอบจำนวนเดียวกัน
การใช้ ACPIเป็นโซลูชั่นที่สมบูรณ์แบบเนื่องจาก ACPI เป็นตัวขับเคลื่อนเหตุการณ์แทนการใช้โพล