JavaがDISPLAY変数の値として「localhost:10.0」を使用してX11ウィンドウサーバーに接続できない


93

localhostのポート10.0でX11を表示するために接続するためにjavaを使用するスクリプトがあります

しかし、私はいつもこのエラーが出ます

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です。

回答:


35

このコマンドは私が問題を解決するのに役立ちました:

export DISPLAY=:0

39
unset DISPLAY助けてくれました(export DISPLAY=:0エラーが発生しましたCan't connect to X11 window server using ':0'
beluchin、2015

1
どこに置いたのですか
Spektakulatius 2017

1
いつか-Linuxでは機能しないので、aptを使用してXvfbをインストールし、次のような任意の画面で実行すると便利です。Xvfb:1で、ビルドフェーズで変数を設定します-DISPLAY =:1をエクスポートします->これは完全に機能します。
Pankaj Kumar Katiyar


56

-Djava.awt.headless=true起動時にパラメータを指定する必要があります。


多くに感謝しますが、私はこれを正確に指定する必要がありますか?
Elteroooo 2012

1
スレッド「メイン」の例外java.awt.He adlessException at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:1 73)
Elteroooo

セキュリティーマネージャーを実行していますか?もしそうなら、あなたはおそらく許可を与える必要があります。
Michael-O

1
問題のおかげで、Xサーバーは別のポートで実行されていました
Elteroooo '18

1
質問者のプログラムがやりたいことはij.io.Opener.openJpegOrGif、おそらくGUIが必要だと推測できます。したがって、ヘッドレスは別のエラーになりますjava.awt.HeadlessException
ニコラスラウル

40

DISPLAY変数を削除する

unset DISPLAY

これはほとんどの場合に役立ち(アプリケーションサーバーや他のJavaベースのツールの起動など)、コマンドラインの変更を回避できます。

専用のapp-server / toolsユーザーの.bash_profileに追加するのも快適です。


1
それは私をまったく助けませんでした。私はこれを手に入れました:AWT Ca n't connect to X11 window server using ...
Pankaj Kumar Katiyar

アプリでawtを使用している場合は、DISPLAYを正しく設定する必要があります。これは、awtを使用しないアプリ用です。
bebbo 2018

これをいじるときは、bashfileにunsetコマンドを追加した後、必ずmobaXtermを再起動してください。Display変数は前から設定されているので、bashファイルを実行しただけでは変更されません。
mrk 2018


9

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>

1
Gradleでそれを行う方法と、それにプロパティ値を設定する方法。
Sobhit Sharma

7

これはそれを修正します:

/usr/bin/java -Djava.awt.headless=true $Your_program

私を修正しませんでした
Alex Shnyrov

1
これでうまくいきました。ありがとうございました。poiを使用しているため、エラーが発生しました。
dev4life

6

私にとっては、-Xではなく-Yとしてログインすることができました。

以下に示すように信頼できないX11を入手した場合は、代わりに-Yフラグを試してください(ホストを信頼している場合)。

警告:信頼できないX11転送設定に失敗しました:xauthキーデータが生成されていません


4

ヘッドレスフェドーラ22を備えたラズベリーpi 2にGlassfishをインストールするという数日間の無駄な努力の後、以下は問題なく動作しました

 unset DISPLAY
java -Djava.awt.headless=true -jar glassfissh-installer-v2ur2-b04-linux.jar

ここから助けを得


3

まず、XQuartzを起動します

2番目:ssh -X user @ ip_address

...:プロセスを開始する

sshしてからXQuartzを起動すると、そのエラーが発生します


3

最初に、Jenkinsのビルドフェーズで使用するか、/ etc / profileで設定します。

unset DISPLAY
export DISPLAY=:0

次に、Javaコードまたはmavenを使用してこのプロパティを設定します。-Djava.awt.headless = false


3

これで問題が解決しました

xhost +

ただし、xhost +認証が完全に無効になり、誰もが画面上のすべてのアプリケーションにアクセスできるようになることに注意してください。

xhost +si:localuser:root 適切な認証で同様に動作するようです。


2

Xmingを使用していて、同様のエラーが発生しました。この問題を解決するために、次の手順を実行しました。

  1. Xmingの起動時に、アクセス制御なしのボックスをチェックします。
  2. puttyでは、次のコマンドを実行しました。 DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY

XXX.XXX.XXX.XXIPアドレスに置き換えます。


私は同じ構成ですが、機能しませんでした。X11を実行するIPをX0.hostsファイルに追加する必要がありました
Christophe Moine

2

解決しました。私はログアウトしてxorgでログインします!


1
export DISPLAY =:0またはexport DISPLAY =:1が機能しませんでした。ログアウトしてログインすることで解決しました。
Optimus

