HPの小型デスクトップEliteDesk (7: Windows 11を入れる)

Montereyがなかなか出ないので、Winsows 11で遊びました。10で動いているHP EliteDesk 800 G2 DM (Core i5-6500T) を11にアップデートしました。CPUは11に非対応ですが、インストール用USBメモリを作ったらインストールできました。各種設定は、Windowsに慣れていないこともあっていつもながら大変でした。10から11で変わってさらに面倒になったところもありました。

Windows 11がインストールできない

HP EliteDesk 800 G2 DMは、macOSではiGPUが動作しなくて挫折して、Windows 10を入れていました。それでMacからはRemote DesktopでWindowsを使ったり、WSL機能で動かすUbuntuにsshしたりして使っていました。このマシンをWindows 11にアップデートして、設定をやり直しました。

このマシンは、普通のアップデートではWindows 11がインストールできません。CPUが非サポートの第6世代なので致し方ないことです。本来ならばサポート対象の第8世代以降のCPUが必要です。でも、USBメモリーにWindows 11のインストーラを作れば可能でした。インストーラ作りは、Windows 10の環境で作業しました。USBメモリは8GBあれば良いようです。

このUSBメモリで起動すると、Windowsインストーラが動きます。インストーラのメニューには、過去の設定を引き継いでアップデートする選択肢もありましたが、選択できませんでした。クリーンインストールしなければならないようです。これで特に問題なくWindows 11が動くようになりました。

以前、Windows 10を設定した時の様子を紹介しました。

今回もこれに従って、11での各種設定をしていこうと考えました。ただ、色々細かいところが10とは違っていて、少し苦労しました。

WSL2が動かない

WindowsはmacOSと違って、UNIX的な機能や操作が使えなくて残念です。でもWSL (Windows Subsystem for Linux) を使えばLinux機能が動きます。WSLは、LinuxとWindowsが連携できるように結構頑張って作られています。ただ、ファイルシステムもコマンド体系も違うので、macOSのターミナル操作とGUI操作のような一体感は望めないです。

今まではWSLを使っていたのですが、Windows 11にしたことで、WSL2に移行することになります。WSL2になって、LinuxとWindowsがより統合されたのかと期待したのですが、どちらかというと溝が深まった印象でした。インストールの手間も少し増えました。

Windows 10でWSLを有効にしてUbuntuを起動するための準備作業は、かなりシンプルでした。

  1. 「コントロールパネル – プログラム – Windowsの機能の有効化または無効化」から「Linux用Windowsサブシステム」にチェックする
  2. Microsoft StoreからUbuntu 20.04 LTSをダウンロードして起動する

この2ステップだけでした。今回も同様の作業をしてWSLを起動したところ、以下のように

WslRegisterDistribution failed with error: 0x800701bc
????? 0x800701bc WSL 2 ??????? ????? https://aka.ms/wsl2kernel

謎の文字化けエラーメッセージが出ます。???の部分は正確では無いです。日本語でエラーを出しているけど、表示に失敗しているようです。読める英語部分の文言で検索したところ、「https://aka.ms/wsl2kernelに行ってカーネルコンポーネントを更新しなさい」というエラーのようです。最新の(WSL2 Linux カーネル更新プログラム)パッケージをダウンロードします。後で分かったのですが、StoreにあるUbuntuはWSL用のもので、WSL2では動かないので、WSL2に対応したカーネルパッケージが必要なようです。

これを解決すると、次には、仮想マシンの機能を有効にしなさいというようなエラーメッセージが出ます。Windowsの機能の有効化または無効化の項目の2つ上に見えているHyper-Vの設定のことのようです。以前は、以下のように無効でも問題なく動いていました。

これを有効にしたところ、WSL2でUbuntuが無事起動しました。これも後で知ったのですが、WSL2からはLinuxがHyper-Vの仮想環境で動作するよう変更になったようです。

SSHサーバが動かない

Ubuntuには最初からsshサーバが入っています。通常のUbuntuならば、sshサーバを以下のコマンドで起動することができます。

sudo service ssh start

WSLの時はこのコマンドで、他のマシン、例えばMacからWindowsマシンのIPアドレスを指定して、WSLのUbuntuにssh接続できました。WSL2ではこれができませんでした。Ubuntuと、同じコンピュータ上のWindowsからも localhostにはssh接続できますが、WindowsマシンのIPアドレスを指定すると接続できません。

Ubuntuでifconfigすると、eth0に見慣れないIPアドレスが設定されています。WSLではWindowsのIPアドレスがそのままLinuxに設定されていたのですが、WSL2では仮想のアドレスが割り当てられるようになったそうです。なので、外部のマシンからWindowsのIPアドレスを指定してもWSLのLinux環境に接続できません。

WSL2になってから、Linuxは仮想環境で動くようになり、Windowsとは別のIPアドレスが割り当てられるようになったのが、原因のようです。


https://atmarkit.itmedia.co.jp/ait/articles/1909/09/news020.html より引用

