Windows Subsystem for Linux

作成日 : 2017-12-09
最終更新日 :

Windows Subsystem for Linux とは

Windows Subsystem for Linux (WSL) とは、 Windows で動く Linux である。 Linux にも種類がいろいろあり WSL でも選べるが、 私が選んだのは Ubuntu である。なお、Ubuntu については、 Ubuntu についてでも述べている。

やったこと

下記参考リンクの通り一部おこなった。

あとでしたこと

下記参考リンクのうち、まだ行なっていない作業を行なった。次の通り。

リポジトリの変更(Bash On Ubuntu on Windows, Ubuntu 16)

インストール当初では、リポジトリは下記のようになっている。

$ cat /etc/apt/souces.list
deb http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse

これを次のコマンドで日本のサーバを見に行くように修正する。

$ sudo sed -i -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.list

修正後は次のようになり、日本のサーバを見に行くようになっていることがわかる。

$ cat /etc/apt/souces.list
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu trusty main restricted universe multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu trusty-updates main restricted universe multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu trusty-backports main restricted universe multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu trusty-security main restricted universe multiverse

リポジトリの変更(Windows Subsystem for Linux, Ubuntu 20.04)

インストール当初では、リポジトリは下記のようになっている。

$ cat /etc/apt/souces.list
deb http://archive.ubuntu.com/ubuntu/ focal main restricted
deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted
(後略)

これを次のコマンドで日本のサーバを見に行くように修正する。

$ sudo sed -i -e 's%http://.*.ubuntu.com/ubuntu/%http://www.ftp.ne.jp/Linux/packages/ubuntu/archive/%g' /etc/apt/sources.list

修正後は次のようになり、日本のサーバを見に行くようになっていることがわかる。

$ cat /etc/apt/souces.list
deb http://www.ftp.ne.jp/Linux/packages/ubuntu/archive/ focal main restricted
deb http://www.ftp.ne.jp/Linux/packages/ubuntu/archive/ focal-updates main restricted
(後略)

以上、2020-08-08

apt の使い方

今は apt-get や apt-cache を使うより、apt を使うのがよいようだ。 apt update は apt の内部にある、利用可能なパッケージのリストを更新する。 apt upgrade は、その更新されたリストにしたがって実際にパッケージを更新する。 ということは、ふつうは apt update をしたあとで、apt upgrade をすべきだろう。

旧 β 版のBash On Ubuntu on Windows を消す

> lxrun /uninstall

日本語環境を整える

$ sudo apt-get install language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8

idle3 を使えるようにするには

python3 の対話型開発環境に idle3 があるが、そのままでは使えない。

$ sudo apt install idle3
(中略)
$ idle3
コマンド 'idle3’ がみつかりません。
(中略)
$ idle

仕方がない。ubuntu デスクトップ環境を導入するしかない。 下記参考リンク(ottan.xyz)を見ると時間がかかると書いてある。

$ sudo apt install ubuntu-desktop

インストールの可否のダイアログで、 新規インストール数 1035 という表示があった。パッケージの数だろう。 Y を選んで気長に待つことにする。15 分たって進捗が 6 % である。ということは、 全部で 150 分かかるだろう。部屋の掃除をしよう。

そうこうしているうちに終わった。1 時間弱といったところか。

そのあとでvcxsrv もインストールした。

しかし、そのあとがうまくいかなかった。
$ DISPLAY=0:0 XDG_SESSION_TYPE=x11 gnome-session
(中略)
(gnome-initial-setup:20847): InitialSetup-ERROR **: 14:05:42.320: Failed to create proxy for timedated: Could not connect: 接続を拒否されました

せっかくインストールした ubuntu-desktop だが、消すことにした。

$ sudo apt remove ubuntu-desktop

これを行うとパッケージそのものしか消せず、関連したパッケージは消せない。

$ sudo apt autoremove ubuntu-desktop

こちらで関連パッケージを含めて削除できる。

xfce4

懲りずに、別のデスクトップ環境だったら動くのではないかと思い、下記 it-blue-collar-dairy.com サイトで紹介されていた xfce4 を入れることをした。

上記のページでは .bashrc に環境変数を設定している。 私も倣って ~/.bashrc を編集しようとしたら、色がついていてわかりにくかった。 そこで、~/.bashrc を vim で開いて、コマンドモードで次を入力した:
:syntax off すると色付けがなくなった。

