Javaを使用して、localhostのポート10.0のディスプレイX11に接続するスクリプトがあります
しかし、私は常にこのエラーが発生します
Java.lang.InternalError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
at Sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at Sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.Java:62)
at Sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.Java:178)
at Java.security.AccessController.doPrivileged(Native Method)
at Sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.Java:142)
at Java.lang.Class.forName0(Native Method)
at Java.lang.Class.forName(Class.Java:186)
at Java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.Java:82)
at Sun.awt.X11.XToolkit.<clinit>(XToolkit.Java:112)
at Java.lang.Class.forName0(Native Method)
at Java.lang.Class.forName(Class.Java:186)
at Java.awt.Toolkit$2.run(Toolkit.Java:849)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.awt.Toolkit.getDefaultToolkit(Toolkit.Java:841)
at ij.io.Opener.openJpegOrGif(Opener.Java:367)
at ij.io.Opener.openImage(Opener.Java:220)
at ij.io.Opener.openImage(Opener.Java:249)
at ij.io.Opener.open(Opener.Java:116)
at ij.IJ.open(IJ.Java:1112)
at ij.macro.Functions.open(Functions.Java:2006)
at ij.macro.Functions.doFunction(Functions.Java:129)
at ij.macro.Interpreter.doStatement(Interpreter.Java:205)
at ij.macro.Interpreter.doBlock(Interpreter.Java:515)
at ij.macro.Interpreter.runUserFunction(Interpreter.Java:278)
at ij.macro.Interpreter.getFactor(Interpreter.Java:1200)
at ij.macro.Interpreter.getTerm(Interpreter.Java:1162)
at ij.macro.Interpreter.getExpression(Interpreter.Java:1145)
at ij.macro.Interpreter.getBooleanExpression(Interpreter.Java:881)
at ij.macro.Interpreter.getLogicalExpression(Interpreter.Java:857)
at ij.macro.Interpreter.getBoolean(Interpreter.Java:850)
at ij.macro.Interpreter.doIf(Interpreter.Java:829)
at ij.macro.Interpreter.doStatement(Interpreter.Java:217)
at ij.macro.Interpreter.doBlock(Interpreter.Java:515)
at ij.macro.Interpreter.doStatement(Interpreter.Java:241)
at ij.macro.Interpreter.doIf(Interpreter.Java:831)
at ij.macro.Interpreter.doStatement(Interpreter.Java:217)
at ij.macro.Interpreter.doStatements(Interpreter.Java:195)
at ij.macro.Interpreter.run(Interpreter.Java:99)
at ij.macro.Interpreter.run(Interpreter.Java:65)
at ij.macro.Interpreter.run(Interpreter.Java:75)
at ij.plugin.Macro_Runner.runMacro(Macro_Runner.Java:127)
at ij.plugin.Macro_Runner.runMacroFile(Macro_Runner.Java:112)
at ij.IJ.runMacroFile(IJ.Java:103)
at ij.ImageJ.main(ImageJ.Java:517)
私はこの問題を解決するためにすべてを試しました:
export DISPLAY=:10.0
export DISPLAY=localhost:10.0
ポート0.0も試しましたが、常に同じエラーが表示されます
xhostを試した後
xhost +local:all
xhost: unable to open display ""
xhost: unable to open display ":10.0"
どうすればこれを修正できますか?Xサーバーが実行されていないと思ったのでstartx
を試してみました
私のシステムはUbuntuサーバーエディション10.04
このコマンドは、問題の解決に役立ちました。
export DISPLAY=:0
起動時に -Djava.awt.headless=true
パラメーターを指定する必要があります。
DISPLAY変数を削除する
unset DISPLAY
これは、ほとんどの場合(たとえば、アプリケーションサーバーまたはその他のJavaベースのツールの起動)に役立ち、多くのコマンドラインをすべて変更することを避けます。
専用のapp-server/toolsユーザーの.bash_profileに追加するのも快適です。
あなたは須藤モードで作業していると思います。ユーザーモードにチェックアウトしてもう一度やり直してください
CI(jenkins、..)でmaven-surefire-pluginを介して自動化された単体テストを実行しようとして、上記のエラーが発生した場合は、必ずsurefireプラグイン構成を更新してください:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<systemPropertyVariables>
<Java.awt.headless>true</Java.awt.headless>
</systemPropertyVariables>
</configuration>
</plugin>
これで修正されます:
/usr/bin/Java -Djava.awt.headless=true $Your_program
ヘッドレスFedora 22を搭載したRaspberry Pi 2にGlassfishをインストールするという無益な努力の数日後、以下は問題なく動作しました
unset DISPLAY
Java -Djava.awt.headless=true -jar glassfissh-installer-v2ur2-b04-linux.jar
here から助けを得た
最初:XQuartzを起動します
2番目:ssh -X user @ ip_address
...:プロセスを開始します
sshしてからXQuartzを起動すると、そのエラーが発生します
私にとっては、-Xの代わりに-Yとしてログインしました。
以下に示すように信頼できないX11がある場合は、代わりに-Yフラグを試してください(ホストを信頼する場合):
警告:信頼できないX11転送セットアップに失敗しました:xauthキーデータは生成されません
解決しました。ログアウトしてxorgでログインするだけです!
私の場合、マシンにスペースが残っていなかったため、同じ問題に直面しました。場合によってはスペースの問題である可能性があります。 Linux/Unix環境のスペースを確認し、マシンに十分なスペースがあることを確認します。
Michael-Oは、問題を解決するための有用なアプローチを提供しました。これを解決する別の方法は、PuTTYコンソールでサーバーを起動することです。
Xmingを使用していて、同様のエラーが発生しました。この問題を解決するために、次の手順が実行されました。
DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY
XXX.XXX.XXX.XX
をIPアドレスに置き換えます。
/ etc/profileで使用または設定されている場合は、まずJenkinsのビルドフェーズでこれを実行します。
unset DISPLAY
export DISPLAY=:0
次に、このプロパティをJavaコードまたはmavenを使用して設定します。-Djava.awt.headless = false
./studio.sh All setを実行する前に、rootからログアウトしませんでした。
動作させる唯一の方法は、テンプレートを使用してスクリプトを実行することでした。例えばsudo ./glassfish-3.1.2.2-unix.sh -sテンプレート
これにより、Glassfishがサイレントモードでインストールされます。 http://docs.Oracle.com/cd/E18930_01/html/821-2427/ghmva.html
Hudsonでこのエラーが表示された場合、ホームディレクトリから.Javaディレクトリを削除してみてください。うまくいく可能性があります。
別のユーザーに変更して、root以外を試してください。わたしにはできる。
Jenkinsからコードをトリガーする場合、「ビルドの前にXvfbを開始し、その後シャットダウンする」オプションを有効にすると役立つ場合があります。助けてくれました。
Ubuntu 17.10の場合、X仮想フレームバッファー(xvfb)をインストールします
apt install xvfb
そして、これらの行を/ etc/profileファイルに追加しました...
# Start the X virtual frame buffer (Xvfb)
if [ -f /usr/X11R6/bin/Xvfb ]; then
/usr/X11R6/bin/Xvfb :1 -screen 0 1366x768x32
fi
# Set the DISPLAY variable for the X virtual frame buffer (Xvfb)
export DISPLAY=localhost:1.0
リモートでjconsoleコマンドを実行すると、同じエラーが発生します。リモートLinuxホストで実行されるjconsoleのパラメーターを変更したいのですが、secureCRTを使用してホストにログインできます。ターミナルはこのエラー情報をスローします。幸いなことに、PuTTYを使用する場合は問題ありません。奇妙な....
私の場合、このエラーはDISPLAYポートに関連していませんでした。 XMLをWindchill(PLMソフトウェア)にロードしようとして、ターミナルで上記のエラーのみを受信しました。ログファイルでXMLファイルが破損しているというレポートを見つけました。たぶん誰かが同様の問題を抱えており、この答えを使うことができます。
Sshでログインしているときにリモートサーバーでアプリケーションを起動する場合は、-x
パラメーターを使用してsshを起動するか、ForwardX11 no
に/etc/ssh/ssh_config
を追加します。この場合、sshは環境変数DISPLAYを作成しません。