コンテンツにスキップ

Top

Windows 10 に Ubuntu 20.04 を入れる

Windows で Python をやってると Linux との互換性で結構面倒になる。

いちいち動作確認も面倒なので、Windows側にUbuntuをいれてそこでPythonを使うことにした。

インストール

前提:Windows Updateは終わらせて最新にしておくこと!

①Windows PowerShellを管理者権限で起動し、wsl --installを実行する

②謎の呪文を唱える
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

③もう一回謎の呪文を唱える
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all

すると再起動が促されるので再起動する。

④再度、管理者権限で Windows PowerShell を起動し、以下を実行
wsl --set-default-version 2

⑤アップデートして最新にしておく
wsl --update
最新になったかは wsl --status で確認できる。(versionじゃないので注意)

⑥ Microsoft StoreでUbuntu 20.04をインストールする

インストールして起動するとユーザー名とパスワードを聞かれるので入力すると新規ユーザーが作成される。
とりま、

$ sudo apt update
$ sudo apt upgrade -y
はやっとく。

以上!

/home は Windowsのどこにあるの?

Ubuntu上でのディレクトリはWindows上でどこなの?

Windowsのエクスプローラーのアドレスに\\wsl$ と入れれば ルート(/) が表示されます!

WSL2のUbuntu20.04でTkinterをしたいのだけどGUIがでない

GUIを出すためには以下が必要となります。

①Windows PCにXmingをインストールする
https://sourceforge.net/projects/xming/
からダウンロードしてインストールしたけど、ここ公式?

ちなみにXmingは自動起動しないので、再起動時は自分でXmingを起動し直すか、なんかWindowsの自動起動機能的ななんかでなんかすること。

②Xmingの起動引数に -ac を入れる

Xmingのインストール先に行って(デフォルトは C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Xming)、ショートカットがあるのでそのプロパティを開き、
リンク先に -ac を追加する。

"C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow
→
"C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow -ac

これがないとDISPLAY変数が正しくないという謎エラーがでて結構はまる。

③Ubuntuにubuntu-desktopを入れる
(もしかしたらいらないかも)

$ sudo apt install -y ubuntu-desktop

④Tkinterを入れてGUIがでることを確認する

$ sudo apt install -y python3-tk
$ python3 -m tkinter
GUIが出たらOK!

DISPLAY変数がない!

_tkinter.TclError: no display name and no $DISPLAY environment variable
とかいうエラーが出た人。

以下の呪文を唱えればOK!

$ export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
.bashrcにでも書いとけば毎回呼ばなくてよい。

ちなみに、

$ export DISPLAY=localhost:0.0
はダメだった。

DISPLAY変数設定したのにやっぱりエラーがでる!

ちゃんとXmingの起動引数に -ac を付けましたか?

USBカメラがつながらない!

せっかくなのでUSBカメラをつなげてOpenCVで画像処理とかしようと思ったができなかった。

すくなくとも、何もしない状態ではusbipとかも入ってないのでUSBデバイス全般が使えない。

usbipd: error: WSL 'usbip' client not correctly installed. See https://github.com/dorssel/usbipd-win/wiki/WSL-support for the latest instructions.
というエラーが出るのはusbip2.xにしたらでるのだけど、これは、
$ sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20
したら出てこなくなる。

でもPowerShell側でatacheしたデバイスが、Ubuntu側のlsusbで見えているにもかかわらず、/dev/videoが出てこない。

以下のサイトとか参考にしたけどどうしようもない。

https://ascii.jp/elem/000/004/076/4076337/2/#eid3290613

カーネルを再コンパイルして、とか、Firewallの設定をしろ、とかいろいろ書かれてるサイトとかも確認したが結局うまくいかなかった。

のでとりあえずあきらめた。

そのうちなんかデフォルトでできるようになるだろう。

以上!

(追記)USBカメラがつながった!

このURLを参考にカーネルをコンパイルしなおしたらやっとこさつながった!
https://zenn.dev/fate_shelled/articles/06d109bd10b702

が、解像度を上げると

[ WARN:0@10.525] global /io/opencv/modules/videoio/src/cap_v4l.cpp (1000) tryIoctl VIDEOIO(V4L2:/dev/video0): select() timeout.
というタイムアウトエラーが出る。160x120の解像度ならでるけど、320x240では絵が出ない。

YUYVじゃなくモーションJPEGにすればもうちょっといけるがフルHDとかは無理。

OpenCVの自作プログラムじゃなく、qv4l2というツールをいれて確認したが同じだった。

$ sudo apt install -y qv4l2

ここまで頑張ってこれだともういいやとしか言いようがない。のでもうあきらめた!

以上!