1

Michael-Oは問題を解決するための有用なアプローチを提供しました。これを解決する別の方法は、Putty Consoleでサーバーを起動することです。


それがどのように機能するかをもう少し説明できますか?(パテを使ったことはありません)
mrk 2018

1

私の場合、マシンにスペースが残っておらず、同じ問題に直面しました。時々それはスペースの問題である可能性があります。Linux / Unix環境のスペースを確認し、マシンに十分なスペースがあることを確認してください。


1

suを使用してディスプレイをエクスポートしようとしても機能しない場合。これは私のために働いたものです。sudoユーザーに対してX11転送を試します。

sshで-Xオプションを使用してリモートホストを接続します。

# ssh -X root@remote-host

現在のユーザーのcoockieセットをリストします。

# xauth list $DISPLAY
    node01.thegeekdiary.com/unix:10  MIT-MAGIC-COOKIE-1  dacbc5765ec54a1d7115a172147866aa
# echo $DSIPLAY
    localhost:10.0

sudoを使用して別のユーザーアカウントに切り替えます。上記のコマンド出力からのクッキーをsudoユーザーに追加します。

# sudo su - [user]
# xauth add node01.thegeekdiary.com/unix:10  MIT-MAGIC-COOKIE-1  dacbc5765ec54a1d7115a172147866aa

手順2の表示をsudoユーザー用に再度エクスポートします。コマンドxclockを試して、xクライアントアプリケーションが期待どおりに動作しているかどうかを確認します。

# export DISPLAY=localhost:10.0

ソース:https : //www.thegeekdiary.com/how-to-set-x11-forwarding-export-remote-display-for-users-who-switch-accounts-using-sudo/


1

以下のコマンドを使用して、$ DISPLAY変数が設定されているかどうかを確認します。

エコー$ DISPLAY

表示変数が設定されていない場合は、以下のコマンドを実行して設定します(設定されている場合でも、セッションで1未満にすることができます)

DISPLAY =:0.0をエクスポートする

puttyでは、xの表示場所も:0.0になります。



0

リモートでjconsoleコマンドを実行すると、同じエラーが発生します。リモートのLinuxホストで実行されているjconsoleでパラメーターを変更したいのですが、secureCRTを使用してホストにログインできます。ターミナルがこのエラー情報をスローします。幸い、パテを使用する場合は問題ありません。おかしい…


0

Hudsonでこのエラーが発生した場合は、ホームディレクトリから.javaディレクトリを削除してみてください。問題が解決する場合があります。


0

sshでログインしているときにリモートサーバーでアプリケーションを起動する場合、別の方法として、-xパラメーターを指定してsshを起動するか、を追加ForwardX11 noします/etc/ssh/ssh_config。この場合、sshは環境変数DISPLAYを作成しません。


0

Jenkinsからコードをトリガーしている場合は、[ビルドの前にXvfbを開始し、後でシャットダウンする]オプションを有効にすると役立つ場合があります。それは私を助けました。




0

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

2
ここで、「スレッド "main"の例外java.awt.AWTError: 'localhost:1.0'をDISPLAY変数の値として使用してX11ウィンドウサーバーに接続できません。」と表示されます。Ubuntu 16.04。Xvfbバイナリは、/ usr / X11R6 / binではなく、/ usr / binにあるようですが、「画面0(EE)を追加できませんでした」と表示されます。
クリスジェンクス2018年

0

私の場合、このエラーはDISPLAYポートとは関係がありませんでした。XMLをWindchill(PLMソフトウェア)にロードしようとして、ターミナルで上記のエラーのみを受け取りました。ログファイルで、XMLファイルが破損しいるというレポートを見つけました。たぶん誰かが同様の問題を抱えており、この答えを使うことができます。


0

私の問題はファイアウォールにありました。一時的に無効にしました。

[編集]そして、サーバーのホスト名が別のIPを指していた。単にlocalserverに設定します。strace xclockこの問題のデバッグに役立ちました。


0

Xorgを使用してログインすることで、この問題を修正しました。デフォルトでは、ウェイランドを使用しました。Waylandは、独自の問題があるXorgの設計上の欠陥のほとんどを排除しているようです。ここに画像の説明を入力してください


-1

私にとっての問題は、xorg-x11-xauthがインストールされていないことでした。私はそれをインストールし、それが機能しました。

私が今持っているパッケージは:

  • libX11-common-1.6.3-2.el6.noarch
  • libX11-1.6.3-2.el6.i686
  • libX11-1.6.3-2.el6.x86_64
  • xorg-x11-drv-ati-firware-7.6.1-2.el6.noarch
  • xorg-x11-xauth-1.0.9-1.el6.x86_64
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.