サイトアイコン Boot macOS

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

いろいろ頑張ってきた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 Fusion Player 12 が個人利用で無償になって、かなり快適でした。なので仮想環境でWindowsを使う手もあります。マルチブートに比べて性能は出ませんが、macOSとの切り替えが簡単です。今回は第3の選択肢として、Windowsマシンを別に用意して、これにリモートデスクトップする方法を試します。

そこで、macOSをインストールしようとして暗黒画面問題で挫折したHP EliteDesk 800 G2 DM

HP EliteDesk 800 G2 DM (Core i3-6100T)がスリープ復帰後にブラックスクリーンになることに気づきました。Intel HD Graphics 530特有の問題のようで解決策が無いようです。症状前回、このマシンにmacOSをインストールして、オーディオを設定し、USBの設定をしました。順調に動いていると思っていたのですが、スリープ復帰後に画面が暗いままであることに気づきました。映像信号が止まっていて、しばらく放置するとディスプレイが自動パワーoffします。でも画面が暗い状態でも画面共有からは正しく表示して操作できます。スリープ復帰...
HPの小型デスクトップEliteDesk (4: 暗黒画面問題で頓挫) - Boot macOS

にWindowsを入れて、ディスプレイ無しのリモートデスクトップサーバにします。macOSは諦めて、ただのWindowsマシンに戻すのですから、BootmacOSの路線からしたらダメダメな状況です。すみません。でもWindowsマシンが用意できれば、これにmacOS用のMicrosoft Remote Dektopで接続することでWindowsが使えます。Remote Desktopクライアントプログラムは、無償で配布されていて、使いやすいです。応答も素早いので、仮想マシンより快適な気がしました。

Remote Desktopを起動すると、接続先を選べるようになります。接続先のマシンを何個も登録できるインタフェースでした。職場の何台ものWindowsマシンを管理するような状況を想定しているのかもしれません。

HP EliteDesk 800 G2 DMは小型なのでiGPUで動きます。M1が話題になって貧弱さが際立っているインテルiGPUなので、このままディスプレイには接続しないで、ヘッドレスのリモートデスクトップサーバとして使おうと考えてます。小さなマシンなので、邪魔にならないです。

Windowsをインストール

まずはHP EliteDesk 800 G2 DMにWindowsをクリーンインストールします。macOSマシンにされていたところが、本来の姿に戻ることになります。でも元からあったWindowsは綺麗に全消去されているので、起動できるUSBメモリインストーラを作ります。そこで、Z390 + 9900K + OpenCore 0.6.3 + Big Sur の構成のマシン(機種IDはiMac19,1)で以下の作業をしました。Windowsインストール用のISOイメージファイルがダウンロードできるMicrosoftのサイトに行きました。

とりあえずダウンロードしてみたところ、Windowsのイメージファイルは6GBほどでした。12GB超えてるBig Surに比べて優しいですね。

これから頑張れば、インストール用USBメモリをmacOS環境でも作れないことはないです。でも結構難しい作業で、適当に試しても失敗ばかりでした。USBメモリをFAT32でフォーマットするのですが、コピーしなければならないファイルの一つが、FAT32の限界の2GBを超えているところがネックです。それを乗り越える技が複雑過ぎました。

結局、macOSで頑張るのは諦めて、Windowsでインストール用USBを作ることにしました。このマシンの、Big Surとは別のSSDにWindows 10が入っています。OpenCoreでWindows起動SSDを選択して起動し、上記のMicrosoftのサイトに接続しました。すると、ISOイメージファイル以外に、起動可能なUSBインストーラを作成するアプリケーション「Media Creation Took」がダウンロードできるようになってます!。macOSからこのページを開いても、Media Creation Tookの選択肢は見えませんでした。Media Creation Tookは、macOSのcreateinstallmediaコマンドとよく似た名前で、同じような機能のプログラムです。ですが、Windows版の方が完成度高いです。CUIコマンドのmacOS版と違って、GUIで起動して、ISOイメージを自動でダウンロードして、そのままUSBメモリに書き込んでくれます。とても楽でした。

BIOSもアップデート

ついでにBIOSもアップデートしておきました。HP EliteDesk 800 G2 DMのBIOS画面に、ネットワークからダウンロードして更新するメニューがあります。クリックするだけで最新版 (2020/11/6版の02.51 Rev.A) になりました。以下はHPのサイトですが、ここからダウンロードする必要はありませんでした。

ご利用中の以下の製品向けに、最新のドライバー、ファームウェア、及びソフトウェアをダウンロードしてください。 HP EliteDesk 800 35W G2 Mini PC.このHP公式Webサイトでは、Windows及びMacオペレーティングシステムに対応したHPコンピューター製品やプリント製品のドライバを自動的に検出し、無料でダウンロードするのに役立ちます。
HP EliteDesk 800 35W G2 Mini PC ソフトウェア及びドライバーのダウンロード | HP... - 

デジタルライセンス

