Montereyがなかなか出ないので、Winsows 11で遊びました。10で動いているHP EliteDesk 800 G2 DM (Core i5-6500T) を11にアップデートしました。CPUは11に非対応ですが、インストール用USBメモリを作ったらインストールできました。各種設定は、Windowsに慣れていないこともあっていつもながら大変でした。10から11で変わってさらに面倒になったところもありました。
Table of Contents
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を設定した時の様子を紹介しました。
いろいろ頑張ってきたHP EliteDesk 800 G2 DM (Core i5-6500T)ですが、Windowsをインストールしました。Hackintoshとしては完敗です。macOSからはWindowsを画面共有で使います。sshでUbuntuも使います。電源が切れてても使えるようにWake On LANの設定もしました。Microsoft Remote Dektop最近はWindowsが絶対必要という場面が少なくなりましたが、世の中がWindows前提なので、たまにWindowsを使わざるを得ない時があります。Hackintoshなら、マルチブートにしておけば、同じマシンでWindowsが使えますが、切り替えが面倒です。VMware ... HPの小型デスクトップEliteDesk (6: Windowsを入れる) - Boot macOS |
今回もこれに従って、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を起動するための準備作業は、かなりシンプルでした。
- 「コントロールパネル – プログラム – Windowsの機能の有効化または無効化」から「Linux用Windowsサブシステム」にチェックする
- 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番に送ります。
やりたいこと以下のような構成のLANで、Host2からwsl2にssh接続する。wsl2ではネットワーク構成が変更されたwsl1では良くも悪くもWindowsとLinuxが混ざり合っていました。wsl1ではWin... wsl2でsshサーバを起動し、外部からそこに接続 - Qiita - Qiita |
まずは、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ツール」に名前が変わっていたりしました。
これにより以下のように処理が行われます。
- Windowsが起動するとバッチファイルが動く
- バッチの中で、Linuxコマンドでsshdを起動する
- バッチの中で、Linuxのシェルスクリプトを起動する
- シェルスクリプトの中で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® 10 用インテル® ネットワーク・アダプター・ドライバーのリリース 26.6 をインストールします。 Windows® 10 用インテル®・ネットワーク・アダプター・ドライバー - Intel |
Windowsのデバイスマネージャからこのドライバを入れようとすると、「すでに最新ドライバが入ってます」と言われてインストールできませんでした。ダウンロードした一式に入っているインストーラでインストールしました。
この結果、デバイスマネージャの設定でWOLを有効できるようになります。以下のスクリーンショットでは、Wake On Magic Packetが有効になるように設定しています。このほか「電源の管理」タブでもWOL関連の設定がありますが、多分デフォルトでokです。
BIOSにもWOLに関係する設定があります。こちらは、既に設定済みなので、今回は作業不要でした。
以前、Homebridgeを導入したのですが、
前回は、Raspberry Pi Zero WにhttpアクセスするとLEDが点滅するLチカサーバを作りました。iPhoneのショートカット経由でSiriからも動きました。今回は、HomebridgeをRaspberry Piにインストールして、本格的なHomeKitアクセサリとして作り直します。Homebridgeをインストールということでお待たせしました、連載3回目にしてようやくHomebridgeをインストールします。HomebridgeはAppleのHomeKitのアクセサリと同じ振る舞いをするデバイスを作るための、オープンソースソフトウェアです。HomeKitアクセサリを商品化するメーカーは、Ap... Homebridge入門: (3) LチカするHomeKitアクセサリを作る - Boot macOS |
HomebridgeにはWOLによりコンピュータ機器の電源を投入するプラグインがいくつか公開されています。その中から、Homebridge Wolというプラグインを使ってます。
A Wake on Lan plugin for Homebridge. Contribute to AlexGustafsson/homebridge-wol development by creating an account on GitHub. GitHub - AlexGustafsson/homebridge-wol: A Wake on Lan plugin for Homebridge - GitHub |
これにより、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経由で使用する予定です。