インストールはというと、デスクトップまでは出たのだが、 結局 idle3 はインストールできなかった。したがって、xfce4 関連のパッケージも sudo apt autoremove した。

LXDE

xfce4 で失敗したが、懲りずに別のデスクトップ環境を試してみた。 LXDE である。次の記事を参考にした。

https://www.makeuseof.com/tag/linux-desktop-windows-subsystem/

まず、LXDE を次の手順でインストールした。

$ sudo apt install lxde
(中略) アップグレード: 0 個、新規インストール: 284 個、削除: 0 個、保留: 0 個。 131 MB のアーカイブを取得する必要があります。 この操作後に追加で 454 MB のディスク容量が消費されます。 続行しますか? [Y/n] Y (中略) ┌──────────────────┤ lightdm を設定しています ├────────────────────────┐ │ A display manager is a program that provides graphical login capabilities for the X Window System. │ │ │ │ Only one display manager can manage a given X server, but multiple display manager packages are installed. │ │ Please select which display manager should run by default. │ │ │ │ Multiple display managers can run simultaneously if they are configured to manage different servers; to achieve │ │ this, configure the display managers accordingly, edit each of their init scripts in /etc/init.d, and disable │ │ the check for a default display manager. │ │ │ │ Default display manager: │ │ │ │ gdm3 │ │ lightdm │ │ │ │ │ │ <了解> │ │ │ └─────────────────────────────────────────────────────────┘

gdm3 か lightdm のどちらかを選択しなければならない。 デフォルトでは gdm3 にフォーカスが当たっているが、lightdm にするのがよさそうだ。 下矢印キーを押せば lightdm にフォーカスが移動する。
そしてタブキーを押して了解にフォーカスを移して Enter キーを押す。そこで継続され、 さらにもろもろがインストールされ、終了する。

次にどうしたらよいかわからなかったが、XLaunch を起動し、 lxsession というコマンドを打てばよいことがわかった。
https://ponu2.blogspot.com/2016/11/bash-on-ubuntu-on-windows-xubuntu.html

$ lxsession
** Message: 16:22:44.191: main.vala:102: Session is (null)
** Message: 16:22:44.193: main.vala:103: DE is (null)
** Message: 16:22:44.194: main.vala:107: No session set, fallback to LXDE session
** Message: 16:22:44.195: main.vala:113: No desktop environnement set, fallback to LXDE
** Message: 16:22:44.321: main.vala:134: log directory: /home/username/.cache/lxsession/LXDE
** Message: 16:22:44.322: main.vala:135: log path: /home/username/.cache/lxsession/LXDE/run.log	

怪しい文字列だが、X には何やらデスクトップが表示されていて、さらに次のウィンドウも出ていた。

	アプリケーション Software Updater が予期せず終了しました。
	問題のレポートを開発者に送信しますか?
	■ この選択を記憶する
	□ 今後このパージョンのプログラムの問題を無視する
	□ このアプリケーションを再起動する
	[詳細]   [送信しない]  [送信] 	

「この選択を記憶する」のチェックを外し、[送信しない]をクリックした。 その後「ログに保存しますか」といういみのダイアログが出たが、[No]を選択した。 その後はファイルマネージャーやターミナルが起動することを確かめた。なんとかなったか。

なお、VcXsrv は lxsession を起動するデスクトップとは別の仮想デスクトップで動かすのがいいだろう。 仮想デスクトップは Ctrl-Windows → キーで次のデスクトップに、 Ctrl-Windows ← で前のデスクトップに遷移する。

VsXsrv を起動すると、スクリーンの種類選択の画面が出てくる。私は、Full Screen を選ぶ。

参考リンク

XDG_RUNTIME_DIR

WSL Ubuntu 20.04 を使って python3 の matplotlib ライブラリの show() メソッドでプロット画像を出そうとすると、 次のメッセージが出る。なお、プロット画像自身は正しく表示される。

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-xxxxxx'

下記のリンク先にならって、.bash_profile (.profile) に環境変数を設定した。

WSLでgnuplotを動かすとlibGL errorになる (volvox.hateblo.jp)

ほとんどはコマンドラインで足りているので X Windows System を動かすことはないが、 10進 BASIC だけは X Windows System を使っている。

WSL から WSL2 へ

今までの記述は、WSL に対するものである。WSL2 に対するものではなかった。 WSL2 にするには、 Windows 10 のバージョン 1903 と呼ばれるパッチを当てないといけないのだが、 このパッチが必ず失敗するのだった。悲しい。

