2020/09/05

Hyper-V上で動くUbuntu 20.04LTSで拡張セッションを使うには

2年半ぶりの更新です。

いろいろと技術ネタを書こうと思いつつ,仕事に気力を奪われ更新する余裕もなく。

というわけで,今回はHyper-V上で動くUbuntu20.04LTSで拡張セッションを使うための方法を,備忘録がてらまとめます。

ちなみに試した限り,XubuntuなどのUbuntu派生ディストリビューションではうまく動きませんでした。

用意するもの

  • Windows 10 Proが入ったPC
    • Hyper-Vが有効化されている前提
  • 十分なメモリ
  • 十分な記憶領域(SSDがおすすめ)
  • Ubuntu 20.04 LTS の 64bit版インストールISOイメージ
  • インターネット接続
  • やる気
  • 時間(30分くらい)

手順

  1.  Hyper-Vマネージャーを開き,右側の「操作」ペインから「新規」をクリックした後,「仮想マシン」を選んで仮想マシンを新規作成します。
    「クイック作成」は試していないけど,うまく動かない気がするのでやめておいたほうが無難。
  2. ウィザード画面が出てくるので,まずは次へ。
  3. 適当にいい感じの名前を付けましょう。
    お好みで「別の場所に格納する」を選んでもいいです。これを選ぶとVirtual Machineフォルダにぐちゃぐちゃに放り込まれることが防げます(と思っている)。
  4. 仮想マシンの世代を選びます。BIOSベースかEFIベースか,ですね。
    どっちを選んでも正直良いんですが,物理の光学ドライブをVMから触れるようにしたかったら第1世代にする必要があります。
    今回は別に光学ドライブにアクセスできる必要もないので,第2世代をチョイス。
  5.  割り当てるメモリ量を指定します。
    最初は1024MBが指定されていますが,4GBくらいは割り当ててあげたほうが快適に動作するように思います。メモリが余っていれば8GB割り当ててもよし。
  6. ネットワークの設定をします。
    仮想マシンがインターネットにつながるよう,適切なネットワークアダプタを選んでください。
    仮想スイッチを自分で作っているならお好みのスイッチを選びましょう。
    よくわかんない場合はとりあえずDefault Switchを選んでおけばよし。
  7. 仮想ハードディスクを作ります。
    お好みではありますが,とりあえず動かすだけなら64GBもあれば十分。
    仮想ハードディスクなんてOSを動かすためのもので,大事なファイルなんて保存しませんもんね?
    (ファイルを保存したければクラウドなりNASにでも突っ込むのがベターだと個人的には思います)
  8. 最後に,インストールメディアを指定します。
    「参照」ボタンを押して,あらかじめ用意されているUbuntu 20.04のインストールISOイメージを選びます。
  9. 「完了」ボタンを押してウィザードを終了します。
  10. Hyper-V マネージャに戻ったら,今しがた作成した仮想マシンを選んで右クリックし,「設定」を選びます。
  11. セキュアブートの設定を変えないと,起動しません。
    テンプレートのプルダウンを押して,「Microsoft UEFI 証明機関」を選びます。
    面倒だったらセキュアブートを無効にしてもよいです(ただし,起動時にVM上のUEFIが赤い警告表示を出してきます。)。
  12. 統合サービスのうち,「ゲストサービス」もせっかくなので有効にしておきます。
  13. もしほかにも変えたい設定があれば,この時に変えておくとよいです。
    私は動的メモリの設定やプロセッサの数,チェックポイント(VMWare Workstationで言うところのスナップショット)の作成関係あたりを変更しました。
    特に,「自動チェックポイントを使用する」が有効になっていると,ことあるごとにチェックポイントが作成されてしまい,ホスト側のディスク領域が圧迫されます。
    そのほか,ホスト側をシャットダウンしたりVMを一時停止するときにメモリの情報を書き込む先であるスマートページングファイルの場所を変更しておくのもいいでしょう。あっという間にSSDの寿命が削られそうなので,今回はスマートページングファイルの保存場所をSSDではなくHDDにしています。


  14. 設定ができましたので,「OK」を押して設定画面を閉じます。
  15. Hyper-Vマネージャから作成したVMを選択して,起動します。
  16. Ubuntuが起動したら,インストールしましょう。
    左側の言語一覧から一番下にある「日本語」を選んで,「Ubuntuをインストール」を押します。
  17. キーボード設定をします。基本的にはデフォルトのままで特にいじらず次に進んでOK。
    英字キーボードを使ってる人とかはいい感じの設定を選んでください。
  18. インストールのオプションが設定できます。
    この辺りは用途に合わせてお好みで。
  19. インストール先を選びます。
    「ディスクを削除してUbuntuをインストール」を選択でOK。「インストール」を押します。
  20. ディスクの変更について警告が出たら,「続ける」を押して次に進みます。
    出来立てほやほやの仮想ハードディスクなので,書き込まれて困るものなんぞ何もない。
  21. タイムゾーンを選びます。
    「どこに住んでいますか?」と聞かれた道府県にお住まいの方,気持ちをぐっとこらえてTokyoを選び,「続ける」を押しましょう。
  22. ユーザー名とパスワードを設定します。
    このとき,「ログイン時にパスワードを要求する」を選んでいることを確認してください。自動ログインの場合,拡張セッションがうまく動かない場合があります。
  23. インストールが終わるまで気長に待ちます。SSDなら5分もあれば終わるはずです。
  24. 再起動を求められたら,「今すぐ再起動する」ボタンを押してVMを再起動します。
  25. 今しがたUbuntuをインストールしたVMが起動したら,作成したユーザーでログインします。
  26. 親切な画面が出てきますが,今回はとりあえず「スキップ」しておきます。
    もし気になる場合は,一通り終わった後で設定メニューからオンラインアカウントの追加をしてください。
  27. Livepatchも同様にスキップするので,右上の「次へ」ボタンを押します。
  28. 情報の送信はお好みで。どちらかを選んで「次へ」を押します。
  29. 位置情報サービスを有効にするかを選び,「次へ」を押します。
    こちらもどちらにするかはお好みでどうぞ。
  30. ウェルカムウィザードはこれで完了です。「完了」ボタンを押してウィザードを閉じます。
  31. ソフトウェアの更新をおすすめする画面が出てきたら,「後で通知する」を選んでいったん画面を閉じます。
  32. 端末を開き,以下のコマンドを実行して,カーネルやソフトウェアをアップデートします。また,お好みで3行目に書いているautoremoveを行って,不要なソフトウェアを消してもよいです。
    ~$ sudo apt update
    ~$ sudo apt upgrade
    ~$ sudo apt autoremove
  33. アップデートがいったん終わったら,再起動しておきます。
    再起動の代わりにシャットダウンして,チェックポイントを作成しておくのもよいですね。
    ~$ sudo reboot now
  34. 再起動が完了したら再びログインし,端末を開きます。
    端末の開き方はググってください。
  35. 以下のコマンドを1行ずつ実行し,Gitをインストールしつつ,拡張セッションに必要なものをインストールスクリプトをGithubから拾ってきます。
    偉い人がプルリクを投げてくれているので,それを使いましょう。
    ~$ sudo apt install git
    ~$ git clone https://github.com/microsoft/linux-vm-tools.git
    ~$ cd linux-vm-tools/
    ~$ git fetch --all
    ~$ git pull origin pull/106/head:pull_106
    ~$ git checkout pull_106
    ~$ cd ubuntu/20.04/
    ~$ sudo bash ./install.sh

  36. インストールのスクリプトが終わると,「Reboot your machine to begin using XRDP.」と表示されます。

    言われたとおりに再起動しておきましょう。
    端末を閉じて,右上の電源アイコンのボタンから再起動してください。
    ~$ sudo reboot now をたたいてもよいのですが,経験上なぜかコマンドをたたいた場合は途中で止まってしまうように感じているのでおすすめしません。
  37. 再起動が終わったら,ログインし,もう一度スクリプトを実行します。
    端末を開いて,以下のコマンドを1行ずつ実行してください。
    ~$ cd linux-vm-tools/ubuntu/20.04/
    ~$ sudo bash ./install.sh
  38. VMをシャットダウンします。
    右上のボタンを押してGUIから「電源オフ」を選ぶのがおすすめです。
    ~$ sudo halt を叩いてもよいんですが,何回かUbuntu環境を作る中で試した経験からすると,シャットダウンが途中で止まることがあるような気がします。
    電源が落ちるまで結構時間がかかることもありますが,気長に待ってください(さすがに1時間待っても落ちなかったらおかしいので,停止してよいです。。
  39. 今度はホスト側のWindows 10 Proで,Powershellを管理者として開きます。
    スタートボタンを右クリックして,「Windows Powershell (管理者)」を選べばOK。
  40. Powershellで以下のコマンドを叩いて,現在のVMの状態を確認します。
    なお,<your_vm_name>は作成したVMの名前に置き換えてください。ダブルクオーテーション( " )でくくることもお忘れなく。
    (Get-VM -VMName <your_vm_name>).EnhancedSessionTransportType
    実行した結果,「VMBus」と表示されていることを確認してください。
  41. 以下のコマンドを実行します。なお,<your_vm_name>は作成したVMの名前に置き換えてください。ダブルクオーテーション( " )でくくることもお忘れなく。
    Set-VM -VMName <your_vm_name>  -EnhancedSessionTransportType HvSocket
  42. もう一度40.と同じコマンドを実行し,結果が「HvSocket」に変わっていればOKです。
  43. Ubuntu 20.04を入れたVM を起動します。
  44. 拡張セッションの画面が表示されれば成功です。
    「接続」を押すと拡張セッションでUbuntu 20.04に接続されます。
    なお,Ubuntu側でデーモンが立ち上がっていない可能性があるので,接続ボタンを押すのは少し待ってからにしましょう。
  45. Xorgの画面が表示されたら,usernameとpassword欄にそれぞれユーザ名とパスワードを入力し,OKを押せばログインできます。

最後に

途中からスクリーンショットを撮るのは端折り始めたけれど,ここまで書くと意外と長い道のりだったなぁ。やっぱりQiitaとかに頻繁に記事を書いている人はすごい。

それでは皆様,楽しいHyper-Vライフを!!

参考にしたサイトとか