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

はじめに_

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

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

% 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

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

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

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

まず、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の値の設定を書き直すため)。

Windowsのファイアウォール設定でVcxSrvの「パブリックネットワーク」のアクセスを許可しているかどうか?_

WSL2では、WSL2上にインストールされているUbuntuとWindows 10上にインストールされているVcxSrvの間でIPアドレスを使って通信を行っている。このため、Windowsのファイアウォールの設定で、VcxSrvの通信を許可する必要がある。

以下の手順でファイアウォールの設定画面を開く。まず、スタート→「Windowsシステムツール」→「コントロールパネル」を選択する。

開いたウィンドウで「システムとセキュリティ」をクリックする。

「Windowsファイアウォールによるアプリケーションの許可」をクリックする。表示されない、あるいは灰色表示でクリックできない場合はWindows ファイアウォールの設定が灰色表示されているに従って対応すること。

「設定の変更」をクリックする。

画面をスクロールし、「VcxSrv windows server」について「プライベート」「パブリック」の両方にチェックが入っているか、その設定が有効化されているか(「VcxSrv windows server」の左側にあるチェックボックスがチェックされている)を確認する。有効化されていなければ有効にする。設定を変更した場合は、ウィンドウの一番下の「OK」をクリックする。

「VcxSrv windows server」に関する項目がない場合は、追加する。「別のアプリの許可」をクリックする。

開いたウィンドウにて「参照」のボタンをクリックし、「VcxSrv windows server」を選択する。私の環境ではC:\Program Files\VcXsrv\vcxsrv.exe が「VcxSrv windows server」のファイルであった。

続いて「ネットワークの種類」をクリックすると以下のウィンドウが開く。プライベートとパブリックの両方にチェックを入れ、「OK」をクリックする。

「追加」をクリックして、「VcxSrv windows server」に関する設定を追加する。

「OK」を押してファイアウォールの設定を保存する。

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

以下を参考に対応する。

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

  1. Windows Powershellを管理者権限で起動する
    • 「スタート」→「Windows Powershell」に進む
    • Windows Powershellのアイコンにカーソルを合わせ、右クリックする。
    • 管理者として起動を選択する。
  2. 現在インストールされているLinuxの一覧を確認する。たとえば、私の環境では以下のようになる。
    wsl -l -v
      NAME            STATE           VERSION
    * Ubuntu-18.04    Stopped         2
      Ubuntu-20.04    Stopped         2
    
  3. 上記コマンドのNAME欄を確認する。上記の例ではUbuntu-20.04が目的のLinux名となる。Ubuntu 20.04 にルート権限(管理者権限)でログインする。Powershell上で以下のコマンドを実行する。私の環境では以下のようなメッセージがでた。
    wsl -d Ubuntu-20.04 -u root
    
    Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.72-microsoft-standard-WSL2 x86_64)
    
     * Documentation:  https://help.ubuntu.com
     * Management:     https://landscape.canonical.com
     * Support:        https://ubuntu.com/advantage
    
      System information as of 2021年  5月  6日 木曜日 13:23:10 JST
    
      System load:  0.08               Processes:             8
      Usage of /:   1.3% of 250.98GB   Users logged in:       0
      Memory usage: 0%                 IPv4 address for eth0: 172.18.144.28
      Swap usage:   0%
    
    
    0 updates can be installed immediately.
    0 of these updates are security updates.
    
    
    The list of available updates is more than a week old.
    To check for new updates run: sudo apt update
    
    
    This message is shown once a day. To disable it please create the
    /root/.hushlogin file.
    
  4. 該当するユーザ(今回の例ではhogehoge)のパスワードを変更する。なお、Powershell上に表示される日本語メッセージは文字化けするので注意(Windows 10の日本語文字コードはCP932、Ubuntuの日本語文字コードはUTF-8のため)。そこで、表示メッセージを一時的に英語にして、パスワードの変更を行う。
    % export LANG=C
    % passwd gotoh
    New password:  (ここに新しいパスワードを入力する。入力結果は表示されないので注意)
    Retype new password: (もう一度、同じパスワードを入力する)
    passwd: password updated successfully (このようなメッセージがでたらパスワードの変更は成功している)
    
  5. Ubuntuからログアウトする
    % exit
    