ところが、2021 年 1 月 15 日にアップデートの案内が来た。今度もだめだろうとあきらめたが、 ダメでもともと、アップデートを仕掛けたら、無事に成功した。今度のアップデートは 20H2 と呼ばれるものだ。 この Windows なら、WSL から WSL2 に移行できるに違いない。次のように変換を実行してみた。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6

PS C:\WINDOWS\system32> wsl.exe -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         1
PS C:\WINDOWS\system32> wsl.exe --set-version Ubuntu-20.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。
PS C:\WINDOWS\system32> wsl.exe -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2
PS C:\WINDOWS\system32>

変換には、私の環境で数分どころか 3 時間弱かかった。

以後 WSL2 をデフォルトとするので、下記を実行する。

PS C:\WINDOWS\system32> wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください

これで WSL2 へのバージョンアップは完了だ。

Windows Terminal をインストールする

WSL2 のインストールに伴い、Windows Terminal のインストールを勧める記事が多い。 今まで WSL を使うときは PowerShell のターミナルを起動して、bash とコマンドで打っていたので、 その手間が軽くなるようだ。 Windows Terminal には WSL2 が必要なのかはわからないが、便利なようなので、インストールしてみた。 Windows Terminal を起動するとデフォルトでは PowerShell の端末になるが、 Ubuntu-20.04 も選べた。これからは Windows Terminal を使おう。

systemd を動かす

WSL では、せっかく Linux を起動しても systemd は動いていなかった。 こんな感じだ。

$ systemctl status
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: ホストが落ちています

systemd を動かすにはいろいろな方法があるが、今回は genie を使うことにした。

https://github.com/arkane-systems/genie/releases/tag/1.31
にある、systemd-genie_1.31_amd64.deb を使う。次の準備をする。

$ sudo apt update
(中略)
$ sudo apt-get install apt-transport-https
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
apt-transport-https はすでに最新バージョン (2.0.2ubuntu0.2) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 99 個。
$ sudo apt-get install aspnetcore-runtime-3.1
(base) $ sudo apt install aspnetcore-runtime-3.1
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  dotnet-hostfxr-3.1 dotnet-runtime-3.1 dotnet-runtime-deps-3.1
以下のパッケージが新たにインストールされます:
  aspnetcore-runtime-3.1
以下のパッケージはアップグレードされます:
  dotnet-hostfxr-3.1 dotnet-runtime-3.1 dotnet-runtime-deps-3.1
アップグレード: 3 個、新規インストール: 1 個、削除: 0 個、保留: 96 個。
27.3 MB のアーカイブを取得する必要があります。
この操作後に追加で 17.9 MB のディスク容量が消費されます。
続行しますか? [Y/n]Y
(後略)
$ sudo dpkg -i systemd-genie_1.31_amd64.deb
以前に未選択のパッケージ systemd-genie を選択しています。
(データベースを読み込んでいます ... 現在 184461 個のファイルとディレクトリがインストールされています。)
systemd-genie_1.31_amd64.deb を展開する準備をしています ...
systemd-genie (1.31) を展開しています...
dpkg: 依存関係の問題により systemd-genie の設定ができません:
 systemd-genie は以下に依存 (depends) します: dotnet-runtime-5.0 ...しかし:
  パッケージ dotnet-runtime-5.0 はまだインストールされていません。
 systemd-genie は以下に依存 (depends) します: systemd-container ...しかし:
  パッケージ systemd-container はまだインストールされていません。

dpkg: パッケージ systemd-genie の処理中にエラーが発生しました (--install):
 依存関係の問題 - 設定を見送ります
man-db (2.9.1-1) のトリガを処理しています ...
処理中にエラーが発生しました:
 systemd-genie
$ sudo apt install systemd-container dotnet-runtime-5.0
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
 dotnet-runtime-5.0 : 依存: dotnet-runtime-deps-5.0 (>= 5.0.2) しかし、インストールされようとしていません
                      依存: dotnet-hostfxr-5.0 (>= 5.0.2) しかし、インストールされようとしていません
E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)。
$ sudo apt --fix-broken install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
依存関係を解決しています ... 完了
以下の追加パッケージがインストールされます:
  dotnet-host dotnet-hostfxr-5.0 dotnet-runtime-5.0 dotnet-runtime-deps-5.0 libnss-mymachines systemd-container