Linuxカーネルにも仮想環境に対応したパッチが当てられているようです。上記で、Hyper-Vが必須になったり、Ubuntuのカーネルを差し替える必要があったのも、これが理由のようです。


https://atmarkit.itmedia.co.jp/ait/articles/1906/14/news019.html より引用

素人の見解なので的外れなのかもしれませんが、VMwareとかVirtualBoxなどの仮想化ソフトウェア製品やDockerなんかと代わり映えしない気がしてしまいました。Linux環境がもっとWindowsにガチガチに絡みついて、よりシームレスに一体化して欲しかった気がします。

話を戻しますと、外部からssh接続できない問題は、WindowsマシンのIPアドレスを指定しても、WSL2のLinux環境に接続できないことでした。WSL2は独立した仮想のネットワークに接続されているからです。さらに厄介なことに、WSL2がLinuxに割り当てるアドレスは、起動するたびに変化するらしいです。

色々検索したところ、解決策はあるようでした。以下で紹介されていました。Windows側から、Ubuntu側にポートフォワーディングする設定です。これで、sshの22番のアクセスが来たら、Ubuntuのアドレスの22番に送ります。

まずは、Ubuntu側に、自分のIPアドレスを取得して、Windows側のポートフォワード機能に登録するスクリプトを書きます。ホームディレクトリに適当な名前をつけて保存します。

#!/bin/bash

IP=`hostname -I`

netsh.exe interface portproxy delete v4tov4 listenport=22
netsh.exe interface portproxy add v4tov4 listenport=22 connectaddress=$IP

sc.exe config iphlpsvc start=auto
sc.exe start iphlpsvc

hostnameコマンドからIPアドレスを取得して変数IPに入れて、それを使ってWindowsのnetshとscコマンドで設定しています。次に、このファイル(例えば /home/bootmacos/port_f22.sh )を、Windowsから起動するバッチファイルを書きます。ついでにsshdを起動しておく記述も加えておきます。

@echo off
WSL -u root -- service ssh start
WSL --exec /home/bootmacos/port_f22.sh

そして、Windowsを起動したときに、このバッチファイルが管理者として実行されるように設定します。コントロールパネル–>システムとセキュリティ–>Windowsツール–>タスクスケジューラに行き、ここで「スタートアップ時(システム起動時)に」「ログインしているかどうかにかかわらず実行する」設定で、バッチファイルを登録します。結構ややこしいです。Windows 10では「管理ツール」という名前だったのが11では「Windowsツール」に名前が変わっていたりしました。

これにより以下のように処理が行われます。

  1. Windowsが起動するとバッチファイルが動く
  2. バッチの中で、Linuxコマンドでsshdを起動する
  3. バッチの中で、Linuxのシェルスクリプトを起動する
  4. シェルスクリプトの中でIPアドレスを取得してWindowsコマンドでポートフォワードを設定する

となります。WindowsとLinuxを行ったり来たりしてややこしいです。参考にしたサイトでは、全部の作業をWindowsバッチファイルで行う方法も紹介されていましたが、試したところ動作が不安定でした。

sshdが起動するように設定するには、Linuxならコマンドひとつ、macOSだと「システム環境設定」「共有」で「リモートログイン」をクリックするだけです。sshdの設定は、WSLでも結構面倒だったのですが、WSL2ではさらに大変でした。でもこれで、今まで通り、電源を入れるだけで、ssh経由でUbuntuに接続できるようになりました。

Wake On LANが動かない

WOLの設定も、いつもながらややこしいです。でもこれは10の時から変更点はありませんでした。

このマシンには、IntelのI219-LMというネットワークアダプター(NIC)チップが使われています。Windows 11には標準でNICのドライバが入っているのですが、この標準ドライバではWOLが動作しません。IntelやHPのサイトからダウンロードしたドライバならWOL可能です。このことをすっかり忘れて、ネットを検索して試行錯誤してしまいました。最初から、自分の書いた記事をちゃんと読めば良かったです。

WOLに対応するドライバを探すために、チップセット名などで検索しました。そして以下のIntelのサイトからドライバをダウンロードしました。

Windowsのデバイスマネージャからこのドライバを入れようとすると、「すでに最新ドライバが入ってます」と言われてインストールできませんでした。ダウンロードした一式に入っているインストーラでインストールしました。

この結果、デバイスマネージャの設定でWOLを有効できるようになります。以下のスクリーンショットでは、Wake On Magic Packetが有効になるように設定しています。このほか「電源の管理」タブでもWOL関連の設定がありますが、多分デフォルトでokです。

BIOSにもWOLに関係する設定があります。こちらは、既に設定済みなので、今回は作業不要でした。

以前、Homebridgeを導入したのですが、

HomebridgeにはWOLによりコンピュータ機器の電源を投入するプラグインがいくつか公開されています。その中から、Homebridge Wolというプラグインを使ってます。

これにより、HomeKitからWindowsマシンの電源を投入し、On/Offの状態を確認できました。下はMacのホーム.appの画面です。Siriにお願いしてWindowsの電源を入れることも可能です。

