「ルート」アクセスを必要とする会社が作成したツールを使用する必要がありました。
さらに悪いことは、GUIアプリケーションであることです。普段ならこんなことはしないだろうけど選択の余地があまりなかったんです。
現在、私は使用しています
xhost + && sudo java -jar servermanager.jar && xhost -
アプリケーションを実行します。ただし、これは、Javaが実行されているときにX-Serverへのアクセス制御が無効になることを意味します。
xhost -
もちろん、これは最も深刻なセキュリティ問題ではないかもしれませんが、アプリケーションがX接続を開くとすぐに問題が発生するように時間を測定するより良い方法があるかどうかはまだ疑問に思います。
重要な要約:GUIウィンドウが開くとすぐにコマンドを実行する方法は?
答え1
ローカルXサーバー
Xサーバーがローカルの場合(たとえば、TCP以外のUnixソケット接続)、さらに細かく分割して特定のローカルユーザーのみを許可できます。
xhost +SI:localuser:root
X SSH経由
そうでない場合は、ルートへの直接SSHアクセスを許可し(公開鍵認証を使用)、このセキュア接続を介してXを渡し、sudo呼び出しの代わりにそれを使用することを検討できます。
ssh -X -f root@localhost java -jar servermanager.jar
.Xauthorityとsudo
ルートがファイルを読み取ることができると仮定すると(おそらくホームディレクトリがNFSにない限り)、sudoで実行されているコマンド環境に1を.Xauthority
入力するだけで接続できることがわかります。XAUTHORITY=$HOME/.Xauthority
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
rootではなく、ユーザーのホームディレクトリです。
答え2
~/.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 -
}
答え3
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ループの後に常に小さな値を維持できます。