以下のパッケージが新たにインストールされます:
  dotnet-hostfxr-5.0 dotnet-runtime-5.0 dotnet-runtime-deps-5.0 libnss-mymachines systemd-container
以下のパッケージはアップグレードされます:
  dotnet-host
アップグレード: 1 個、新規インストール: 5 個、削除: 0 個、保留: 95 個。
1 個のパッケージが完全にインストールまたは削除されていません。
22.7 MB のアーカイブを取得する必要があります。
この操作後に追加で 72.2 MB のディスク容量が消費されます。
続行しますか? [Y/n]Y
(後略)
$ sudo dpkg -i systemd-genie_1.31_amd64.deb
(データベースを読み込んでいます ... 現在 184743 個のファイルとディレクトリがインストールされています。)
systemd-genie_1.31_amd64.deb を展開する準備をしています ...
systemd-genie (1.31) で (1.31 に) 上書き展開しています ...
systemd-genie (1.31) を設定しています ...
man-db (2.9.1-1) のトリガを処理しています ...

genie の起動方法は下記のページにある「genie の起動方法」の通り設定した。
https://www.school.ctc-g.co.jp/columns/miyazaki/miyazaki22.html

ところが、こんなメッセージが裏で動いている:
waiting for systemd....!!!!! (さらに!が続くが省略)
起動に失敗したかと思ったが、! が 100 ぐらい続いたあとやっと systemd が起動した。 では、sytemctl はどうだろうか。

$ systemctl status
● username-PC-wsl
    State: degraded
     Jobs: 0 queued
   Failed: 6 units
    Since: Fri 2021-01-15 20:00:14 JST; 6min ago
   CGroup: /
           ├─init.scope
           │ └─23 systemd
           └─system.slice
			 ├─irqbalance.service
			 (後略)

うまく動いているようだ。よかった。 ただ、2度めに起動したときはうまくいっていなかったので、手動で次のコマンドを PowerShell から打ってみた。
> wsl -d Ubuntu-20.04 -- /usr/bin/genie -i
しかし、! が 120 ほど続いたあと、次のメッセージが出て起動に失敗したようだった。
Timed out waiting for systemd to enter running state. This may indicate a systemd configuration error. Attempting to continue.
だが、 $ systemctl status
は、State 以下、Jobs, Failed, Since, CGroup が表示されていて、 うまく動いたときと同じように表示されている。よくわからない。

XLaunch と lxsession

WSL2 にしたのち、なぜか lxsession がうまくいかない。XLaunch を立ち上げたのち、 Ubuntu 側で lxsession コマンドを実行したが、デスクトップ画面が出ない。

$ lxsession
** Message: 10:48:42.830: main.vala:102: Session is (null)
** Message: 10:48:42.830: main.vala:103: DE is (null)
** Message: 10:48:42.830: main.vala:107: No session set, fallback to LXDE session
** Message: 10:48:42.831: main.vala:113: No desktop environnement set, fallback to LXDE

(lxsession:2321): Gtk-WARNING **: 10:48:42.833: cannot open display: localhost:0.0

この cannot open display 問題は WSL2 になって出てきた。下記の対応をして解決した。

私の場合は、~/.profile に次の行を追加した。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0

それから、スタートアップは、lxsession を直に呼び出すのではなく、 startlxde を使うべきだろう。

$ startlxde
** Message: 19:38:36.078: main.vala:102: Session is LXDE
** Message: 19:38:36.078: main.vala:103: DE is LXDE
** Message: 19:38:36.078: main.vala:134: log directory: /home/username/.cache/lxsession/LXDE
** Message: 19:38:36.078: main.vala:135: log path: /home/username/.cache/lxsession/LXDE/run.log

さて、run.log を見たら、次のようなログがあった。

** Message: 08:56:03.569: environement.vala:58: Exporting primary_variable
** Message: 08:56:03.569: environement.vala:59: desktop_environnement XDG_CURRENT_DESKTOP
** Message: 08:56:03.569: environement.vala:150: confir_dirs is null, export : /etc/xdg
** Message: 08:56:03.569: environement.vala:184: Exporting XDG_CONFIG_DIRS
** Message: 08:56:03.570: environement.vala:218: custom_data :/usr/local/share:/usr/share:/usr/share/gdm:/var/lib/menu-xdg:
** Message: 08:56:03.570: environement.vala:219: data_dirs :/usr/local/share/:/usr/share/:/usr/share/gdm/:/var/lib/menu-xdg/
** Message: 08:56:03.570: environement.vala:220: data_dirs not null, →
  export : /usr/local/share:/usr/share:/usr/share/gdm:/var/lib/menu-xdg:/usr/local/share/:/usr/share/:→
  /usr/share/gdm/:/var/lib/menu-xdg/
