在 acpid 事件上运行脚本

在 acpid 事件上运行脚本

更新到 20.04 后,我发现耳机插孔无法正常工作。因此,作为解决方法,我想到在 acpi 事件上运行脚本。例如,当插入耳机插孔时重新加载声音模块。这是脚本:

#!/bin/sh

#if [ -z "$1" ]; then
#  echo "Pulseaudio has these cards:"
#  pacmd list-cards | grep 'name: '
#fi

MODULE_INDEX=`pacmd list-modules | tac | grep -A 10 -e "argument: .*$1" | grep 'index:' | head -n 1 | cut -d ':' -f 2 | tr -d ' '`
MODULE_NAME=`pacmd list-modules | tac | grep -A 10 -e "argument: .*$1" | grep 'name:' | head -n 1 | cut -d ':' -f 2 | tr -d '<>'`
MODULE_ARGUMENTS=`pacmd list-modules | tac | grep -e "argument: .*$1" | head -n 1 | cut -d ':' -f 2 | tr -d '<>'`
#echo "Module index is $MODULE_INDEX"
#echo "Module name: $MODULE_NAME"
#echo "Module args: $MODULE_ARGUMENTS"

if [ -z "$MODULE_INDEX" ]; then echo "Could not find module index"; exit 0; fi
if [ -z "$MODULE_NAME" ]; then echo "Could not find module name"; exit 0; fi
if [ -z "$MODULE_ARGUMENTS" ]; then echo "Could not find module arguments"; exit 0; fi

#echo "Unloading module"
pacmd unload-module $MODULE_INDEX
#echo ""
#echo "Reloading module"
pacmd load-module $MODULE_NAME $MODULE_ARGUMENTS
#echo ""

如果我手动运行它,它会正常工作。

因此,接下来我想在 acpi 事件上运行它。当我插入插孔时使用 acpi_listen,我得到

jack/headphone HEADPHONE plug

接下来/etc/acpi/events 我创建包含以下内容的文件

event=jack/headphone HEADPHONE plug
action=/etc/acpi/soundcard2.sh

我重新启动 acpid

sudo service acpid restart

(我甚至重启了系统)但是当我插入耳机插孔时什么也没发生。我做错了什么吗?

提前致谢

答案1

我只有 Ubuntu 18.04,所以也许 systemd 在 20.04 中接管了更多 acpi 事件的控制权,你需要找出如何禁用它(例如在 中/etc/systemd/logind.conf)。为了获取日志记录,我在/etc/default/acpid

OPTIONS=--logevents

sudo systemctl restart acpid我插入耳机时,我看到了 systemd 日志中的事件,并且我的脚本运行正常:

$ sudo journalctl -u acpid -f
... acpid[2554]: 9 rules loaded
... acpid[2554]: waiting for events: event logging is on
... acpid[2554]: received input layer event "jack/headphone HEADPHONE plug"
... acpid[2554]: rule from /etc/acpi/events/meuh matched
... acpid[2558]: executing action "/home/meuh/bin/myscript"
... acpid[2554]: action exited with status 0
... acpid[2554]: 1 total rule matched
... acpid[2554]: completed input layer event "jack/headphone HEADPHONE plug"

相关内容