Доступ к xinput из скрипта acpi bash на Debian

Доступ к xinput из скрипта acpi bash на Debian

Я пытаюсь запрограммировать неработающий специальный ключ на моей клавиатуре с помощью событий acpi и уже заставил acpi распознавать нажатие клавиши и передавать его в скрипт оболочки. Однако по какой-то причине я не могу выполнить вызов xinput; он всегда возвращается с кодом выхода 1 и без вывода. При ручном запуске скрипта оболочки он работает.

Я также заметил, что если я вызываю функцию 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

Я дважды проверил множество вещей (среда должна быть в порядке, она может найти исполняемый файл), и я знаю, что код работал в какой-то момент (он основан на коде, который был отправлен вУбунтув прошлом.

Whoami в скрипте показал, что он запущен от имени пользователя root, в то время как среда рабочего стола, вероятно, связана с моей обычной учетной записью пользователя, но я не уверен, как это исправить...

Редактировать: При запуске xinput как root из терминала (или запуске оболочки вручную как root) он работает. Когда он вызывается как root через скрипт, активированный acpi, он не работает.

Может ли кто-нибудь подсказать, как это исправить?

решение1

xinput нужны переменные окружения DISPLAY и XAUTHORITY. «экспортируйте» их в верхней части скрипта.

Связанный контент