我正在尝试使用 acpi 事件对键盘上不起作用的特殊键进行编程,并且已经让 acpi 识别按键并将其传递给 shell 脚本。但是,由于某种原因,我无法执行对 xinput 的调用;它总是返回退出代码 1 并且没有输出。手动运行 shell 脚本时它可以工作。
我还注意到,如果我调用,xinput --version
手动调用会得到正确的结果,但是当通过 acpi 调用时,它会返回退出代码 1 和Server: failed to open display
,所以我猜这些在某种程度上是相关的。
我的 bash 脚本目前非常简单,但如果我不能调用 xinput,那就毫无价值了(因为我需要能够使用 xinput 命令来启用/禁用)。
#!/bin/bash
touch="0000006b"
if [ "$3" != $touch ]; then
# Ignore, not a touchpad event
echo "$3 is not matching $touch, ignoring"
exit 0
fi
# Process event
echo "Got a touchpad keypress"
getTouchDeviceId()
{
# extract the device id for the supplied touch device name
xinput list | sed -nr "s|.*$1.*id=([0-9]+).*|\1|p"
}
ENABLEPROP="Device Enabled"
# Get the xinput device number and enabling property for the touchpad
XINPUTNUM=$(getTouchDeviceId "PS/2 Elantech Touchpad")
# Removed the rest
我已经仔细检查了很多东西(环境应该没问题,它可以找到可执行文件),而且我知道代码在某些时候是可以运行的(它基于Ubuntu在过去。
脚本中的 whoami 显示它是以 root 身份运行的,而桌面环境可能与我的常规用户帐户相关联,但我不确定如何解决这个问题......
编辑:当从终端以 root 身份运行 xinput 时(或以 root 身份手动运行 shell),它可以正常工作。当通过 acpi 激活的脚本以 root 身份调用它时,它不起作用。
有人能建议我该如何修复这个问题吗?
答案1
xinput 需要 DISPLAY 和 XAUTHORITY 环境变量。在脚本顶部“导出”这些变量。