** Message: 08:56:03.570: environement.vala:225: Exporting XDG_DATA_DIRS
** Message: 08:56:03.573: utils.vala:68: User config used : /home/username/.config/lxsession/LXDE/desktop.conf
** Message: 08:56:03.573: utils.vala:89: Final file used : /home/username/.config/lxsession/LXDE/desktop.conf
** Message: 08:56:03.575: settings.vala:540: Key file does not have key “iGtk/ColorScheme” in group “GTK”
(以下 Key file does not have key が数十行並ぶ)
** Message: 08:56:03.577: settings.vala:462: Monitoring: /home/username/.config/lxsession/LXDE/desktop.conf
** Message: 08:56:03.577: settings.vala:466: Desktop file is already in config home, do nothing
** Message: 08:56:03.577: settings.vala:373: Settings default for Session, windows_manager, command : openbox
** Message: 08:56:03.577: settings.vala:373: Settings default for Session, windows_manager, session : LXDE
** Message: 08:56:03.578: settings.vala:373: Settings default for Session, launcher_manager, command : lxpanelctl
** Message: 08:56:03.578: environement.vala:79: Exporting variable
** Message: 08:56:03.578: environement.vala:80: desktop_environnement XDG_CURRENT_DESKTOP
** Message: 08:56:03.578: environement.vala:177: custom_config :
** Message: 08:56:03.578: environement.vala:178: config_dirs :/etc/xdg
** Message: 08:56:03.578: environement.vala:179: confir_dirs not null, export : /etc/xdg
** Message: 08:56:03.578: environement.vala:184: Exporting XDG_CONFIG_DIRS
** Message: 08:56:03.578: environement.vala:218: custom_data :
** Message: 08:56:03.578: environement.vala:219: data_dirs :/usr/local/share:/usr/share:/usr/share/gdm: →
   /var/lib/menu-xdg:/usr/local/share/:/usr/share/:/usr/share/gdm/:/var/lib/menu-xdg/
** Message: 08:56:03.578: environement.vala:220: data_dirs not null, export : /usr/local/share:/usr/share: →
   /usr/share/gdm:/var/lib/menu-xdg:/usr/local/share/:/usr/share/:/usr/share/gdm/:/var/lib/menu-xdg/
** Message: 08:56:03.580: environement.vala:225: Exporting XDG_DATA_DIRS
** Message: 08:56:03.580: utils.vala:68: User config used : /home/username/.config/lxsession/LXDE/desktop.conf
** Message: 08:56:03.580: utils.vala:89: Final file used : /home/username/.config/lxsession/LXDE/desktop.conf
** Message: 08:56:03.580: environement.vala:254: No entry in [Environment_variable]. Key file does not have group “Environment_variable”
** Message: 08:56:03.584: utils.vala:79: Config system location : /etc/xdg/lxsession/LXDE
** Message: 08:56:03.596: utils.vala:85: System system path location : /etc/xdg/lxsession/LXDE/conffiles.conf
** Message: 08:56:03.596: utils.vala:89: Final file used : /etc/xdg/lxsession/LXDE/conffiles.conf
** Message: 08:56:03.598: options.vala:164: Activate xsettings_manager build-in
** Message: 08:56:03.598: utils.vala:68: User config used : /home/username/.config/lxsession/LXDE/desktop.conf
** Message: 08:56:03.598: utils.vala:89: Final file used : /home/username/.config/lxsession/LXDE/desktop.conf
xprop:  no such property "_NET_NUMBER_OF_DESKTOPS"
xprop:  no such property "_NET_DESKTOP_NAMES"
** Message: 08:56:03.643: app.vala:721: polkit separate
** Message: 08:56:03.643: app.vala:721: polkit separate
** Message: 08:56:03.649: app.vala:76: Launching lxpolkit
** Message: 08:56:03.649: utils.vala:68: User config used : /home/username/.config/lxsession/LXDE/autostart
** Message: 08:56:03.649: utils.vala:89: Final file used : /home/username/.config/lxsession/LXDE/autostart
** Message: 08:56:03.650: autostart.vala:42: Autostart path : /home/username/.config/lxsession/LXDE/autostart
** Message: 08:56:03.656: app.vala:76: Launching lxpanel
** Message: 08:56:03.668: app.vala:76: Launching pcmanfm
** Message: 08:56:03.672: app.vala:76: Launching xscreensaver
** Message: 08:56:03.698: options.vala:107: Create build-in Clipboard
** Message: 08:56:03.757: main.vala:442: Check keymap_mode (null)
** Message: 08:56:03.801: app.vala:76: Launching /usr/bin/ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Hy9lVcwOLMdA/agent.1376; export SSH_AUTH_SOCK;
SSH_AGENT_PID=1379; export SSH_AGENT_PID;
echo Agent pid 1379;
** Message: 08:56:03.990: app.vala:130: /usr/bin/ssh-agent exit with this type of exit: 0
** Message: 08:56:04.083: x-terminal-emulator has very limited support, consider choose another terminal
** Message: 08:56:04.129: x-terminal-emulator has very limited support, consider choose another terminal
エラー: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Tracker1 was not provided by any .service files
接続失敗: 接続拒否
pa_context_connect() は失敗: 接続拒否

