在 Debian 上从 acpi bash 脚本访问 xinput

在 Debian 上从 acpi bash 脚本访问 xinput

我正在尝试使用 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 环境变量。在脚本顶部“导出”这些变量。

相关内容