GUIアプリケーションの起動後にコマンドを実行する


0

「root」権限が必要な自社製のツールを会社で使用する必要があります。

さらに悪いことに、それはGUIアプリケーションです。通常、私はそのようなことを実行しませんが、選択の余地はあまりありません。

現在、私は使用しています

xhost + && sudo java -jar servermanager.jar && xhost -

アプリケーションを実行します。ただし、javaの実行中は、X-Serverへのアクセス制御が無効になります。

確かに、これは最悪のセキュリティ問題ではないかもしれませんがxhost -、アプリケーションがX接続を開いた直後に実行するより良いタイミングメソッドがあるかどうか疑問に思いました。

TL; DR:GUIウィンドウが開いた直後にコマンドを実行するにはどうすればよいですか?


アプリは、あなたがそれを起動するために、数秒待って、バックグラウンドでアプリを置くことができるかもしれない、それ以上のウィンドウを開く必要がない場合には、xhostを呼び出す-
ジェフ・シャラーは

私は決定論的トリガーを好むでしょうが、これもうまくいくはずです... tippをありがとう
-tannerli

pgrepがインストールされていますか?
ジェフシャラー

1
ちょっとした注意- binfmt-miscインストール済みの場合(Linux)、Jarファイルをインタープリターに関連付けることができます(ほとんどのディストリビューションはデフォルトでこれを行います)。ですからchmod +x servermanager.jar、単純に実行できるはず./servermanager.jarです。
トビースパイト

これはXY問題のように聞こえます。なぜあなたは走りたいのxhost +ですか?これは、Xアプリケーションをルートとして実行するために必要ではありません。参照してください。私はrootとして他のユーザーのデスクトップ上にグラフィカルなプログラムを起動することはできますか?
ジル

回答:


1

ローカルXサーバー

Xサーバーがローカル(つまり、TCPではなくUnixソケット接続)の場合、よりきめ細かく、その特定のローカルユーザーのみを許可できます。

xhost +SI:localuser:root

X over SSH

そうでない場合は、ルートへの直接SSHを許可し(公開鍵認証を使用)、Xをこのセキュアな接続を介して転送し、これをsudo呼び出しの代替として使用することを検討できます。

ssh -X -f root@localhost java -jar servermanager.jar

.Xauthorityとsudo

ルートが.Xauthorityファイルを読み取ることができると仮定すると(おそらく、ホームディレクトリがNFS上にない限り)、XAUTHORITY=$HOME/.Xauthoritysudo内で実行されるコマンドの環境に¹を置くだけで接続できることがわかります。

XAUTHORITY="${XAUTHORITY-$HOME/.Xauthority}" \
  sudo -E java -jar servermanager.jar

sudoが通過を許可しないように構成されている場合XAUTHORITY、トークンを明示的にエクスポートできます。

.Xauthorityおよびxauth

xauth extract - $DISPLAY | sudo bash -c \
  "xauth merge - && java -jar servermanager.jar"

¹ $HOMEここはルートではなくユーザーのホームディレクトリです。


0

〜/ .bash_aliasesに以下を入れます

   smg(){
     xhost + 
     sudo echo "Starting servermanager" #To get sudo prompt in fg
     sudo java -jar ~/downloads/servermanager.jar 2>/dev/null &
     sleep 5
     xhost -
    }

0

pgrepをインストールしている場合は、次のようにして決定性を高めることができます。

smg(){
  xhost + 
  sudo echo "Starting servermanager" #To get sudo prompt in fg
  sudo java -jar ~/downloads/servermanager.jar 2>/dev/null &
  while  ! pgrep -l servermanager.jar > /dev/null ; do :; done
  xhost -
}

...最終的なプロセス名が何であるかに応じて。発射が速すぎることが判明した場合sleep、whileループの後で常に小さい値を維持できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.