「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 オプションを付けて試してみてください。

emacsやgnome-terminal上でキーボードが英語配列になってしまうとき_

何人かの学生からUbuntu起動時のターミナルでは日本語配列ですが、emacsやgnome-terminal上ですと英語配列になってしまうという現象が報告されています。

  • 参考:キーボード。日本語配列と英語配列。
    • キーボード上に「半角/全角」というキーがあったり、@キーがpキーの右隣にある場合は日本語配列(JIS配列)です。
    • @の出力ががShiftキー+ 2キーの場合は英語配列(US配列)です。

どちらの配列として認識されているのかの確認方法です。gnome-terminalやemacs上で、Shiftキー+数字の2キーを押して下さい。

  • ダブルクォーテーション(")が出力された場合→日本語配列
  • @が出力された場合→英語配列

日本語配列ならば問題ありません。英語配列であるとき、現在の言語設定が日本語設定になっているかを確認してください。ターミナルで以下のコマンドを入力し、出力を確認してください。

% dpkg -l | grep language-pack-ja (出力結果にlanguage-pack-jaがあればOK)
ii  language-pack-ja                       1:20.04+20210121                   all          translation updates for language Japanese
ii  language-pack-ja-base                  1:20.04+20210121                   all          translations for language Japanese

% env | grep LANG (LANGがja_JP.UTF-8ならOK)
LANG=ja_JP.UTF-8

上記のようになっていない場合は日本語環境の設定を行ってください。

日本語環境の設定ができているのにも関わらず、gnome-terminalやemacsで英語配列として認識されてしまっているならば、以下のコマンドを実行し、キーボード配列を変更してみてください(参考:Ubuntuでキーボードレイアウト変更)。なお、私の環境ではこの不具合が発生しなかったため、これで十分かどうか2021年5月27日現在確認とれていません。

% sudo dpkg-reconfigure keyboard-configuration

ターミナルが以下のような画面になる。方向キーの上下で選択肢の選択、Tabキーでフォーカスしているボタンの移動を行える。「Generic 105-key PC (intl.)」を選択し、Tabキーで<了解>ボタンにフォーカスを合わせ、Enterキーで決定する。

「Japanese」を選択し、Tabキーで<了解>ボタンにフォーカスを合わせ、Enterキーで決定する。

「Japanese」を選択し、Tabキーで<了解>ボタンにフォーカスを合わせ、Enterキーで決定する。

「キーボード配置のデフォルト」を選択し、Tabキーで<了解>ボタンにフォーカスを合わせ、Enterキーで決定する。

「コンポーズキーなし」を選択し、Tabキーで<了解>ボタンにフォーカスを合わせ、Enterキーで決定する。

Tabキーで<いいえ>ボタンにフォーカスを合わせ、Enterキーで決定する。

終了すると以下のようなメッセージが表示される。

% sudo dpkg-reconfigure keyboard-configuration
[sudo] gotoh のパスワード: 
Your console font configuration will be updated the next time your system
boots. If you want to update it now, run 'setupcon' from a virtual console.
update-initramfs: deferring update (trigger activated)
initramfs-tools (0.136ubuntu6.5) のトリガを処理しています ...

Ubuntuを一度終了し、起動しなおす。

ここまでの作業でもダメな場合は以下を行う。

% /usr/bin/fcitx-configtool

以下のウィンドウが起動する。一番上が「Keyboard -日本語」になっていないとき、gnome-terminalやemacs上で日本語配列として認識されない状態になっている。下の画像の例では「Keyboard -英語(US)」になっているため、gnome-terminalやemacs上でキーボードが英語配列として認識される。

まず、「Keyboard -英語(US)」を削除する。カーソルを「Keyboard -英語(US)」に合わせて、マウスの左クリックを押し、以下の画像のように「Keyboard -英語(US)」をアクティブ(青背景)にする。次に下の「-」ボタン(下画像の赤枠部分)をクリックし、「Keyboard -英語(US)」を削除する。

すると、以下のように「Keyboard -英語(US)」が削除された状態になる。続いて日本語配列を追加する。下にある「+」ボタン(下画像の赤枠部分)をクリックする。

「入力メソッドの追加」というウィンドウが新たに立ち上がる。ここで「Keyboard - 日本語」を選択し、「OK」ボタンを押す。

以下の画像のように「Keyboard - 日本語」が追加される。続いて、「Keyboard - 日本語」が最も上に位置するように移動させる。「Keyboard - 日本語」がアクティブ(青背景)な状態で、「^」ボタン(下画像の赤枠部分)をクリックする。

以下の画像のようになれば、設定終了。右上の「×」ボタンを押して終了する。

一度、Ubuntuを再起動し、gnome-terminalやemacsで日本語配列として認識されることを確認する。

gnome-terminalの起動に失敗する。_

はじめに_

どこに原因があるのかを段階的に切り分けていくことが重要。

  • Xウィンドウの設定に問題がある場合

    xeyesは起動するけれども、gnome-terminalが起動しない。

  • gnome-terminalに問題がある場合

切り分け1:そもそもgnome-terminalはインストールされているかどうか?_

以下のコマンドでインストール済みであることを確認する。インストール済みでなければインストールする。

% which gnome-terminal
/usr/bin/gnome-terminal

% apt list gnome-terminal
一覧表示... 完了
gnome-terminal/focal-updates,now 3.36.2-1ubuntu1~20.04 amd64 [インストール済み]
N: 追加バージョンが 1 件あります。表示するには '-a' スイッチを付けてください。

切り分け2:xeyesは起動するかどうか?_

xeyesも起動しない場合は、Xウィンドウの設定に問題がある。そこで、xeyesが起動するかどうか確認する。「接続に失敗した」という主旨のエラーメッセージがでている場合は、Xウィンドウの設定の問題である可能性が高い。

% xeyes &

xeyesが起動しない場合は、Ubuntu上でのXserverの起動のうまくいかない場合のチェックリストに従い、原因を切り分けて対応する。

切り分け3:xeyesが起動するのにgnome-terminalが起動しない場合_

gnome-terminalは以下のエラーメッセージを出して起動しないときがある。

% gnome-terminal &
# Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Error spawning command line “dbus-launch --autolaunch= --binary-syntax --close-stderr”: Child process exited with code 1

その場合は、以下のコマンドを実行する(参考:WSL で gnome-terminal を動かすお話)。

dbus-uuidgen | sudo tee /etc/machine-id

上の理由でない場合は以下を調べてみる。

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

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

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

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

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

「無効なディストリビューション名: 'Ubuntu-20.04'」と出た場合_

以下のようなエラーメッセージが出た場合は、有効なディストリビューションの一覧を確認する。

PS C:\WINDOWS\system32> wsl --install -d Ubuntu-20.04
無効なディストリビューション名: 'Ubuntu-20.04'。
有効なディストリビューションの一覧を取得するには、'wsl --list --online' を使用してください。

ちなみにインストールできるLinuxディストリビューションの一覧は以下のようにして確認できる。以下の例は2022年3月19日時点での出力結果。

wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d <Distro>' を使用してインストールします。

NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS

上記のようにUbuntu-20.04が表示されている場合は、入力ミスを疑うこと。表示されていない場合は、以下の手順でwslのアップデートを行う。

  1. Windows Updateを行う
  2. PowerShell上で以下のコマンドを入力し、wslのアップデートを行う。
    PS C:\WINDOWS\system32> wsl --update
    更新をチェック中...
    更新をダウンロード中...
    更新をインストール中...
    この変更は、次回の WSL 再起動時に有効になります。強制的に再起動するには、'wsl --shutdown' を実行してください。
    カーネル バージョン: 5.10.102.1
    PS C:\WINDOWS\system32> wsl --shutdown
    

「WslRegisterDistribution failed with error: 0x800701bc」_

WSL2でUbuntuの初回起動時に0x800701bcが出てインストールできないときの備忘録(追記:2021/09/29)

戻る_