Я пытаюсь запрограммировать неработающий специальный ключ на моей клавиатуре с помощью событий 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. «экспортируйте» их в верхней части скрипта.