(lxpanel:1368): GLib-GObject-CRITICAL **: 08:56:05.050: g_object_unref: assertion 'G_IS_OBJECT (object)' failed

(lxpanel:1368): GLib-GObject-CRITICAL **: 08:56:05.065: g_object_unref: assertion 'G_IS_OBJECT (object)' failed

** (lxpanel:1368): WARNING **: 08:56:05.111: Binding 'XF86AudioRaiseVolume' failed!

** (lxpanel:1368): WARNING **: 08:56:05.113: Binding 'XF86AudioLowerVolume' failed!

** (lxpanel:1368): WARNING **: 08:56:05.115: Binding 'XF86AudioMute' failed!

** (lxpanel:1368): WARNING **: 08:56:05.200: lxpanel: can't load volume plugin

(lxpanel:1368): GLib-GObject-CRITICAL **: 08:56:05.224: g_object_unref: assertion 'G_IS_OBJECT (object)' failed

(lxpanel:1368): GLib-GObject-CRITICAL **: 08:56:05.227: g_object_unref: assertion 'G_IS_OBJECT (object)' failed

** (light-locker:1424): ERROR **: 08:56:05.274: Environment variable XDG_SESSION_PATH not set. Is LightDM running?
dbus-daemon[1434]: Activating service name='org.a11y.atspi.Registry' requested by ':1.3' (uid=1000 pid=1393 comm="update-notifier ")
dbus-daemon[1434]: Successfully activated service 'org.a11y.atspi.Registry'
SpiRegistry daemon is running with well-known name - org.a11y.atspi.Registry

(nm-applet:1418): nm-applet-WARNING **: 08:56:05.852: Unable to determine UID of the request

(nm-applet:1418): libnm-CRITICAL **: 08:56:05.865: ((libnm-core/nm-setting-connection.c:193)): assertion '' failed

(nm-applet:1418): Gtk-WARNING **: 08:56:06.086: Can't set a parent on widget which has a parent

(nm-applet:1418): Gdk-CRITICAL **: 08:56:06.940: gdk_window_thaw_toplevel_updates: →
  assertion 'window->update_and_descendants_freeze_count > 0' failed

(clipit:1430): Gdk-CRITICAL **: 08:56:07.392: gdk_window_thaw_toplevel_updates: →
  assertion 'window->update_and_descendants_freeze_count > 0' failed →
  Openbox-Message: 正当なメニューファイル"/usr/share/lxde/openbox/menu.xml"を見つけることができません。

(lxpanel:1368): Wnck-WARNING **: 08:56:08.410: Unhandled action type _OB_WM_ACTION_UNDECORATE

** (update-notifier:1393): WARNING **: 08:56:14.197: There is no graphical application installed to manage Livepatch. →
  The livepatch status icon will not be displayed.

(lxpanel:1368): Wnck-WARNING **: 08:56:20.190: Unhandled action type _OB_WM_ACTION_UNDECORATE

さあ、どうしよう。ここで「エラー」または「Error」と表示されている箇所がある。

まず、「エラー: GDBus.Error:」で始まる行を見る。 org.freedesktop.DBus.Error.ServiceUnknown というメッセージも、 The name org.freedesktop.Tracker1 was not provided by any .service files というメッセージも、 よくあるものらしい。しかし、私の実力では解決できるか疑わしい。 「接続失敗: 接続拒否 pa_context_connect() は失敗: 接続拒否」も同様だ。なお、ここは日本語になっているが、 "Connection failure: Connection refused pa_context_connect() failed: Connection refused" の訳と思われる。

