断开耳机连接时执行什么代码?


Answers:


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


现在,我只需要从ACPI脚本中找出如何使dbus工作,但这是一个不同的问题。
int_ua 2015年

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(睡眠1秒),sleep 60(睡眠1分钟)和sleep 86400(睡眠1天)都使用相同数量的CPU周期。

但是,使用ACPI完美的解决方案,因为ACPI是事件驱动的,而不是轮询驱动的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.