私は電源ボタンの押しを処理するためにtkinterアプリを作成しましたが、起動する必要があるときは起動しません。 acpi操作として使用すると、echo hello>>~/junk
電源ボタンを押すたびに「hello tojunk」が追加されます。作業コマンドの前にexecまたはドットを追加すると(現在のシェルで実行するために)役に立ちません。どのように動作させることができますか?
編集する:
まあ、MikeJoneseyの助けを借りて問題を解決しましたが、別の問題が発生しました。スクリプトに suid ビットが設定されていても、root 権限でスクリプトを呼び出すため、回復するには xlock 画面で root パスワードを入力する必要があります。
編集2:
次のようにacpiイベントファイルからアプリケーションを起動できるようです。
event=button/power PBTN action=export DISPLAY=:0 && export XAUTHORITY=/home/saga/.Xauthority &&/home/saga/bin/shutdownprompt
ただし、イベントファイルから呼び出されるハンドラスクリプトではありません。
button/power ) if [ "$2" = "PBTN" ];then export DISPLAY=:0 && export XAUTHORITY=/home/saga/.Xauthority && /home/saga/shutdownprompt; fi ;;
以下は、キーを押すたびに呼び出されるデフォルトのハンドラスクリプトの一部です。ここで問題は何ですか?
答え1
Xを使用するには何かを追加する必要があります。
私はそれらをcronjobで使用します(同じことです...)
#*/15 * * * * export DISPLAY=:0.0 && export XAUTHORITY=/home/mike/.Xauthority && /home/mike/bin/defunct-check.sh
これはすべてのスクリプトで機能します。
答え2
この問題に対する簡単な解決策があるはずです。私自身も同様のことを試しました:キーボードボタンを押したときにスクリーンキャプチャプログラム(flameshot)を実行することです。
最後に私に役立つ解決策は、私のホームディレクトリにFIFO(名前付きパイプ)を作成することでした.acpi_execute.pipe
。次に、次のスクリプトを使用します.acpi_execute
。
#!/usr/bin/bash
while true ; do
while IFS='' read command ; do
$command
done < ~/.acpi_execute.pipe
done
私はパフォーマンス(非常に軽量)とタイリング特性のため、GNOME、KDEなどよりi3を好みます。私のi3設定ファイルの一番下には~/.config/i3/config
次のものがあります。
exec ~/.acpi_execute
これにより、デスクトップ環境の起動時に(コンピュータから直接またはリモートVNC接続を介して)スクリプトを実行できます。
上記にはセキュリティ関連の内容が含まれています。たとえば、誰もが上記のパイプに書き込めば、任意のコマンドを実行できます。あなたのように。これは明らかに悪いでしょう。自分が所有するFIFO 600権限を付与することで、これらのリスクを軽減できます。可能なコマンドを制限することもできます。つまり、 を実行せずに、目的の特定の$command
コマンド(例flameshot gui
:)を実行します。