少しおいて、
** (light-locker:1424): ERROR **: 08:56:05.274: Environment variable XDG_SESSION_PATH not set. Is LightDM running?
で始まる行がある。LightDM は起動しているはずなのだが、何か勘違いをしているのだろうか。

ひょっとして lightdm は起動していないのかもしれない。

$ systemctl status

この表示に lightdm はない。できるのだろうか。

$ sudo  systemctl enable lightdm.service
Synchronizing state of lightdm.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable lightdm
Failed to reload daemon: 接続が相手からリセットされました
Failed to reload daemon: 接続が相手からリセットされました
Failed to enable unit: 接続が相手からリセットされましたない。

根本的に勘違いをしているのだろう。本当に lightdm は動いているのだろうか。

$ systemctl status lightdm.service
● lightdm.service - Light Display Manager
     Loaded: loaded (/lib/systemd/system/lightdm.service; indirect; vendor preset: enabled)
     Active: failed (Result: exit-code) since Mon 2021-02-07 08:55:05 JST; 1h 6min ago
       Docs: man:lightdm(1)
    Process: 648 ExecStartPre=/bin/sh -c [ "$(basename $(cat /etc/X11/default-display-manager 2>/dev/null))" = "lightdm>
    Process: 653 ExecStart=/usr/sbin/lightdm (code=exited, status=1/FAILURE)
   Main PID: 653 (code=exited, status=1/FAILURE)

 2月 07 08:55:05 satosi-PC-wsl systemd[1]: lightdm.service: Scheduled restart job, restart counter is at 5.
 2月 07 08:55:05 satosi-PC-wsl systemd[1]: Stopped Light Display Manager.
 2月 07 08:55:05 satosi-PC-wsl systemd[1]: lightdm.service: Start request repeated too quickly.
 2月 07 08:55:05 satosi-PC-wsl systemd[1]: lightdm.service: Failed with result 'exit-code'.
 2月 07 08:55:05 satosi-PC-wsl systemd[1]: Failed to start Light Display Manager.

これを見る限りは動いていない。

CPPUnit

WSL2 の Ubuntu 20.04 に CPPUnit を入れてみた。CPPUnit はその名の通り C++ の単体テストを自動化するフレームワークだ。

$ sudo apt install libcppunit-1.15-0 libcppunit-dev libcppunit-doc

ライブラリのコンパイルは不要である。かなり枯れたのだろう。

CPP Unit に基づいたコードを sample.cpp とすると、次でコンパイルできる。

$ g++ -std=c++14 -g sample.cpp -L /usr/local/lib -lstdc++ -lcppunit -ldl

参考にしたサイトは次の通り。上はサンプルコードの例、下はコンパイル方法が記載されている。

ファイルシステム

WSL や WSL2 から Windows のファイルシステムにアクセスするには、/mnt/ドライブ名 とすればいい。cドライブのならば、/mnt/c だ。一方、 Windows から WSL ファイルシステムにアクセスするには、 エクスプローラのパスの欄に \\wsl$ を入力する。

参考サイトは次の通り。

Ubuntu 22.04.1 LTS でエラー

Ubuntu 22.04.1 LTS でエラーが発生した。コンソールには次のように出てくる。

Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x80070422
Error: 0x80070422 ?????????????????????????????????????????????????

Press any key to continue...

キーを押してみても次のつれない表示しかない。

[プロセスはコード 1 (0x00000001) で終了しました]

どうやら、ここは https://aka.ms/wsl2kernel に行ってみるしかない。

x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ

上記の更新プログラムパッケージをダウンロードして実行したが、「すでに更新されています」という意味の表示がされる。 エラーは解消されない。結局、wsl そのものを無効化し(「Windows の機能」から[Linux 用 Windows サブシステム]にあるチェックをはずす)、 また Ubuntu 22.04.1 そのものをアンインストールした。そこで、wsl を再度有効化し、その後 MS Store から Ubuntu 22.04 をインストールした。 そうして Ubuntu 22.04 は動くようになった。プログラムなどのデータはみな消えてしまったが、仕方がない。

まりんきょ学問所コンピュータの部屋Windows 手習い > Windows Subsystem for Linux


MARUYAMA Satosi