私は、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' します。