我正在嘗試使用 acpi 事件在鍵盤上編寫一個不起作用的特殊鍵,並且已經讓 acpi 識別按鍵並將其傳遞給 shell 腳本。但是,由於某種原因,我無法執行對 xinput 的呼叫;它總是返回退出代碼 1 並且沒有輸出。手動運行 shell 腳本時它可以工作。
我還注意到,如果我調用,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 身份運行的,而桌面環境可能連結到我的常規用戶帳戶,但我不確定如何解決這個問題...
編輯:當從終端以 root 身份運行 xinput (或以 root 身份手動運行 shell)時,它可以工作。當透過 acpi 啟動的腳本以 root 身分呼叫它時,它不起作用。
有人會建議我如何解決這個問題嗎?
答案1
xinput 需要 DISPLAY 和 XAUTHORITY 環境變數。在腳本頂部“導出”這些。