質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.20%

couldn't connect to display :0.0

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,719

lupus

score 0

前提・実現したいこと

matplotlibを使ってGUIに表示するようなプログラムをGUIで行しようとすると以下のエラーが出ました。

_tkinter.TclError: couldn't connect to display "localhost:0.0"
環境はsshや仮想環境ではありません。(venvは使っています)

また、pyqt5を使ったプログラムでも同様に以下のエラーが出ました。
Invalid MIT-MAGIC-COOKIE-1 keyqt.qpa.xcb: could not connect to display :0.0

2時間ほど検索などで情報収集しても、ssh環境での想定がされていることが多く、解決法を見つけられなかったのでお願いします。

発生している問題・エラーメッセージ

・matplotlibを使ったプログラムでのエラーは以下です
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    fig = plt.figure()
  File "/home/hogehoge/ドキュメント/env/tvenv/lib/python3.8/site-packages/matplotlib/pyplot.py", line 670, in figure
    figManager = new_figure_manager(num, figsize=figsize,
  File "/home/hogehoge/ドキュメント/env/tvenv/lib/python3.8/site-packages/matplotlib/pyplot.py", line 298, in new_figure_manager
    return _backend_mod.new_figure_manager(*args, **kwargs)
  File "/home/hogehoge/ドキュメント/env/tvenv/lib/python3.8/site-packages/matplotlib/backend_bases.py", line 3490, in new_figure_manager
    return cls.new_figure_manager_given_figure(num, fig)
  File "/home/hogehoge/ドキュメント/env/tvenv/lib/python3.8/site-packages/matplotlib/backends/_backend_tk.py", line 859, in new_figure_manager_given_figure
    window = tk.Tk(className="matplotlib")
  File "/usr/local/lib/python3.8/tkinter/__init__.py", line 2261, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: couldn't connect to display "localhost:0.0"

・pyqt5を使ったプログラムでのエラーは以下です
Invalid MIT-MAGIC-COOKIE-1 keyqt.qpa.xcb: could not connect to display :0.0
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.

該当のソースコード

・matplotlibでのプログラム
import matplotlib
#matplotlib.use('pdf')
from matplotlib import pyplot as plt
from PIL import Image
import numpy as np
im = np.array(Image.open("hogehoge.png"))

fig = plt.figure()
plt.imshow(im)

x=[100,100,400,400]
y=[200,500,200,500]

plt.plot(x[:2],y[:2],'r*')

fig.savefig("./test.png")
fig.show()


・bashrcの中身
.bashrcの中身
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; the
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

## CUDA paths
export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.1/NsightCompute-2019.1${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

## CUDA paths
export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.1/NsightCompute-2019.1${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

## CUDA paths
export PATH=/usr/local/cuda-10.2/bin:/usr/local/cuda-10.2/NsightCompute-2019.1${PATH:+:${PATH}}

##openpose_path
export PYTHONPATH=/media/hegehoge/0746e58c-9c06-45a5-8029-92750018f1d0/openpose/code/pytorch_Realtime_Multi-Person_Pose_Estimation/lib:$PYTHONPATH
export DISPLAY=localhost:0.0

試したこと

2行目のコメントアウトを外すことで、16行目の画像の保存はできましたが、17行目の画像の表示ができません。
echo $DISPLAYではlocalhost:0.0が表示されます。

補足情報(FW/ツールのバージョンなど)

Ubuntu 18.04.4 LTS
python 3.8.3
matplotlib 3.3.0  
numpy 1.19.1 
Pillow 7.2.0  
pip 19.2.3                                                                                                                                                                                                                                                                                                                                                               

数ヶ月前に,sshでx11を使おうとして、少し設定を変更してしまった可能性が有ります。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • lupus

    2020/08/02 17:15

    @yymmtさん>
    1.同じです。
    2.ping localhostの結果は以下で,接続できていると思います。
    PING localhost (127.0.0.1) 56(84) bytes of data.
    64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.029 ms
    64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.043 ms
    64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.044 ms

    キャンセル

  • yymmt

    2020/08/02 21:07

    問題点の切り分けのために.bashrcの一番下にある
    export DISPLAY=localhost:0.0
    を削除(コメント化)した結果がどうなるか知りたいです。

    キャンセル

  • lupus

    2020/08/02 22:55

    yymmtさん>
    コメントアウト後も同様の結果でした。

    キャンセル

回答 1

check解決した方法

0

export DISPLAY:=1.0
でdisplayの環境変数を1.0にすると直りました。
おそらく、sshでxサーバーを使うときに番号を変えてしまったんだと思います。
もっと早くにこの方法(環境変数をあてずっぽうで変えてみる)試せばよかったです。
回答してくださった方々ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る