PHPを使用してWebサイトからGUIプログラムを起動する方法

PHPを使用してWebサイトからGUIプログラムを起動する方法

当社にはモニターが接続されておらず、他のファイアウォールの背後にUbuntu 12.04を実行している会社があります。

TeamviewerこのサーバーのローカルWebサイト訪問者は、私(または他のサポートマネージャ)にグラフィカルアクセスを提供するなどのGUIプログラムを実行できる必要があります。

gksu.

sudoersこれを達成するにはどうすればよいですか?

このサーバーで実行されているPHPスクリプトからどのように呼び出すのですか?

もちろん、簡単にsshを使用したり、Xセッションを自分のコンピュータに接続したりできますが、このようなTeamviewerログインが必要です。これは、すべてのサーバーのさまざまなファイアウォールを通過する最も簡単な方法だからです。

答え1

免責事項:私はTeamviewer製品について何も知りませんが、実行したい既存のx-windowsアプリケーションのように扱います。

GUIアプリケーションを起動するには、.xinitrcまたは(一部のデスクトップ環境では)使用を検討してください。~/.config/autostart/

ところで…プログラムをインタラクティブに実行したいと思いますか?つまり、要求に応じて実行する必要があり、デスクトップ環境で実行する必要があります。

まず、www-data ユーザーに sudoer を通じて特別な権限を与えないことをお勧めします。特に、パブリックサービスがあるWebサーバーでこのユーザーを使用している場合は、これがさらに重要です。

「sysadmin」などのユーザーを作成し、適切な権限を付与することをお勧めします。

次に、PHPスクリプトが/ tmp /にフラグファイルを配置し、他のユーザーにそのファイルを処理させるなど、影響の少ない作業を実行します。

だから私は次のPHPスクリプトを持っています:

<?php
   // Trigger for the team view launcher.
   file_put_contents("/tmp/teamviewflag","1");
?>

これにより、次のようなクローン作業が行われます。

* * * * * /home/sysadmin/.jobs/teamstarter.sh

(警告:このスクリプトは1分に1回だけ実行されます。したがって、最大1分待つ必要があります。このスクリプトを繰り返し実行できます。)

それから私は/home/sysadmin/.jobs/teamstarter.sh

#!/bin/bash
if [ -f /tmp/teamviewflag ]
  then
    env DISPLAY=:1 XAUTHORITY=/home/sysadmin/.Xauthority /path/to/teamviewer
    rm /tmp/teamviewflag
fi

これにより、PHPスクリプトで要求に応じて実行されます。大まかなエッジをスポッティングする必要があるかもしれません。

  • Teamviewerは、PHPスクリプトが実行されるたびに実行されます。
  • Bashスクリプトの4行目は、ユーザーがDISPLAY番号を知っていると仮定しています。
  • 「Hey Team Viewer が実行中です」という「ロックファイル」を持ち、そのファイルの存在に応じてスクリプトを実行することもできます。また、チームビューア終了後にロックファイルを後続処理して整理する作業があります。

以下は、ループで実行される上記のスクリプトの例です。

#!/bin/bash
while :
do
  if [ -f /tmp/teamviewflag ]
    then
      env DISPLAY=:1 XAUTHORITY=/home/sysadmin/.Xauthority /path/to/teamviewer
      rm /tmp/teamviewflag
  fi
  # Sleep for a half second.
  usleep 500000  
done

次のように「適切に」実行できます(したがってスケジュールの優先順位が低い)。

nice -n 19 /home/sysadmin/.jobs/teamstarter.sh

起動時に起動するには、次のようにcronタブに配置できます。

@reboot /home/sysadmin/.jobs/teamstarter.sh

関連情報