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
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
ちなみに、
$ 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.
$ 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.
YUYVじゃなくモーションJPEGにすればもうちょっといけるがフルHDとかは無理。
OpenCVの自作プログラムじゃなく、qv4l2というツールをいれて確認したが同じだった。
$ sudo apt install -y qv4l2
ここまで頑張ってこれだともういいやとしか言いようがない。のでもうあきらめた!
以上!