0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSLgが起動しないとき

Posted at

はじめに

WSLでGUIを使おうとするといつも設定でつまづく。
Webでよく見る資料と違う設定が必要だったのでメモ

環境

Windows 11 Pro 23H2
WSL Ubuntu 22.04
WSL バージョン: 2.4.13.0
カーネル バージョン: 5.15.167.4-1
WSLg バージョン: 1.0.65
VSCode version 1.86.2

結論

GUI、例えばxeyes

$ xeyes
Error: Can't open display:

で動かないときVSCodeから接続していたら~/.bashrcに、SSHとかでアクセスするときは~/.profile

$ export DISPLAY=:0

と追加して再起動か、

sudo bash ~/.bashrc

だったり

sudo bash ~/.profile

すればxeyesが動く。

詳細

数年前の古い資料だとxServerを使おうとかあるけど、Win11ならWSLgが使えるから特に何もしなくても動くよとか検索すると出てくる。

$ sudo apt install x11-apps
$ xeyes

image.png

が出てくるよ、というやつ。
で、以下のようにうまくいかないとき

$ xeyes
Error: Can't open display:

こんなときは

$ export DISPLAY=:0
$ export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

と書けば良い、毎回書くのは面倒なので~/.profileに書きましょうというのも検索したら出てきたけど、書き込んで再起動しても

$ xeyes
Error: Can't open display:localhost:0.0

となってしまう。

.bashrc.profileの違い

手動でexport DISPLAY=:0書けば動くのになんで読み込まれないんだと思っていたけど、もしかしたらVSCode経由でWSL繋いでいるからかと思いChatGPTに聞いてみると、以下の回答が得られた。

.profile

  • ログインシェルで読み込まれる(sshttyとかで直接ログインしたとき)
  • GUIの端末アプリや WSL の通常起動では読み込まれないことが多い

.bashrc

  • インタラクティブな非ログインシェル(たとえば WSL のターミナルを開いたとき)で読み込まれる
  • 普段使う端末環境ではこっちが確実に実行される!

WSLで何が起きてた?

WSL(特に Windows Terminal で開いた場合)は基本的に「非ログインの bash シェル」として起動するから、.profile は読み込まれず、.bashrc が読み込まれる!

なるほど!
古い資料はSSHからの接続が多かったから~/.profileに書けとあったんだな、と納得した。
また、raspberryPiに接続するときなんかもSSHだから、そういうときの作業の記憶と混ざっていたかもしれない。

注意

自分の環境ではPowershellからWSLコマンドで入ったときにはどちらも反映されなかった。環境変数とかいじらないとだめなのかもしれない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?