HP EliteDesk 800 G2 DMの筐体のどこを見てもWindowsのプロダクトキーが書いてありません。Windowsを買わないとダメなのか、全消去するんじゃなかったとと少し後悔しました。ところが今やデジタルライセンスの時代だったんですね。このマシンの情報がすでにどこかのサーバに登録されているらしく、Windowsインストール作業最初のプロダクトキー入力をスキップしても、自動的に認証されてました。SSDもメモリもCPUも交換してしまっているので、BIOSのシリアル番号のようなもので個体識別しているようです。メーカー製PCにはWindows代が含まれているので当然の結果かもしれませんが、予想外でありがたかったです。ハードにOS代が含まれていることは、よく考えたらmacOSも同じです。

HP EliteDesk 800 G2 DMの中古価格は、Core i3モデルが1.5万円くらい、i5モデルでも2万円くらいです。一方で、マルチブートしたり、仮想環境を使ってWindows 10 Proを起動する場合には、パーツに紐付けたDSP版でも1.7万円くらい、通常版なら2万円以上のライセンス代が必要になります。そう考えると、デジタルライセンスが付いた上にCPUもメモリも手に入る中古のハードを買うのは、お得な手段なのではと思いました。

リモートデスクトップサーバを有効化

インストールしたWindows 10で最初に行った作業は、リモートデスクトップサーバをonにすることです。これでmacOSから作業ができます。設定する場所が「設定」だったり「コントロールパネル」だったり混乱します。

WSLを入れる

次に行った作業は、WSL (Windows Subsystem for Linux) を有効にすることです。

そして、Microsoft StoreからUbuntu 20.04 LTSをダウンロードしてインストールしました。WSLがあってLinuxが使えることは、macOSユーザから見てちょっと羨ましいです。

とはいえ、WindowsとLinuxではディレクトリ構成が違います。ディレクトリ階層の区切りも¥と/で違います。ファイルやフォルダをUbuntuのウィンドウにドラッグ&ドロップしても、Linuxが理解できるディレクトリ文字列になりません。macOSファインダとターミナルのような円滑な操作性ではなく、ぎくしゃくしている印象です。Windows上の仮想環境でLinuxを動かしているので仕方ないですが、もう少し統合してほしいと思いました。ネイティブに動いているmacOSのUNIX環境が、シームレスで使いやすいことを改めて実感しました。

Dropboxを入れる

One Driveの方がWindowsとの相性が良いのでしょうが、Dropboxを使ってます。One Driveは、昔試したことがありますが、macOSとの相性が悪かったです。One Driveでは、Windowsの規則で、ファイル名に使えない文字があります。例えば、CON, PRN, AUXという名前はファイル名・フォルダ名に使えません。また、” * : < > ? / \ |などの文字も使えません。Dropboxにはそのような制約はありません。自分で作るファイルなら命名に気をつければ良いのですが、例えばアプリケーションのパッケージの中に、たまたまこのような名前のファイル・フォルダがあると厄介です。これらがOne Driveにコピーする際に除外され、アプリケーションの内容が変わってしまいます。実際にそのような事例が発生しました。現在のOne Driveも同様な命名規則を引き継いでいるのかどうかわかりませんが、こういう理由で使用を避けてました。

SSHサーバを入れる

昔のWindowsでsshを使うのは面倒だった記憶がありました。でもWindows 10ではsshクライアントが標準で入っているようです。PowerShellから使えました。でもsshサーバ (sshd) はOpenSSHを自力でインストールする必要があります。

一方で、WSLのUbuntuには、あって当然なのですが、sshのクライアントとサーバが入っています。Ubuntuのsshサーバは、以下のコマンドで起動することができます。

sudo service ssh start

ということで、sshdを使うには、

の2種類の選択肢があります。ここはすでにインストール済みのLinuxにしました。Windowsルートは手順が大変そうでしたが、Linuxルートにも罠がありました。普通のLinuxなら

sudo systemctl enable sshd.service

というような類のコマンドで、起動時に自動的にsshdが起動するように設定できました。でもWSLでは技術的な事情でsystemctlコマンドが動かないようです。なので、コンピュータを起動するたびごとに、

sudo service ssh start

のコマンドを発行する必要があります。これは自動化したいところです。ちょっと調べたところ、PowerShellからWSLのコマンドを発行する命令があるらしいです。その名もwslです。これを使って、

@echo off
wsl -u root -- service ssh start

というbatファイルを作ると、Windows環境から、–の後に書いたLinuxの命令がroot権限で出せるようです。batファイルなんて書くのはものすごく久々でした。

Windowsのbatファイルなので、これはWindowsで実行できます。なのでこのbatファイルを、Windowsが起動した直後に実行するよう設定すれば良いです。でもこの方法もかなり試行錯誤しました。結局は、コントロールパネル–>システムとセキュリティ–>管理ツール–>タスクスケジューラに行きついて、ここで「スタートアップ時(システム起動時)に」「ログインしているかどうかにかかわらず実行する」設定で、batファイルを登録すれば良いようでした。

