Kulaklık bağlantısının kesilmesinde bir komut dosyası yürütmek istiyorum, ancak değiştiğinde zaten çalıştırılan bir kod olduğunda durumun sürekli yoklanması fikrini yeniden gönderdim.
Kulaklık bağlantısının kesilmesinde bir komut dosyası yürütmek istiyorum, ancak değiştiğinde zaten çalıştırılan bir kod olduğunda durumun sürekli yoklanması fikrini yeniden gönderdim.
Yanıtlar:
Hepsi olmasa da çoğu sistemde, ACPI bu olayı gerçekleştirebilir. Bunu test etmek için:
acpi_listen
Kulaklıkları çıkarın ve yeniden takın, örnek çıkış: (mikrofon / kulaklar dizüstü bilgisayarımdaki aynı jakta paylaşılır)
jack/headphone HEADPHONE unplug
jack/microphone MICROPHONE unplug
jack/headphone HEADPHONE plug
jack/microphone MICROPHONE plug
Put your-script.sh
in/etc/acpi/
Komut dosyanız için bir olay tetikleyici dosyası ekleyin /etc/acpi/events/
event=jack/headphone HEADPHONE unplug
action=/etc/acpi/your-script.sh
Öğrenilecek diğer dosyaları kontrol edin.
acpid
İçindeki değişen kuralları yeniden yüklemek için hizmeti yeniden başlatmanız gerekebilir/etc/acpi/events/
sudo service acpid restart
Referans: man acpid
DBUS_SESSION_BUS_ADDRESS
ile başlayan bir komut dosyası ile ortam değişkenini ev ağınızdaki bir dosyaya yazmanız gerekir ~/.config/autostart/dbus.desktop
. Sonra çalıştırabilirsiniz su YOURUSER -c "DBUS_SESSION_BUS_ADDRESS=$(cat ~/.dbus_address) amixer ......."
den/etc/acpi/your-script.sh
Komut dosyanızın geçerli sürümü artık bir sleep 0.25
komut içeriyor .
sleep
zamanlayıcı tabanlı olduğundan, uyku sırasında herhangi bir işlem döngüsü kullanmaz …
Zamanlayıcıyı ayarlamak için çok küçük bir CPU kullanır, ancak sleep 1
(1 saniye uyku), sleep 60
(bir dakika sleep 86400
uyku ) ve (bir gün uyku) hepsi aynı sayıda CPU döngüsünü kullanır.
ACPI kullanmak , mükemmel bir çözümdür çünkü ACPI, yoklama yerine olay güdümlüdür.