2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

新規環境でのセットアップメモ

Last updated at Posted at 2018-01-11

新規環境でのセットアップメモ

ホストOSはWindows 10。VirtualBoxでUbuntu16.04

Windows 10

CtrlとAltを置き換える

Macキーボード的配置にする。レジスタ書き換え、又はSharpKeysで書き換える。

os_01.jpg

どこでもEmacsショートカット

どこでもEmacs同様のカーソル移動、Deleteを使えるようにする。Ctrl-a、Ctrl-d など。実際には、Ctrlキーではなく、Caps Lockキーを使う。Caps Lockキーだと同時押しに対応してないので、先ほどのSharpKeysでCaps LockキーをScroll Lockキーに変えておく。

Keyhacを使って、Scroll Lockと各キー同時押しをカーソル移動などに割り当てる

config.py
import sys
import os
import datetime

import pyauto
from keyhac import *

def configure(keymap):
    keymap.replaceKey( "ScrollLock", 235 ) # for JP keyboard
    #keymap.replaceKey( "RCtrl", 235 ) # for JP keyboard
    #keymap.replaceKey( "CapsLock", 235 ) # for US keyboard
    keymap.defineModifier( 235, "User0" )
    keymap_global = keymap.defineWindowKeymap()
    keymap_global[ "U0-P" ] = "Up"
    keymap_global[ "U0-N" ] = "Down"
    keymap_global[ "U0-B" ] = "Left"
    keymap_global[ "U0-F" ] = "Right"
    keymap_global[ "U0-A" ] = "Home"
    keymap_global[ "U0-E" ] = "End" 
    keymap_global[ "Shift-U0-P" ] = "S-Up"
    keymap_global[ "Shift-U0-N" ] = "S-Down"
    keymap_global[ "Shift-U0-B" ] = "S-Left"
    keymap_global[ "Shift-U0-F" ] = "S-Right"
    keymap_global[ "Shift-U0-A" ] = "S-Home"
    keymap_global[ "Shift-U0-E" ] = "S-End" 
    keymap_global[ "U0-D" ] = "Delete"
    keymap_global[ "U0-K" ] = "S-End","Delete"
    keymap_global[ "U0-H" ] = "Back"
    keymap_global[ "U0-M" ] = "PageDown"
    keymap_global[ "U0-O" ] = "PageUp"
    #keymap_global[ "U0-RShift" ] = ""
    #keymap_global[ "U0-RShift-LShift" ] = "CapsLock"
    keymap_global[ "LCtrl-Q" ] = "Alt-F4" 
    keymap_global[ "LCtrl-W" ] = "Ctrl-F4" 
    #keymap_global[ "RWin-Enter" ] = "Alt-Enter"
    #keymap_global[ "U0-Tab" ] = "CapsLock"
    #keymap_global[ "U0-BackSlash" ] = "Insert"
    keymap_global[ "U0-Space" ] = "Ctrl-Space"

インストールするソフト

  • ブラウザ (FireFox, Chrome)
  • プレイヤー (Irfan View, MPC-HC, VLC)
  • エディタ (VSCode、Sublime、サクラエディタ)
  • バイナリエディタ (Stirling)。右クリックの送るに追加しておく
  • その他 (Tera Term、ftp、Git、WinMerge)

クリップボード02.png

Git

.gitconfig
[user]
    name = iwatake2222
    email = xxx@gmail.com
[diff]
    tool = WinMerge
[difftool "WinMerge"]
    path = C:/Program Files/WinMerge/WinMergeU.exe
    cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -f \"*.*\" -e -u -r \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = WinMerge
[mergetool "WinMerge"]
    path = C:/Program Files/WinMerge/WinMergeU.exe
    cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -e -u \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
[alias]
    windiff = difftool -y -d -t WinMerge
    winmerge = mergetool -y -t WinMerge

[core]
	autocrlf = true

