데비안의 acpi bash 스크립트에서 xinput에 액세스

데비안의 acpi bash 스크립트에서 xinput에 액세스

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는 데스크탑 환경이 아마도 내 일반 사용자 계정에 연결되어 있는 반면 루트로 실행되었다고 밝혔지만 어떻게 해결할 수 있을지 모르겠습니다...

편집: 터미널에서 루트로 xinput을 실행하거나 루트로 쉘을 수동으로 실행하면 작동합니다. acpi에 의해 활성화된 스크립트를 통해 루트로 호출되면 작동하지 않습니다.

이 문제를 어떻게 해결할 수 있는지 제안해 줄 사람이 있나요?

답변1

xinput에는 DISPLAY 및 XAUTHORITY 환경 변수가 필요합니다. 스크립트 상단에서 '내보내기'하세요.

관련 정보