Я пытаюсь запрограммировать нерабочую специальную клавишу на клавиатуре, используя события 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, он не работает.

Будет ли у кого-нибудь предложение, как я могу это исправить?

1 ответ1

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .