トラブルシューティング(Ubuntu 24.04LTS on WSL2)

はじめに_

WSL2上のUbuntu 24.04 LTSに関するトラブルシューティング

Powershellで文字化けする(日本語が表示されない)_

以下のページを参考に使用しているフォントを日本語対応フォント(例えばMSゴシックなど)にすること。

仮想化支援技術が有効になっているかわからない_

  1. タスクマネージャーを起動する(スタート→Windowsシステムツール→タスクマネージャー)
  2. タスクマネージャーの「パフォーマンス」タブをクリックし、CPUの項を開く
  3. CPUの項で「仮想化」という項目を見る。「有効」となっていれば仮想化支援技術は有効になっている。
  4. 仮想化支援技術が有効でないときには、BIOSの設定から仮想化支援技術を有効にする。

Ubuntuのインストールに成功しているかを確認する。_

PowerShell上で以下のコマンドを入力し、Ubuntuが表示されているならばインストールに成功している。以下の例では、Ubuntuが表示されているのでインストールに成功している(ただし、Stoppedとなっているので現在稼働していない)。

PS C:\WINDOWS\system32> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-18.04           Stopped         2
  docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2
  Ubuntu                 Stopped         2
  Ubuntu-20.04           Stopped         2

Ubuntu 24.04 LTSがWSL2で動いているかどうか?_

注:以下の例のUbuntu 20.04の話をUbuntu-24.04に置き換えて読んでください。

まず、PowerShellを管理者権限で起動する。デスクトップ左下のスタートをクリックし、「よく使うアプリ」からWindows Powershellを選ぶ。下の画像のようにWindows Powershellの上で右クリックし、「管理者として実行する」を選択し、Windows Powershellを起動する。

起動したWindows Powershell上で以下のコマンドを実行する。このコマンドでWSL上にインストールされているLinuxディストリビューション(-lオプション)および、そのディストリビューションがWSLのどのバージョンで動いているか(-vオプション)を調べることができる。

wsl -l -v

私の環境での実行結果を示す。私の環境ではUbuntu 18.04と20.04がインストールされており、両方どもバージョン2(WSL2)で動いている。

wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         2
  Ubuntu-20.04    Running         2

もし、Ubuntu 20.04がバージョン1(WSL1)で動いている場合は、バージョン2で動かすように設定しなおすこと。

まず、Ubuntu 20.04を停止する。以下のコマンドをPowershell上で実行する。

wsl -t Ubuntu-20.04

停止していることを確認する(STATEがStoppedになっていれば停止している)。

wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         2
  Ubuntu-20.04    Stopped         2

まず、今後インストールするLinuxを標準でWSL2上で動くように設定する。PowerShell上で以下を実行する。

wsl --set-default-version 2

Ubuntu 20.04をWSL2上で動くように切り替える。なお、以下について注意すること(私は以下で引っかかって切り替えられなかった)

  1. BIOSで仮想化機能を有効にしておく
  2. Cドライブに十分な容量がある
wsl --set-version Ubuntu-20.04 2

変換中です。この処理には数分かかることがあります...

メッセージのとおり処理に時間がかかるのでしばらく待つ。変換が終わったならば、切り替わっているかを確認する。VERSIONが2になっていれば、WSL2上で動くように切り替わっている。

wsl -l -v

WSL1からWSL2で動くように変更した場合は、Xウィンドウの設定についてUbuntu上でのXserverの起動の最初から実施しなおすこと(環境変数DISPLAYの値の設定を書き直すため)。

WSL上にインストールしたLinuxのパスワードを忘れた_

以下を参考に対応する。

概要は以下のとおり。Ubuntu 24.04 上のユーザ hogehogeのパスワードを忘れたので変更する。

  1. Windows Powershellを管理者権限で起動する
    • 「スタート」→「Windows Powershell」に進む
    • Windows Powershellのアイコンにカーソルを合わせ、右クリックする。
    • 管理者として起動を選択する。
  2. 現在インストールされているLinuxの一覧を確認する。たとえば、私の環境では以下のようになる。
    wsl -l -v
      NAME            STATE           VERSION
    * Ubuntu-24.04    Stopped         2
    
  3. 上記コマンドのNAME欄を確認する。上記の例ではUbuntu-24.04が目的のLinux名となる。Ubuntu 24.04 にルート権限(管理者権限)でログインする。Powershell上で以下のコマンドを実行する。私の環境では以下のようなメッセージがでた。
    wsl -u root -d Ubuntu-24.04
    
    Welcome to Ubuntu 24.04 LTS (GNU/Linux 5.15.146.1-microsoft-standard-WSL2 x86_64)
    
     * Documentation:  https://help.ubuntu.com
     * Management:     https://landscape.canonical.com
     * Support:        https://ubuntu.com/pro
    
     System information as of 2024年  6月  6日 木曜日 17:35:49 JST
    
      System load:  0.0                 Processes:             48
      Usage of /:   0.5% of 1006.85GB   Users logged in:       1
      Memory usage: 6%                  IPv4 address for eth0: 172.22.14.5
      Swap usage:   0%
    
     * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
       just raised the bar for easy, resilient and secure K8s cluster deployment.
    
       https://ubuntu.com/engage/secure-kubernetes-at-the-edge
    
    This message is shown once a day. To disable it please create the
    /root/.hushlogin file.
    root@CIRCLE-CFSR3:/mnt/c/Windows/system32#
    
  4. 該当するユーザ(今回の例ではhogehoge)のパスワードを変更する。なお、Powershell上に表示される日本語メッセージは文字化けするので注意(Windows 11の日本語文字コードはCP932、Ubuntuの日本語文字コードはUTF-8のため)。そこで、表示メッセージを一時的に英語にして、パスワードの変更を行う。以下の例はユーザ名をgotohにしている。
    % export LANG=C
    % passwd gotoh
    New password:  (ここに新しいパスワードを入力する。入力結果は表示されないので注意)
    Retype new password: (もう一度、同じパスワードを入力する)
    passwd: password updated successfully (このようなメッセージがでたらパスワードの変更は成功している)
    
  5. Ubuntuからログアウトする
    % exit
    

あるパッケージがインストールされているかどうか調べたい_

% apt list "パッケージ名/キーワード"

たとえば、mozcがインストールされているか調べたい場合は以下のように入力する。

% apt list "*mozc*"
一覧表示... 完了
emacs-mozc-bin/focal,now 2.23.2815.102+dfsg-8ubuntu1 amd64 [インストール済み、自動]
emacs-mozc/focal,now 2.23.2815.102+dfsg-8ubuntu1 amd64 [インストール済み]
fcitx-mozc/focal,now 2.23.2815.102+dfsg-8ubuntu1 amd64 [インストール済み]
ibus-mozc/focal 2.23.2815.102+dfsg-8ubuntu1 amd64
mozc-data/focal,now 2.23.2815.102+dfsg-8ubuntu1 all [インストール済み、自動]
mozc-server/focal,now 2.23.2815.102+dfsg-8ubuntu1 amd64 [インストール済み、自動]
mozc-utils-gui/focal,now 2.23.2815.102+dfsg-8ubuntu1 amd64 [インストール済み、自動]
uim-mozc/focal 2.23.2815.102+dfsg-8ubuntu1 amd64

以下のコマンドでも調べられる。

% dpkg -l | grep パッケージ名/キーワード

% dpkg -l | grep mozc
ii  emacs-mozc                             2.23.2815.102+dfsg-8ubuntu1        amd64        Mozc for Emacs
ii  emacs-mozc-bin                         2.23.2815.102+dfsg-8ubuntu1        amd64        Helper module for emacs-mozc
ii  fcitx-mozc:amd64                       2.23.2815.102+dfsg-8ubuntu1        amd64        Mozc engine for fcitx - Client of the Mozc input method
ii  mozc-data                              2.23.2815.102+dfsg-8ubuntu1        all          Mozc input method - data files
ii  mozc-server                            2.23.2815.102+dfsg-8ubuntu1        amd64        Server of the Mozc input method
ii  mozc-utils-gui                         2.23.2815.102+dfsg-8ubuntu1        amd64        GUI utilities of the Mozc input method

「sudo apt install パッケージ名」が失敗するとき_

Ubuntuではソフトウェアのインストールにパッケージ管理システムaptを使っています。aptは次の手順でインストールを実行します。

  1. 「sudo apt install パッケージ名」が実行されたとき、インストールを指定されたパッケージがダウンロード済みのパッケージ一覧にあるか確認する(パッケージ一覧は /var/lib/apt/lists以下にある)。
  2. パッケージ一覧にパッケージ名があれば、そこに記載されている情報に従いパッケージをダウンロードする。
  3. ダウンロードしたパッケージをインストールする。

パッケージのインストールに失敗するとき、以下の原因があり得ます。

  • a: パッケージ名がパッケージ一覧に含まれていない
    • a-1: リポジトリ(パッケージの配布元)には、パッケージが存在するが、ダウンロード済みのパッケージ一覧に含まれていない(ダウンロード済みのパッケージ一覧が古い)
    • a-2: リポジトリにもパッケージが存在しない
  • b: ダウンロード済みのパッケージ一覧に記載されているパッケージ情報とリポジトリのパッケージ情報が一致しない(ダウンロード済みのパッケージ一覧が古い)
  • c: 指定したパッケージのインストールに必要な他のインストール済みパッケージのバージョンが古い
  • d: 指定したパッケージと競合するパッケージがすでにインストール済みであり、当該パッケージを自動的に削除できない
  • e: ネットワークにつながっていない。

上記のa-1とbが原因の場合、ダウンロード済みパッケージ一覧を最新にすることで対応できます。以下のコマンドを実行してください。

% sudo apt update

上記のcが原因の場合、インストール済みのパッケージを最新にすることで対応できます(対応できることが多いです)。以下のコマンドをじっこうしてください。

% sudo apt update
% sudo apt upgrade -y

上記のa-2が原因かどうかは、インストールしたいパッケージがそもそも存在するかどうかを確認する必要があります。以下のコマンド名でパッケージを検索し、存在しなければa-2が原因です。適切なパッケージ名を検索エンジンなどで調べるか、別の方法でほしいソフトウェアをインストールする必要があります。

% apt search パッケージ名

(実行例)
% apt search texlive-latex-extra
ソート中... 完了
全文検索... 完了  
debiandoc-sgml/focal 1.2.32-2 all
  DebianDoc SGML DTD および整形用ツール

pandoc/focal 2.5-3build2 amd64
  general markup converter

rubber/focal 1.5.1-2 all
  automated system for building LaTeX documents

texlive-latex-extra/focal 2019.202000218-1 all
  TeX Live: LaTeX additional packages

texlive-latex-extra-doc/focal 2019.202000218-1 all
  TeX Live: Documentation files for texlive-latex-extra

原因dの場合の対処方法は個々の事例によって異なります。基本的にはエラーメッセージに従って試行錯誤するしかありません。たとえば、以下のようなエラーメッセージがでます。

% sudo apt upgrade -y
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれ ません。
以下のパッケージには満たせない依存関係があります:
emacs : 依存: emacs-gtk (>= 1:26.3) または
emacs-lucid (>= 1:26.3) しかし、インストールされていません または
emacs-nox (>= 1:26.3)
emacs-bin-common : 依存: emacs-common (= 1:26.3+1-1ubuntu2)
emacs-el : 依存: emacs-common (= 1:26.3+1-1ubuntu2)
E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください ( または解法を明示してください)。

原因eの場合は、そもそもネットワークに接続できていない可能性があります。以下のようなエラーメッセージが出る場合は、原因eを疑ってください。とりあえずは、Windows側でネットワークに接続できていることを確認し、その後、Ubuntuを再起動してみてください。

エラー:1 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 evince-common all 3.36.7-0ubuntu1
404 Not Found [IP: 160.26.2.187 80]
エラー:2 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 libevdocument3-4 amd64 3.36.7-0ubuntu1
404 Not Found [IP: 160.26.2.187 80]
エラー:3 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 libevview3-3 amd64 3.36.7-0ubuntu1
404 Not Found [IP: 160.26.2.187 80]
エラー:4 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 evince amd64 3.36.7-0ubuntu1
404 Not Found [IP: 160.26.2.187 80]
無視:5 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 ruby2.7 amd64 2.7.0-5ubuntu1.3
無視:6 http://jp.archive.ubuntu.com/ubuntu focal-updates/main amd64 libruby2.7 amd64 2.7.0-5ubuntu1.3
エラー:5 http://security.ubuntu.com/ubuntu focal-updates/main amd64 ruby2.7 amd64 2.7.0-5ubuntu1.3
404 Not Found [IP: 160.26.2.187 80]
エラー:6 http://security.ubuntu.com/ubuntu focal-updates/main amd64 libruby2.7 amd64 2.7.0-5ubuntu1.3
404 Not Found [IP: 160.26.2.187 80]
E: http://jp.archive.ubuntu.com/ubuntu/pool/main/e/evince/evince-common_3.36.7-0ubuntu1_all.deb の取得に失敗しました 404 Not Found [IP: 160.26.2.187 80]
E: http://jp.archive.ubuntu.com/ubuntu/pool/main/e/evince/libevdocument3-4_3.36.7-0ubuntu1_amd64.deb の取得に失敗しました 404 Not Found [IP: 160.26.2.187 80]
E: http://jp.archive.ubuntu.com/ubuntu/pool/main/e/evince/libevview3-3_3.36.7-0ubuntu1_amd64.deb の取得に失敗しました 404 Not Found [IP: 160.26.2.187 80]
E: http://jp.archive.ubuntu.com/ubuntu/pool/main/e/evince/evince_3.36.7-0ubuntu1_amd64.deb の取得に失敗しました 404 Not Found [IP: 160.26.2.187 80]
E: http://security.ubuntu.com/ubuntu/pool/main/r/ruby2.7/ruby2.7_2.7.0-5ubuntu1.3_amd64.deb の取得に失敗しました 404 Not Found [IP: 160.26.2.187 80]
E: http://security.ubuntu.com/ubuntu/pool/main/r/ruby2.7/libruby2.7_2.7.0-5ubuntu1.3_amd64.deb の取得に失敗しました 404 Not Found [IP: 160.26.2.187 80]
E: いくつかのアーカイブを取得できません。apt-get update を実行するか --fix-missing オプションを付けて試してみてください。

Windows上のWebブラウザ(Edgeなど)で http://jp.archive.ubuntu.com/ にアクセスできる場合は、Ubuntu上で名前解決できていない可能性があります。

以下のページを参考に名前解決のためにアクセスするDNSサーバの設定を変更します。

まず、/etc/wsl.confがあるか確認します。

%  ls /etc/wsl.conf
/etc/wsl.conf

% cat /etc/wsl.conf

[boot]
systemd=true

/etc/wsl.confに追記します。以下のコマンドを実行します。

% echo '[network]' | sudo tee -a /etc/wsl.conf
% echo 'generateResolvConf = false' | sudo tee -a /etc/wsl.conf

追記されていることを確認します。

% cat /etc/wsl.conf

[boot]
systemd=true
[network]
generateResolvConf = false

上記のように追記できていない場合は、利用できるエディタを使って正しく編集してください。Ubuntu標準のエディタとしてはnano, viなどがあります。

% sudo nano /etc/wsl.conf (nanoを使って編集する場合)
% sudo vi /etc/wsl.conf   (viを使って編集する場合)

続いて、DNSサーバのIPアドレスを設定しているファイル /etc/resolv.confを編集する。まず、存在するかどうか確認する。私の環境では/etc/resolv.confは自動生成されるため、以下のようにシンボリックリンク(別のファイルにリンクをはること)で作成されている。

% ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 20  6月  4 23:58 /etc/resolv.conf -> /mnt/wsl/resolv.conf

% cat /etc/resolv.conf
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.29.160.1

すでに存在するresolv.confを削除し、新たに作成する。

% sudo rm /etc/resolv.conf
% echo 'nameserver 8.8.8.8' | sudo tee /etc/resolv.conf
% cat /etc/resolv.conf
nameserver 8.8.8.8

Ubuntuを終了する。

% exit

Powershellを起動し、WSLを一度停止する。WSLを停止したら、Powershellを終了する。

% wsl --shutdown
% exit

Ubuntuを起動する。以下のようにDNSサーバが8.8.8.8になっていたら設定成功。

% resolvectl status
Global
         Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: foreign
Current DNS Server: 8.8.8.8
       DNS Servers: 8.8.8.8

Link 2 (eth0)
Current Scopes: none
     Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

アップデートしてみる。

% sudo apt update
% sudo apt upgrade -y

Ubuntuの起動時のユーザがrootユーザになっている場合_

