Я пытаюсь запрограммировать нерабочую специальную клавишу на клавиатуре, используя события 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
Я дважды проверил много вещей (среда должна быть в порядке, она может найти исполняемый файл), и я знаю, что код работал в некоторый момент (он основан на коде, который поставлялся в Ubuntu в прошлом.
Whoami-сценарий показал, что он запускается с правами root, а среда рабочего стола, вероятно, связана с моей учетной записью обычного пользователя, но я не уверен, как это исправить ...
Редактировать: при запуске xinput как root с терминала (или при запуске оболочки вручную как root), это работает. Когда он вызывается как root через скрипт, активированный acpi, он не работает.
Будет ли у кого-нибудь предложение, как я могу это исправить?