中央制御ステーションを備えた分散システムで作業しています。この中央制御ステーションには、Fedora 16 と専用の SystemD デーモンを実行している任意の数のリモート コンピューターに接続するソフトウェアがあります。接続されると、コントロール ステーションはこれらのデーモンにメッセージを送信して、中央コントロール ステーションとのユーザー インタラクションに使用されるさまざまな GUI システムを起動します。
現在、これには大きな欠点があります。これらのリモート コンピュータでは、GUI を起動する前に特定のユーザーがログインする必要があります。このユーザーは、SystemD デーモンを実行しているユーザーと同じです。これらのリモート コンピューターがログインしていない場合、次の Java エラーが表示されます。
Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.
デーモンは Java (最新の Java 7 を使用) で記述されており、次のコードを使用して GUI を起動します。
String command = "java -Xmx2000M -cp ...{java classes etc to run}"
ProcessBuilder pb = new ProcessBuilder(command.split("\\s+"));
pb.redirectErrorStream(true);
pb.environment().put("DISPLAY", ":0.0");
try
{
p = pb.start();
...
これは、ユーザーが正しくログオンしている場合の正しい DISPLAY 変数です。デーモン自体は、起動時に Display があることを認識していないため、現在 ProcessBuilder で DISPLAY 変数を設定しています。
これらのシステムを実行する前に手動でログインする必要がないように、デーモンを介してJavaまたはその他の手段を介してX11ウィンドウサーバーに適切に接続/ログオンする方法はありますか?
現在、これらのシステムはすべて、起動時に適切なユーザーとして KDE に自動ログインしますが、これはあまり安全なソリューションではなく、ランダムにログアウトする傾向があり、リモート ステーションとして機能しなくなります。