Debian の acpi bash スクリプトから xinput にアクセスする

Debian の 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 により、スクリプトが root として実行されていることが明らかになりましたが、デスクトップ環境はおそらく通常のユーザー アカウントにリンクされていますが、これを修正する方法がわかりません...

編集: ターミナルから root として xinput を実行すると (または、シェルを root として手動で実行すると)、動作します。acpi によってアクティブ化されたスクリプトを通じて root として呼び出されると、動作しません。

これを修正する方法について誰か提案はありますか?

答え1

xinput には DISPLAY および XAUTHORITY 環境変数が必要です。スクリプトの先頭でこれらを 'export' します。

関連情報