sshdが起動するように設定するには、Linuxならコマンドひとつ、macOSだと「システム環境設定」「共有」で「リモートログイン」をクリックするだけです。Windows (WSL) だと深い階層の幾つもの設定が必要で大変でした。でもこの作業の結果、電源を入れるだけでLinuxのsshdが応答してくれる状態になるので、別のマシンからssh接続すればUbuntuのシェル環境が使えます。Windows環境が用意されただけでなく、いつでも試せるLinux環境も出来上がったので、ちょっと嬉しいです。

Wake On LANを設定

次にWake On LAN (WOL)を設定しました。これに関しては、Windowsは素晴らしい!です。WOLは、ネットワークの他のマシンから、スリープ中や電源切れているコンピュータを目覚めさせる機能です。そのために、相手のMACアドレスを指定して、マジックパケットという謎のパケットを送りつけます。マジックパケットを送るアプリケーションは多数ありますが、Pyhthonで書けばこんなプログラムで可能なようです。

#!/usr/bin/python
import socket
s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.sendto('\xFF'*6+'\x99\xAA\xBB\xCC\xDD\xEE'*16, ('192.168.xxx.255', 7))

最後の行に、目覚めさせたいコンピュータのNICの情報を書きます。\x99\xAA\xBB\xCC\xDD\xEEの部分がMACアドレスで、192.168.xxx.255がIPアドレスです。IPアドレスの最後が255なのは、ブロードキャストするためです。ここを機器のアドレス通りにしても、一応は起動するようです。でも今回のマシンで試したところ、offした後しばらくは起動しますが、時間が経つと失敗します。シャットダウンしてからしばらくすると、スリープモードが深まるのか、自分のIPアドレスがわからなくなるようです。255にしておけば、必ず成功します。

macOSでは、「システム環境設定」「省エネルギー」の「ネットワークアクセスによるスリープ解除」で、Wake On LANを有効にできます。以下は、「省エネルギー」のデフォルト設定ですが、デフォルトで有効になってます。このほかにもBIOSでWOLを有効にしておく設定が必要です。

Windowsの場合は、デバイスマネージャの中のいくつかの設定でWOLを有効にします。ここではWake On Magic Packetが有効であることを確認してますが、このほか「電源の管理」タブも関係があります。一般的にmacOSよりも設定箇所が多い傾向にあると感じますが、デフォルトのままで大丈夫でした。ちなみにネットワークアダプターのドライバを、上記のHPのサイトからダウンロードしないと、WOL関係の設定が現れなかったです。Windowsの標準ドライバーでは、最新に更新してもWOLの設定がありませんでした。このほかBIOSの設定も確認する必要があります。

幾つか試行削除しつつ設定したところ、macOS(前述のZ390マシン)でも、このWindowsでも、どちらもマジックパケットを送ってスリープから目覚めさせることができました。

macOSでは、スリープ状態に対してのみ、WOLが効くようでした。電源を落としてしまうとWOLは効かなくなります。少し検索しただけなのですが、ネットにもやっぱりそう書いてありました。もし、電源も入れられるようなWOL設定の情報ありましたら、教えていただければとても助かります。

一方、Windowsでは、なんと電源を切った状態でもWOLが効きます。電源の落ちたマシンにマジックパケットを送ると電源投入できました。これはちょっと素晴らしいです。

訂正:hackintoshなら電源を切った状態からのWOLが効きます。以下をご覧ください。

Wake On LAN (WOL) を使ってmacOSの電源を入れる

追記:Windows 10のWOL

その後、起動ディスクをM.2 SSD変更しようとして、Windows 10のクリーンインストールを再度行いました。そうしたら電源offでのWOLが効かなくなりました。結局は、再びWOLが動くようにできたのですが、そのポイントをメモしておきます。

WOLはいろいろとややこしいです。シャットダウンしないと、機能しているかどうかを確認できないので、結果がなかなかわからないこともあり、手間がかかります。そこを設定するところが達成感を得られて楽しいところです。

まとめ

暗黒画面問題で頓挫したHP EliteDeskは、結局のところWindowsマシンとして復活しました。ディスプレイは接続せず、macOSからMicrosoft Remote Desktopで使用します。Windowsのデジタルライセンスが効いていたので無償でした。さらにWSL、SSHサーバ、Wake on LANなどを設定しました。このプライベートネットワークには、ルータのVPN機能を使ってL2TP over IPSecでインターネットから入れるようにしてあります。なので

  1. 外出先からVPNで接続する
  2. Pythonプログラムでマジックパケットを送る
  3. 電源が切れているHP EliteDeskが起動する
  4. sshまたはRemote Desktopで接続する

という手順で、世界中どこからでも、このWindowsマシン(Ubuntu付き)をmacOSから利用できるようになりました。今後は、電源が切れている自作Z390 macOSマシンも、外部から起動して使えるように考えたいです。

モバイルバージョンを終了