Windows11

  • 設定 → 個人用設定 → タスクバー → タスクバーの動作 → タスクバーの配置 → 左揃え
  • エクスプローラ → 表示 → コンパクトビュー
  • タスクバーのサイズ (regedit)
    • コンピューター\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
    • 「新規」から「DWORD(32ビット)値」
    • TaskbarSi
    • 0
  • スタートメニューを戻す (効果なし)
    • コンピューター\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
    • 「新規」から「DWORD(32ビット)値」
    • Start_ShowClassicMode
    • 1
  • エクスプローラのツールバーを戻す
    • reg.exe add "HKCU\Software\Classes\CLSID{d93ed569-3b3e-4bff-8355-3c44f6a52bb5}\InprocServer32" /f /ve
  • 右クリックを戻す
    • reg add "HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve

Ubuntu

その他

sudo sed -i 's/# set linenumbers/set linenumbers/g' /etc/nanorc 

gsettings set org.gnome.desktop.background picture-uri 'none'
gsettings set org.gnome.desktop.background primary-color '#2255AA'
headerbar entry,
headerbar spinbutton,
headerbar button,
headerbar separator {
    margin-top: 0px; /* same as headerbar side padding for nicer proportions */
    margin-bottom: 0px;
}

headerbar {
    min-height: 24px;
    padding-left: 2px; /* same as childrens vertical margins for nicer proportions */
    padding-right: 2px;
    margin: 0px; /* same as headerbar side padding for nicer proportions */
    padding: 0px;
}

スワップ領域を追加する

sudo fallocate -l 64G /swapfile2
sudo chmod 600 /swapfile2
sudo mkswap /swapfile2
sudo swapon /swapfile2
free -h

永続化

echo "/swapfile2 swap swap defaults 0 0" | sudo tee -a /etc/fstab

rmコマンドでうっかりファイル/フォルダを削除してもゴミ箱から復旧できるようにする

sudo apt install trash-cli
.bashrc
if type trash-put &> /dev/null
then
    alias rm=trash-put
fi

入力関係 (日本語、Emacsショートカット)

sudo apt install -y ibus-mozc gnome-tweaks mozc-utils-gui dconf-editor
ibus restart 
gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'jp'), ('ibus', 'mozc-jp')]"

dconf-editor
# /org/gnome/settings-daemon/plugins/keyboard/active = 0

sudo apt-get install autokey-gtk
mkdir -p ~/.xkb/keymap ~/.xkb/symbols
setxkbmap -print > ~/.xkb/keymap/mykbd
setxkbmap -print > ~/.xkb/keymap/mykbd_remote
setxkbmap -print > ~/.xkb/keymap/mykbd_default
code .xkb/ &
xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
nano ~/bin/load_xkbmap.sh
chmod +x ~/bin/load_xkbmap.sh 
nano ~/bin/load_xkbmap_default.sh
chmod +x ~/bin/load_xkbmap_default.sh 
.xkb/
├── keymap
│   └── mykbd
└── symbols
    └── myswap
.xkb/keymap/mykbd
partial modifier_keys
xkb_keymap {
	xkb_keycodes  { include "evdev+aliases(qwerty)"	};
	xkb_types     { include "complete"	};
	xkb_compat    { include "complete"	};
	xkb_symbols   { include "pc+jp+us:2+inet(evdev)+myswap(swapkeys)"
		// key <MUHE> { [Control_L, Control_L] };
	};
	xkb_geometry  { include "pc(pc105)"	};
};
.xkb/symbols/myswap
partial modifier_keys
xkb_symbols "swapkeys" {
    replace key <MUHE> { [ Control_L ] };
    // replace key <LALT> { [ Control_L ] };
    replace key <LCTL> { [ Alt_L ] };
    
    //  modifier_map Mod1    { <LCTL> };
    //  modifier_map Control { <LALT> };
    replace key <CAPS> { [ Meta_L] };
};
.xkb/keymap/mykbd_remote
partial modifier_keys
xkb_keymap {
	xkb_keycodes  { include "evdev+aliases(qwerty)"	};
	xkb_types     { include "complete"	};
	xkb_compat    { include "complete"	};
	xkb_symbols   { include "pc+jp+us:2+inet(evdev)+myswap_remote(swapkeys)"
		// key <MUHE> { [Control_L, Control_L] };
	};
	xkb_geometry  { include "pc(pc105)"	};
};
.xkb/symbols/myswap_remote
partial modifier_keys
xkb_symbols "swapkeys" {
    replace key <MUHE> { [ Control_L ] };
    // replace key <LALT> { [ Control_L ] };
    replace key <LCTL> { [ Alt_L ] };
    
    //  modifier_map Mod1    { <LCTL> };
    //  modifier_map Control { <LALT> };
    //  replace key <CAPS> { [ Meta_L] };
};
~/bin/load_xkbmap.sh
#!/bin/sh