BIOSもアップデート

ついでにBIOSもアップデートしておきました。HP EliteDesk 800 G2 DMのBIOS画面に、ネットワークから最新BIOSをダウンロードして更新するメニューがあります。クリックするだけで最新版 (2021/4/16版のN21 02.53) になりました。

まとめ

暗黒画面問題で頓挫したHP EliteDeskは、とうとうWindows 11マシンになりました。10より画面が洗練されて、良くなった気がします。引き続き、このマシンにはディスプレイを接続せず、macOSからMicrosoft Remote Desktopとssh経由で使用する予定です。

10件のコメント

  1. LXCoreをつかっていたWSL1は、LinuxのシステムコールをWin用に置き換えていて、どうしても互換性に問題がありました。
    WSL2ではLinuxカーネルが動作しているので、互換性の面では格段にアップしています。Win11からは、WSLgが導入され、GUI対応のLinuxアプリも、Xサーバなしに起動できるようになったので、かなりシームレスに統合されていると感じました。

    ちなみに、上の手順の「Linux用Windowsサブシステム」にチェックする作業は、PowerShellで以下のコマンドで代替できます。

    wsl –update

    フォントの描画がイケてないことを除けば、Windowsの進化は最近のmacOSよりもエキサイティングだなと感じています。

    1. 解説ありがとうございます。参考になります。WSLgのことは知らなかったです。xeyesを動かしたらxサーバが必要なメッセージが出ていて諦めてました。でも、PowerShellでwsl -updateしたらWSLgが動き始めたのか、表示されるようになりました。これは嬉しいです。

  2. >このマシンは、普通のアップデートではWindows 11がインストールできません。CPUが非サポートの第6世代なので致し方ないことです。本来ならばサポート対象の第8世代以降のCPUが必要です。でも、USBメモリーにWindows 11のインストーラを作れば可能でした。

    -> WIndows 11 クリーンインストール完了、お疲れ様です。
    我が家の自作PCも 同じく「CPUが非サポートの第6世代」なので、普通のアップデートではWindows 11がインストールできません。もろもろ検討した結果、Window 11への移行は 当分保留としました。

    参考情報:古いPCにWindows 11を入れたらどうなる?~Microsoftが文書を公開
     https://iphone-mania.jp/news-409368/

    1. 後書き: 
       Win 11初の累積アップデート、適用外警告された非推奨条件PCでも受けられたとの報告
       https://japanese.engadget.com/unsupported-windows11pc-cumulative-upadate-120059278.html

      -> なかば諦めかけた”Windows 11″システム環境への移行、
       でも、上述のWebページを見て発奮。 ダメも元覚悟で、チャレンジした。
       クリーンインストールしか選べなかったが、念願の正式リリースでかつ累積アップデートも難なく終了できたので、一安心。このまま、第6世代のプロセッサーでテストを継続することにした。

      1. 朗報でした。
        まだ少しは見込みがありそうですね。(私も入れてみたいと思いました)
         ただ、Macと違って、Windowsは、ウイルス・マルウェアの数がかなり多いということです。
        本当に、単に、Webを開いただけでも、実害がないように見えて、バックドアを作ることもできるので、結構恐いんですよ。(政府系のWindowsPCの監視の実情を知っていますが、何ひとつもセキュリティソフト警告で警告が出ない場合も中央のコンソールから、パケット監視するとおかしい時があるので、実務用のデータの入ったものにはちょっと抵抗があります)

        1. ウィルス・マルウェアに関しては、最近は、macOSもWindowsも大差ないような気がします。どのOSを使うにしても、ある程度のセキュリティ対策は必要です。

          1.  なるほど、すみませんでした。セキュリティ対策を取らなくてもいいという話ではなかったつもりだったのですが、申し訳ありませんでした。
             私は、<単にシェアがすくないことでもいいこともある>と思うだけです。(売れないのが悪いという考え方自体は、本来資本主義的な個人の考えのはずですから、OSがいいかどうかの問題ではありません)
             ですから、私は、WebやFileserverはLinuxで作ります。<シェアが少ないものに、自分の犯罪の証拠を残してまで、危ない橋はわたりたくはないとクラッカーは考える>と思いますから。

  3. Windows 11は気に入ってます。見た目が最近のmacOSに近くなった感じで、macOSの画面から切り替えたときの違和感が無いです。サポートされてないハードウェアでOSを動かすのはhackintoshで慣れてますので気にならないです🙂

    1. 情報ありがとうございます。簡潔にまとめてあってわかりやすい記事ですね。
      挫折した頃も、sleepしなければ割と安定して動いていました。ただそれでも、長期間(一晩くらい)放置すると「再起動しました」というダイアログパネルが出ていることが何回かあって、ちょっとまだ調整しきれていない感じでした。「再起動しました」表示は、Intel UHD Graphics 630でも出てしまうので、iGPUは難しいと思いました。Haswellの頃はiGPUもすごく安定していたのですが。

bootmacos へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です