Ubuntuインストール後のユーザ設定時にうまくユーザアカウントを作成できていない場合に、Ubuntuがrootで起動してしまうとのこと。

参考

まず、現在のユーザを確認する。PowershellからUbuntuをrootユーザで起動する。Powershell上で以下のコマンドを実行する。

% wsl -u root -d Ubuntu-24.04

Ubuntuを起動したら、ターミナルでコマンドwhoamiを実行する。whoamiの実行結果がrootと表示されている場合は現在のユーザはrootである。

% whoami
root

ログイン用ユーザ(一般ユーザ)が作成されているかを確認する。ユーザ名がgotohの場合、以下のコマンドで確認する。以下のようにユーザ名を含む行が表示されていたら、ログイン用ユーザは作成済みとなっている。何も表示されないならば、一般ユーザは作成されていない。

# grep gotoh /etc/passwd
gotoh:x:1002:1002:,,,:/home/gotoh:/bin/bash

一般ユーザは作成されていない場合、以下の手順で作成する。この例ではユーザ名はgotohとする。Ubuntuのターミナル上で「adduser ユーザ名」を実行する。ユーザ名は半角英数字にすること(スペースは入れない)。部屋番号、職場電話番号、自宅電話番号、その他は何も入力せずEnterキーを押す。

# adduser gotoh
ユーザー `gotoh' を追加しています...
新しいグループ `gotoh' (1001) を追加しています...
新しいユーザー `gotoh' (1001) をグループ `gotoh' に追加しています...
ホームディレクトリ `/home/gotoh' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しい パスワード: (注:キー入力しても何も表示されない)
新しい パスワードを再入力してください: (注:キー入力しても何も表示されない)
passwd: パスワードは正しく更新されました
gotoh のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
        フルネーム []: Yuichi Goto
        部屋番号 []:
        職場電話番号 []:
        自宅電話番号 []:
        その他 []:
以上で正しいですか? [Y/n] Y

これで一般ユーザが作成できた。続いて作成したユーザでsudoが使えるように設定する。以下のコマンドのgotohの部分を自分のユーザに変更すること。

% gpasswd -a gotoh sudo
Adding user gotoh to group sudo

ユーザが作成されているかを確認する。以下のようにユーザ名を含む行が表示されていたら、ユーザは作成済みとなっている。

# grep gotoh /etc/passwd
gotoh:x:1002:1002:,,,:/home/gotoh:/bin/bash

作成したユーザでUbuntuが起動するように設定する。以下のコマンドを実行し、/etc/wsl.conf に設定を記述する。なお、以下の例ではユーザ名をgotohとしている。 /etc/wsl.confに追記する。以下のコマンドを実行する。

# echo '[user]' | tee -a /etc/wsl.conf
# echo 'default=gotoh' | tee -a /etc/wsl.conf

catコマンドで内容が追記されているか確認する(最後の2行)。

#  cat /etc/wsl.conf
[boot]
systemd=true
[user]
default=gotoh

Ubuntuからログアウトする。

# exit

wslを停止する。

> wsl -t Ubuntu-24.04

Ubuntuにログインし、作成したユーザで起動できるか確認する。

> wsl -d Ubuntu-24.04
% whoami
gotoh

「MESA: error: ZINK: failed to choose pdev glx: failed to create drisw screen」というエラーメッセージがでる。_

未解決

半角全角キーを押すとシングルクォートが表示される_

未解決。 たぶん、キーボード設定の問題。

キーボード配列

ターミナル(コンソール)上のキーボード設定_

以下のコマンドで現状を確認できる。

% localectl status
System Locale: LANG=ja_JP.UTF-8
    VC Keymap: (unset)
   X11 Layout: us
    X11 Model: pc105

GUI(Xウィンドウ)上のキーボード設定_

以下のコマンドで現状を確認できる。

% setxkbmap -print -verbose 10
Setting verbose level to 10
WARNING: Running setxkbmap against an Xwayland server
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      pc105
layout:     us
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwerty)
types:      complete
compat:     complete
symbols:    pc+us+inet(evdev)
geometry:   pc(pc105)
xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+us+inet(evdev)"     };
        xkb_geometry  { include "pc(pc105)"     };
};

キーボードの設定を変更する。

%  setxkbmap -layout jp

戻る_