if [ -s $HOME/.xkb/keymap/mykbd ]
then
    sleep 1
    xkbcomp -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY 2>/dev/null
fi
~/bin/load_xkbmap_default.sh
#!/bin/sh

if [ -s $HOME/.xkb/keymap/mykbd_default ]
then
    sleep 1
    xkbcomp -I$HOME/.xkb $HOME/.xkb/keymap/mykbd_default $DISPLAY 2>/dev/null
fi
~/bin/load_xkbmap_remote.sh
#!/bin/sh

if [ -s $HOME/.xkb/keymap/mykbd_remote ]
then
    sleep 1
    xkbcomp -I$HOME/.xkb $HOME/.xkb/keymap/mykbd_remote $DISPLAY 2>/dev/null
fi
  • Emacsショートカットの設定

  • 自動設定

    • gnome-session-properties
      • autokey
      • load_xkbmap.sh
    • ログオフしたときは再度load_xkbmap.sh を実行する必要がある
    • リモートデスクトップの時は、キーバインド変更が競合しないように、load_xkbmap_default.sh を実行する
  • その他

    • mozc -> settings -> keyboard shortcutで、Eisuのショートカットを全て削除
    • Chrome Remote Desktopで接続するとき
      • Remote: そのまま
      • Host: Autokeyはそのまま。 replace key <CAPS> { [ Meta_L] }; だけ削除した設定を用意しておき、それを使う
  • Ubuntu -> UbuntuにChrome Remote Desktopで接続するとき

    • remote先ではload_xkbmap_remote.sh を使う
    • Mozcのキーボード設定から、Eisuのショートカットを全て削除する
    • xmodmap -e "remove lock = Eisu_toggle"

Chrome Remote Desktop

  • インストール
wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo dpkg -i chrome-remote-desktop_current_amd64.deb
sudo apt install -f -y

sudo groupadd chrome-remote-desktop
sudo usermod -a -G chrome-remote-desktop $USER

touch ~/.chrome-remote-desktop-session
mkdir .config/chrome-remote-desktop
  • 設定修正
    • https://qiita.com/ninose14/items/473369d76814174dd58f
    • displayは$DISPLAYで確認した値を使うべきだが、リモートデスクトップインストール後はずれる可能性があるので0にしておくのが無難。うまく行かなかったら1にする
/opt/google/chrome-remote-desktop/chrome-remote-desktop --stop
sudo nano /opt/google/chrome-remote-desktop/chrome-remote-desktop
/opt/google/chrome-remote-desktop/chrome-remote-desktop
FIRST_X_DISPLAY_NUMBER = 0

def get_unused_display_number():
  """Return a candidate display number for which there is currently no
  X Server lock file"""
  display = FIRST_X_DISPLAY_NUMBER
  # while os.path.exists(X_LOCK_FILE_TEMPLATE % display):
  #   display += 1
  return display

def launch_session(self, server_args, backoff_time):
  """Launches process required for session and records the backoff time
  for inhibitors so that process restarts are not attempted again until
  that time has passed."""
  logging.info("Setting up and launching session")
  self._init_child_env()  # コメントアウトした方がよいかも
  self.setup_audio()  # コメントアウトした方がよいかも
  self._setup_gnubby()
  # self._launch_server(server_args)
  display = self.get_unused_display_number()
  self.child_env["DISPLAY"] = ":%d" % display
  if not self._launch_pre_session():
    # If there was no pre-session script, launch the session immediately.
    self.launch_desktop_session()
  self.server_inhibitor.record_started(MINIMUM_PROCESS_LIFETIME,
                                    backoff_time)
  self.session_inhibitor.record_started(MINIMUM_PROCESS_LIFETIME,
                                   backoff_time)
