WSLでGUIアプリ実行エラー:Error: Can’t open display:の対処法

WSL(Windows Subsystem for Linux)上でGUIアプリを動かすまでの手順 ハウツー

WSL(Windows Subsystem for Linux)で、LinuxのGUIアプリを実行しようとして以下のようなエラーが出た。

Error: Can’t open display:

別のGUIアプリではこんなエラー

Error: Unable to initialize GTK+, is DISPLAY set properly?

いずれもディスプレイの設定がされていないときに表示されるエラーだ。
もちろんXサーバ(LinuxのGUI表示を担うソフト)がインストールされていない場合も表示されるので、もしXサーバ自体をインストールしていない場合は以下を参考にWindows用のXサーバをインストールして欲しい。

WSL(Windows Subsystem for Linux)上でGUIアプリを動かすまでの手順
Windows10で利用できる「VcXsrv Windows X Server」というフリーソフトを使ってWSL上で懐かしのxeyesというLinuxのGUIアプリを実行するまでの手順。 Windows10の目玉機能としてWindows上で...

以下の説明は、WSLでUbuntuターミナルを起動し、VcXsrvなどのXサーバソフトを起動した状態で行っているものとする。

 

一時的な対処

ターミナルから以下を入力してディスプレイの設定をLinux側に教えてあげる

export DISPLAY=:0.0

その後該当のLinuxGUIアプリを起動すれば問題なく起動する。

例)xeyes
WSL(Windows Subsystem for Linux)上でGUIアプリを動かすまでの手順

ターミナル起動時に自動設定

単純にターミナル上で「export~」などとした場合、毎回Linuxターミナル起動後にキーボードから「export DISPLAY=:0.0」と入力する必要がある。さすがに骨が折れるので、「.profile」ファイルにこの設定を記述しておく。そうすれば、ターミナルを起動したとき自動的にディスプレイ設定もすませてくれる。

[memo title=”.profileファイルとは?”]
Linuxでログインしたときのユーザホームディレクトリに存在する隠しファイル。
ログイン時に実行したいアプリ・設定などを行うためのファイル。bashなどのシェルスクリプトで記述する。[/memo]

.profileへの記述だが、一応2通りほどある。どちらでもOK。

エディタで.profileを開いて記述する場合(方法1)

viは敷居が高いので、簡単なエディタnanoで説明。

ターミナルから「nano .profile」と入力して.profileを開く。

WSLでGUIアプリ実行エラー:Error: Can't open display:の対処法

最初からいくつか設定やif文などが記述されているはず。
一番最後までスクロールして「export DISPLAY=:0.0」と入力する。

WSLでGUIアプリ実行エラー:Error: Can't open display:の対処法

ちなみにnanoエディタの場合、保存Ctrlキー + Oキーを押した後、エンターキーで保存。
エディタ終了は、Ctrlキー + Xキー

ターミナルからechoコマンドで.profileに追加する場合(方法2)

echoというディスプレイ画面に文字を表示するコマンドは出力先をファイルにも変更できる。
echoを使い、以下のようにターミナルから入力すれば、エディタで最後の行に追加記述したのと同じ意味になる。

echo ‘export DISPLAY=:0.0’ >> .profile

WSLでGUIアプリ実行エラー:Error: Can't open display:の対処法

以上のどちらかの方法で.profileへのディスプレイ設定の記述を終えた後、現在開いているターミナル上でその設定を有効にするために.profileを再読み込みする。

.profileの再読み込みを行う方法

現在実行中のターミナルにおいて、編集後の.profileを適用するには再読み込みが必要。

source .profile

WSLでGUIアプリ実行エラー:Error: Can't open display:の対処法

以上で、次回からはターミナルを起動すればディスプレイ設定も同時に行ってくれる。

ちなみにターミナルを一度終了してから再度ターミナルを起動しても.profileは読み込まれる。

コメント

タイトルとURLをコピーしました