sudo サブプロセスが元のユーザーとして実行された Zenity を更新できるようにする

sudo サブプロセスが元のユーザーとして実行された Zenity を更新できるようにする
  1. ユーザー「従業員」が実行するスクリプトzenity --progress
  2. 次に呼び出しますsudo -u adminBod adminScript(そしてSTDOUTとSTDERRはロガーに収集されます)。
  3. adminScriptアップデートを提供するために、実行中のプログラムがadminBodzenityのSTDINに書き込むことができることを願っています。

1回試してください

私はチャンネル3をzenityのSTDINに接続し、sudoプロセスで書くことができると思いました。

#!/bin/bash
# Main script, run by 'staffer'
{
  echo "# Starting work"
  exec 3>&1
  sudo -u adminBod adminScript 2>&1 | logger -t myTag
  exec 3>&-
  echo "100" # tells Zenity we're at 100% and it can close
} zenity --progress --auto-close
#!/bin/bash
# adminScript, run by adminBod
echo "# some message for zenity" >/dev/fd/3
echo "# some message for zenity" >&3

/dev/fd/3存在しないため動作しませんadminBod

2回試してください

その後、次のような名前付きパイプを使用できると思いました。

staffer% mkfifo -m666 thePipe
staffer% zenity --progress --auto-close <thePipe &
staffer% sudo -u adminBod bash
adminBod% echo '# some update'>/home/staffer/thePipe

これはZenityがメッセージを受け取りましたが、チャンネル/パイプを閉じて(正確な用語がわからないため)、更新を作成できなくなったためです。

答え1

exec 3>thePipe私は以下を使っていくつかの進歩を遂げました...

staffer% mkfifo -m666 thePipe
staffer% zenity --progress --auto-close <thePipe &
staffer% sudo -u adminBod bash
adminBod% exec 3>/home/staffer/thePipe
adminBod% echo '# some update' >&3 
adminBod% sleep 1
adminBod% echo '# some new update' >&3
adminBod% sleep 1
adminBod% echo '100' >&3 # will close due to --auto-close
adminBod% exit # this will also close '3' and cause zenity to close

しかし、問題はadminBodセッションが終了するとパイプラインも終了することです。 sudoサブプロセスが終了した後もzenityを実行し続けたいと思います。

exec 3>thePipe従業員プロセスにaを追加すると、問題が解決することがわかりました。

staffer% mkfifo -m666 thePipe
staffer% zenity --progress --auto-close <thePipe &
staffer% zenityPid=$!
staffer% exec 3>thePipe # 

関連情報