sudo nano /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla

[Allow Colord all Users]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ResultAny=no
ResultInactive=no
ResultActive=yes

[Allow Package Management all Users]
Identity=unix-user:*
Action=org.debian.apt.*;io.snapcraft.*;org.freedesktop.packagekit.*;com.ubuntu.update-notifier.*
ResultAny=no
ResultInactive=no
ResultActive=yes
  • カーテンモード
    • リモート操作中にHOST PC側のディスプレイを表示しない機能
    • Ubuntuだと未対応?
    • ディスプレイの電源を切る。または、ダミープラグを使う
      • 機種依存があるかもしれないが、DisplayPortだとディスプレイの電源を切ったら操作不可能になった。HDMIならディスプレイの電源を切っても操作可能だった

Ubuntu (VirtualBox)

VirbualBoxの設定

ICH9、I/O APIを有効化、PAE/NXを有効化、準仮想化インターフェース=Hyper-V、VT-X/AMD-Vを有効化、ネステッドページングを有効化、ビデオメモリ=256MB(ディスプレイ数を8にしてから1に戻す)、3Dアクセラレーションを有効化、コントローラSATAでタイプ=AHCI、ホストのI/Oキャッシュを使う

(ホストOSがWindowsの場合はHyper-V、Linux系の場合はKVMが良いみたい)

インストール後

  • ソフトウェアを最新にする (念のため、この順番が良い)
    • Ubuntu Softwareから全部Updateしておく (固まるかもしれないので、topで処理状況を確認する)
    • sudo apt-get update
    • sudo apt-get upgrade
  • Guest Additions CDのインストール

Windowsとの共有フォルダのマウント

  • VBoxのメニューバー -> デバイス -> 共有フォルダ- -> 共有フォルダ-設定 で共有フォルダ設定する (例. win_share。自動マウント、永続化する)
  • マウントポイントをubuntu上で作る (例. ユーザ名 = tak)
    • mkdir /home/tak/Desktop/win_share
  • マウントする
    • sudo mount.vboxsf win_share /home/tak/Desktop/win_share
mount.sh
#!/bin/sh
sudo mount.vboxsf win_share /home/tak/Desktop/win_share

Windowsのデスクトップフォルダ全体を共有すると、Read Onlyになってしまう。

  • 追記(2020/02/12)
    • 以下の方が便利。
      • sudo adduser iwatake vboxsf
      • VirtualBoxの共有フォルダの設定に、マウントポイント = /home/iwatake/Desktop/devel などとし、「永続化する」にチェックを付ける。

ターミナルのプロンプト変更

ユーザ名やマシン名を消して、カレントディレクトリのみ表示にする。code ~/.bashrc

.bashrc
if [ "$color_prompt" = yes ]; then
    # PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    # PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
    PS1='${debian_chroot:+($debian_chroot)}\w\$ '
fi

ターミナルの言語設定

code ~/.bashrcで、最後の方に以下を追加。場合によっては、export LANG=Cの方がいいかも。

.bashrc
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

どこでもEmacsショートカット

どこでもEmacs同様のカーソル移動、Deleteを使えるようにする。Ctrl-a、Ctrl-d など。実際には、Ctrlキーではなく、Caps Lockキーを使う。(先ほどの設定でホストOSであるWindows上でCaps LockキーをScroll Lockにしているので、実際には、Scroll Lock-a、Scrol Lock-dになる。)

Scroll LockキーをMeta_Lキーに変更する。

/usr/share/X11/xkb/symbols/pc
省略
    // modifier_map Mod1   { <META> };
    modifier_map Mod2   { <META> };
省略
    //key <SCLK> {	[  Scroll_Lock		]	};
    key <SCLK> {	[  Meta_L		]	};
省略

Meta_Lキーを押したときに、メニューバーを選択しない (ALT的な動作をさせない)

