更新到 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"