Tôi muốn thực thi một tập lệnh trên tai nghe ngắt kết nối nhưng tôi bực bội với ý tưởng bỏ phiếu liên tục về trạng thái khi đã có một số mã được thực thi khi nó thay đổi.
Tôi muốn thực thi một tập lệnh trên tai nghe ngắt kết nối nhưng tôi bực bội với ý tưởng bỏ phiếu liên tục về trạng thái khi đã có một số mã được thực thi khi nó thay đổi.
Câu trả lời:
Trong hầu hết các hệ thống nếu không phải tất cả, ACPI có thể xử lý sự kiện này. Để kiểm tra rằng:
acpi_listen
Rút phích cắm và cắm lại tai nghe, ví dụ đầu ra: (mic / tai chia sẻ cùng một giắc cắm trên máy tính xách tay của tôi)
jack/headphone HEADPHONE unplug
jack/microphone MICROPHONE unplug
jack/headphone HEADPHONE plug
jack/microphone MICROPHONE plug
Đưa your-script.sh
vào/etc/acpi/
Thêm tệp kích hoạt sự kiện cho tập lệnh của bạn trong /etc/acpi/events/
event=jack/headphone HEADPHONE unplug
action=/etc/acpi/your-script.sh
Kiểm tra các tập tin khác ở đó để học hỏi.
Bạn có thể cần phải khởi động lại acpid
dịch vụ để tải lại các quy tắc đã thay đổi trong/etc/acpi/events/
sudo service acpid restart
Tài liệu tham khảo: man acpid
DBUS_SESSION_BUS_ADDRESS
biến môi trường vào một tệp trong homedir của bạn với một tập lệnh bắt đầu bằng ~/.config/autostart/dbus.desktop
. Sau đó, bạn có thể chạy su YOURUSER -c "DBUS_SESSION_BUS_ADDRESS=$(cat ~/.dbus_address) amixer ......."
từ/etc/acpi/your-script.sh
Phiên bản hiện tại của tập lệnh của bạn hiện chứa một sleep 0.25
lệnh.
sleep
là dựa trên bộ đếm thời gian nên không sử dụng bất kỳ chu trình xử lý nào khi ngủ ngủ
Nó sử dụng một chút CPU rất nhỏ để thiết lập bộ hẹn giờ, nhưng sleep 1
(ngủ 1 giây), sleep 60
(ngủ trong một phút) và sleep 86400
(ngủ trong một ngày) đều sử dụng cùng một chu kỳ CPU.
Tuy nhiên, sử dụng ACPI là giải pháp hoàn hảo vì ACPI được điều khiển theo sự kiện thay vì theo hướng bỏ phiếu.