/usr/share/X11/xkb/symbols/altwin
// Meta is mapped to second level of Alt keys.
partial modifier_keys
xkb_symbols "meta_alt" {
    //key <LALT> { [ Alt_L, Meta_L ] };
    key <LALT> { [ Alt_L ] };
    key <RALT> { type[Group1] = "TWO_LEVEL",
                 //symbols[Group1] = [ Alt_R, Meta_R ] };
                 symbols[Group1] = [ Alt_R ] };
    // modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
    modifier_map Mod1 { Alt_L };
//  modifier_map Mod4 {};
};

Autokeyを使って、ショートカットキーを登録する。例えば、Meta-fというホットキーに、keyboard.send_key("<right>")を割り当てる。AutoKeyを開いて、New->Folderで、mysettings/Autokeyを開く。その中に、設定済みファイル (https://github.com/take-iwiw/Autokey/archive/master.zip) をコピーする。

os_02.jpg

Start Applications (gnome-session-properties)に登録する

os_03.jpg

その他

shファイルを実行/編集選べるようにする

Files -> メニューバー -> Edit -> Preferences -> Behavior -> Executable Text Files -> Ask each time

Filesでアドレスバー表示にする

Ctrl-Lで切り替える。または、
gsettings set org.gnome.nautilus.preferences always-use-location-entry true

インストールするソフト

  • Visual Studio Code (MSのサイトから.debでダウンロード)
  • Autokey (Ubuntu Softwareから)

VSCodeをsudoで開く

sudo code --user-data-dir="." ファイル名

OpenCV(x86_64 linux)

apt update && apt upgrade -y
apt install -y build-essential cmake nano zip wget curl git
apt install -y python3-dev python3-pip
apt install -y ffmpeg libavutil-dev libavcodec-dev libavformat-dev libavresample-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev libdc1394-22-dev
apt install -y libatlas-base-dev libopenblas-dev liblapack-dev libtbb-dev libeigen3-dev
apt install -y libgtk-3-dev
wget https://github.com/opencv/opencv/archive/refs/tags/4.5.3.zip
unzip 4.5.3.zip
cd opencv-4.5.3/
mkdir build && cd build

cmake .. -DWITH_TBB=ON -DWITH_FFMPEG=ON
make -j4
make install
ldconfig

Python

pyenv + venv

Windows

PowerShell
[System.Environment]::SetEnvironmentVariable('PYENV',"C:\iwatake\devel\python\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('PYENV_HOME',"C:\iwatake\devel\python\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('path', "C:\iwatake\devel\python\.pyenv\pyenv-win\bin;" + "C:\iwatake\devel\python\.pyenv\pyenv-win\shims;" + [System.Environment]::GetEnvironmentVariable('path', "User"),"User")
  • 下記コマンドでpythonをインストールしたり、新規環境を作る
PowerShell
pyenv install 3.8.9
pyenv shell 3.8.9
python -m venv C:\iwatake\devel\python\.venv\py38_test01
C:\iwatake\devel\python\.venv\py38_test01\Scripts\Activate.ps1
python -m pip install --upgrade pip
  • シェルを実行できない場合は、必要に応じて管理者権限からPowerShellを起動して、 Set-ExecutionPolicy Remotesigned
  • それでもできない場合は、pyenv.ps1を右クリック→プロパティ→セキュリティの項目の「許可する」をチェック

Linux

  • 下記コマンドでインストール
sudo apt-get update; sudo apt-get install make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init --path)"' >> ~/.profile
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
  • シェル再起動
  • 下記コマンドでpythonをインストールしたり、新規環境を作る
pyenv install 3.8.9
pyenv shell 3.8.9
python -m venv ~/.venv/py38_test01
source ~/.venv/py38_test01/bin/activate
python -m pip install --upgrade pip

WSL2 (Ubuntu)

基本的には、 https://docs.microsoft.com/ja-jp/windows/wsl/ の通り

WSLのインストール

  • WSLを有効にする、仮想マシンの機能を有効にする
commandOnPowershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
commandOnPowershell
wsl --set-default-version 2
  • Microsoft Storeから、Ubuntuをインストールする
  • 起動して、IDとパスワードを設定する

設定

デフォルトのイメージの場所

C:\Users\iwatake\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState

ホームディレクトリをWindows側に変更する (遅くなるらしいのでやらないほうが良い)

  • sudo nano /etc/passwd
    • pi:x:1000:1000:,,,:/home/pi:/bin/bash
    • ↑の /home/pi を変更
  • Windows Terminalの場合
    • Window Terminalで設定を開く
    • プロファイル -> Ubuntu-xx.xx -> ディレクトリの開始、を変更する

WSL側のファイルにアクセスする

\wsl$\Ubuntu-20.04\home\pi

バックアップ

commandOnPowershell
wsl --export Ubuntu-20.04 C:\iwatake\devel\wsl_backup\ubuntu-20.04_20210710_clean.tar

イメージの削除

commandOnPowershell
wsl --unregister Ubuntu-20.04

復元とデフォルトユーザ名変更

commandOnPowershell
wsl --import Ubuntu-20.04 C:\iwatake\devel\wsl_image\Ubuntu-20.04 C:\iwatake\devel\wsl_backup\ubuntu-20.04_20210710_clean.tar --version 2
ubuntu2004.exe config --default-user pi

GUI表示

  • Windows
    • VcXsrvをインストール
      • 初回起動時の設定で、 Disable access control にチェックをつける
  • Ubuntu
    • export DISPLAY=192.168.1.2:0.0 または、 (IP省略は不可)
    • export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
    • ↑を .bashrc に書いておく

VSCodeから編集する

  • Windows
    • VSCodeと ms-vscode-remote.vscode-remote-extensionpack をインストール
    • VSCodeインストール時にパスを追加しておく
  • Ubuntu
    • sudo apt install -y wget ca-certificates
    • ターミナルから code . で起動

Docker

インストール

  • Docker Desktop for Windowsをインストール
  • VSCodeに ms-azuretools.vscode-docker をインストール

PowerShellのコマンド補完

commandOnPowershell
Install-Module -Scope CurrentUser posh-docker
notepad $PROFILE

以下を追記
Import-Module posh-docker

Containerを作る (開発用。Windowsとの共有フォルダとX Display forwarding)

docker pull ubuntu:20.04
docker run -v /C/iwatake/devel:/devel  -e DISPLAY="192.168.1.2:0" -itd --name="ubuntu_01" ubuntu:20.04
docker start ubuntu_01
docker exec -it ubuntu_01 bash

Imageを作る

docker commit --pause ubuntu_01 ubuntu:work_cv

WSL2 + GPU + Docker on Windows 11

Install

WSLのインストール

PowerShell
wsl --install -d Ubuntu-20.04

いろいろ

  • イメージ置き場
    • C:\Users\iwatake\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState
  • WindowsからWSLファイルへのアクセス
    • \\wsl.localhost\Ubuntu-20.04
  • WSLからWindowsファイルへのアクセス
    • /mnt/c/
  • WSLのGUIアプリを実行する場合、Windows側にX表示用アプリ (VcXsrvなど) は不要。だけど、Docker上のGUIアプリを実行する場合は必要っぽい

VSCodeのインストール

  • ms-vscode-remote.vscode-remote-extensionpack をインストールしておく
WSL
sudo apt update && sudo apt upgrade
sudo apt install wget ca-certificates
code .

NVIDIA CUDA in WSL のインストール

NVIDIA Container Toolkit のインストール

WSL
curl https://get.docker.com | sh
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container-experimental.list | sudo tee /etc/apt/sources.list.d/libnvidia-container-experimental.list

sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo usermod -aG docker $USER
sudo service docker restart
sudo service docker start    # デーモンの登録はできないらしいので、毎回startが必要
  • メモ
    • docker runすると、 docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. エラーが出る
      sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
      sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
      

試す

WSL
docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark  
docker run --gpus all -it --rm -v /mnt/c/iwatake/devel/:/devel -e DISPLAY="192.168.1.2:0" nvcr.io/nvidia/tensorrt:21.11-py3
docker run --gpus all -it --rm -v /mnt/c/iwatake/devel/:/devel -e DISPLAY="192.168.1.2:0" nvcr.io/nvidia/cuda:11.4.2-devel-ubuntu20.04
docker run --gpus all -it --rm -e DISPLAY=$DISPLAY nvcr.io/nvidia/cuda:11.7.1-devel-ubuntu22.04
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?