<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on Boot macOS</title><link>https://bootmacos.rinontech.com/oses/linux/</link><description>Recent content in Linux on Boot macOS</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Sat, 09 Oct 2021 16:53:58 +0900</lastBuildDate><atom:link href="https://bootmacos.rinontech.com/oses/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>HPの小型デスクトップEliteDesk (7: Windows 11を入れる)</title><link>https://bootmacos.rinontech.com/posts/13641/</link><pubDate>Sat, 09 Oct 2021 16:53:58 +0900</pubDate><guid>https://bootmacos.rinontech.com/posts/13641/</guid><description>&lt;img src="https://bootmacos.rinontech.com/uploads/2020/03/hp800g2dm.jpg" alt="Featured image of post HPの小型デスクトップEliteDesk (7: Windows 11を入れる)" /&gt;&lt;p&gt;Montereyがなかなか出ないので、Windows 11で遊びました。10で動いているHP EliteDesk 800 G2 DM (Core i5-6500T) を11にアップデートしました。CPUは11に非対応ですが、インストール用USBメモリを作ったらインストールできました。各種設定は、Windowsに慣れていないこともあっていつもながら大変でした。10から11で変わってさらに面倒になったところもありました。&lt;/p&gt;
&lt;h3 id="windows-11がインストールできない"&gt;Windows 11がインストールできない
&lt;/h3&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/10/windows_logo.png"&gt;&lt;/p&gt;
&lt;p&gt;HP EliteDesk 800 G2 DMは、macOSではiGPUが動作しなくて挫折して、Windows 10を入れていました。それでMacからはRemote DesktopでWindowsを使ったり、WSL機能で動かすUbuntuにsshしたりして使っていました。このマシンをWindows 11にアップデートして、設定をやり直しました。&lt;/p&gt;
&lt;p&gt;このマシンは、普通のアップデートではWindows 11がインストールできません。CPUが非サポートの第6世代なので致し方ないことです。本来ならばサポート対象の第8世代以降のCPUが必要です。でも、USBメモリーにWindows 11のインストーラを作れば可能でした。インストーラ作りは、Windows 10の環境で作業しました。USBメモリは8GBあれば良いようです。&lt;/p&gt;
&lt;p&gt;このUSBメモリで起動すると、Windowsインストーラが動きます。インストーラのメニューには、過去の設定を引き継いでアップデートする選択肢もありましたが、選択できませんでした。クリーンインストールしなければならないようです。これで特に問題なくWindows 11が動くようになりました。&lt;/p&gt;
&lt;p&gt;以前、Windows 10を設定した時の様子を紹介しました。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://bootmacos.rinontech.com/posts/11724/" &gt;HPの小型デスクトップEliteDesk (6: Windowsを入れる)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回もこれに従って、11での各種設定をしていこうと考えました。ただ、色々細かいところが10とは違っていて、少し苦労しました。&lt;/p&gt;
&lt;h3 id="wsl2が動かない"&gt;WSL2が動かない
&lt;/h3&gt;&lt;p&gt;WindowsはmacOSと違って、UNIX的な機能や操作が使えなくて残念です。でもWSL (Windows Subsystem for Linux) を使えばLinux機能が動きます。WSLは、LinuxとWindowsが連携できるように結構頑張って作られています。ただ、ファイルシステムもコマンド体系も違うので、macOSのターミナル操作とGUI操作のような一体感は望めないです。&lt;/p&gt;
&lt;p&gt;今まではWSLを使っていたのですが、Windows 11にしたことで、WSL2に移行することになります。WSL2になって、LinuxとWindowsがより統合されたのかと期待したのですが、どちらかというと溝が深まった印象でした。インストールの手間も少し増えました。&lt;/p&gt;
&lt;p&gt;Windows 10でWSLを有効にしてUbuntuを起動するための準備作業は、かなりシンプルでした。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;「コントロールパネル – プログラム – Windowsの機能の有効化または無効化」から「Linux用Windowsサブシステム」にチェックする&lt;/li&gt;
&lt;li&gt;Microsoft StoreからUbuntu 20.04 LTSをダウンロードして起動する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この2ステップだけでした。今回も同様の作業をしてWSLを起動したところ、以下のように&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;WslRegisterDistribution failed with error: 0x800701bc
????? 0x800701bc WSL 2 ??????? ????? https://aka.ms/wsl2kernel
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;謎の文字化けエラーメッセージが出ます。???の部分は正確では無いです。日本語でエラーを出しているけど、表示に失敗しているようです。読める英語部分の文言で検索したところ、「https://aka.ms/wsl2kernelに行ってカーネルコンポーネントを更新しなさい」というエラーのようです。&lt;a class="link" href="https://docs.microsoft.com/ja-jp/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package" target="_blank" rel="noopener"
 &gt;最新の（WSL2 Linux カーネル更新プログラム）パッケージ&lt;/a&gt;をダウンロードします。後で分かったのですが、StoreにあるUbuntuはWSL用のもので、WSL2では動かないので、WSL2に対応したカーネルパッケージが必要なようです。&lt;/p&gt;
&lt;p&gt;これを解決すると、次には、仮想マシンの機能を有効にしなさいというようなエラーメッセージが出ます。Windowsの機能の有効化または無効化の項目の2つ上に見えているHyper-Vの設定のことのようです。以前は、以下のように無効でも問題なく動いていました。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/12/wsl.png"&gt;&lt;/p&gt;
&lt;p&gt;これを有効にしたところ、WSL2でUbuntuが無事起動しました。これも後で知ったのですが、WSL2からはLinuxがHyper-Vの仮想環境で動作するよう変更になったようです。&lt;/p&gt;
&lt;h3 id="sshサーバが動かない"&gt;SSHサーバが動かない
&lt;/h3&gt;&lt;p&gt;Ubuntuには最初からsshサーバが入っています。通常のUbuntuならば、sshサーバを以下のコマンドで起動することができます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo service ssh start
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;WSLの時はこのコマンドで、他のマシン、例えばMacからWindowsマシンのIPアドレスを指定して、WSLのUbuntuにssh接続できました。WSL2ではこれができませんでした。Ubuntuと、同じコンピュータ上のWindowsからも localhostにはssh接続できますが、WindowsマシンのIPアドレスを指定すると接続できません。&lt;/p&gt;
&lt;p&gt;Ubuntuでifconfigすると、eth0に見慣れないIPアドレスが設定されています。WSLではWindowsのIPアドレスがそのままLinuxに設定されていたのですが、WSL2では仮想のアドレスが割り当てられるようになったそうです。なので、外部のマシンからWindowsのIPアドレスを指定してもWSLのLinux環境に接続できません。&lt;/p&gt;
&lt;p&gt;WSL2になってから、Linuxは仮想環境で動くようになり、Windowsとは別のIPアドレスが割り当てられるようになったのが、原因のようです。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/external/itmedia/l_wi-wsl2net01.png"&gt;&lt;br&gt;
&lt;a class="link" href="https://atmarkit.itmedia.co.jp/ait/articles/1909/09/news020.html" target="_blank" rel="noopener"
 &gt;https://atmarkit.itmedia.co.jp/ait/articles/1909/09/news020.html&lt;/a&gt; より引用&lt;/p&gt;
&lt;p&gt;Linuxカーネルにも仮想環境に対応したパッチが当てられているようです。上記で、Hyper-Vが必須になったり、Ubuntuのカーネルを差し替える必要があったのも、これが理由のようです。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/external/itmedia/wi-wsl2_01.png"&gt;&lt;br&gt;
&lt;a class="link" href="https://atmarkit.itmedia.co.jp/ait/articles/1906/14/news019.html" target="_blank" rel="noopener"
 &gt;https://atmarkit.itmedia.co.jp/ait/articles/1906/14/news019.html&lt;/a&gt; より引用&lt;/p&gt;
&lt;p&gt;素人の見解なので的外れなのかもしれませんが、VMwareとかVirtualBoxなどの仮想化ソフトウェア製品やDockerなんかと代わり映えしない気がしてしまいました。Linux環境がもっとWindowsにガチガチに絡みついて、よりシームレスに一体化して欲しかった気がします。&lt;/p&gt;
&lt;p&gt;話を戻しますと、外部からssh接続できない問題は、WindowsマシンのIPアドレスを指定しても、WSL2のLinux環境に接続できないことでした。WSL2は独立した仮想のネットワークに接続されているからです。さらに厄介なことに、WSL2がLinuxに割り当てるアドレスは、起動するたびに変化するらしいです。&lt;/p&gt;
&lt;p&gt;色々検索したところ、解決策はあるようでした。以下で紹介されていました。Windows側から、Ubuntu側にポートフォワーディングする設定です。これで、sshの22番のアクセスが来たら、Ubuntuのアドレスの22番に送ります。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://qiita.com/yabeenico/items/15532c703974dc40a7f5" target="_blank" rel="noopener"
 &gt;wsl2でsshサーバを起動し、外部からそこに接続 - Qiita&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;まずは、Ubuntu側に、自分のIPアドレスを取得して、Windows側のポートフォワード機能に登録するスクリプトを書きます。ホームディレクトリに適当な名前をつけて保存します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#!/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
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;hostnameコマンドからIPアドレスを取得して変数IPに入れて、それを使ってWindowsのnetshとscコマンドで設定しています。次に、このファイル（例えば /home/bootmacos/port_f22.sh ）を、Windowsから起動するバッチファイルを書きます。ついでにsshdを起動しておく記述も加えておきます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@echo off
WSL -u root -- service ssh start
WSL --exec /home/bootmacos/port_f22.sh
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;そして、Windowsを起動したときに、このバッチファイルが管理者として実行されるように設定します。コントロールパネル–&amp;gt;システムとセキュリティ–&amp;gt;Windowsツール–&amp;gt;タスクスケジューラに行き、ここで「スタートアップ時（システム起動時）に」「ログインしているかどうかにかかわらず実行する」設定で、バッチファイルを登録します。結構ややこしいです。Windows 10では「管理ツール」という名前だったのが11では「Windowsツール」に名前が変わっていたりしました。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/12/setup.png"&gt;&lt;/p&gt;
&lt;p&gt;これにより以下のように処理が行われます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Windowsが起動するとバッチファイルが動く&lt;/li&gt;
&lt;li&gt;バッチの中で、Linuxコマンドでsshdを起動する&lt;/li&gt;
&lt;li&gt;バッチの中で、Linuxのシェルスクリプトを起動する&lt;/li&gt;
&lt;li&gt;シェルスクリプトの中でIPアドレスを取得してWindowsコマンドでポートフォワードを設定する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;となります。WindowsとLinuxを行ったり来たりしてややこしいです。参考にしたサイトでは、全部の作業をWindowsバッチファイルで行う方法も紹介されていましたが、試したところ動作が不安定でした。&lt;/p&gt;
&lt;p&gt;sshdが起動するように設定するには、Linuxならコマンドひとつ、macOSだと「システム環境設定」「共有」で「リモートログイン」をクリックするだけです。sshdの設定は、WSLでも結構面倒だったのですが、WSL2ではさらに大変でした。でもこれで、今まで通り、電源を入れるだけで、ssh経由でUbuntuに接続できるようになりました。&lt;/p&gt;
&lt;h3 id="wake-on-lanが動かない"&gt;Wake On LANが動かない
&lt;/h3&gt;&lt;p&gt;WOLの設定も、いつもながらややこしいです。でもこれは10の時から変更点はありませんでした。&lt;/p&gt;
&lt;p&gt;このマシンには、IntelのI219-LMというネットワークアダプター(NIC)チップが使われています。Windows 11には標準でNICのドライバが入っているのですが、この標準ドライバではWOLが動作しません。IntelやHPのサイトからダウンロードしたドライバならWOL可能です。このことをすっかり忘れて、ネットを検索して試行錯誤してしまいました。最初から、自分の書いた記事をちゃんと読めば良かったです。&lt;/p&gt;
&lt;p&gt;WOLに対応するドライバを探すために、チップセット名などで検索しました。そして以下のIntelのサイトからドライバをダウンロードしました。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.intel.co.jp/content/www/jp/ja/download/18293/intel-network-adapter-driver-for-windows-10.html" target="_blank" rel="noopener"
 &gt;Windows® 10 用インテル®・ネットワーク・アダプター・ドライバー&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Windowsのデバイスマネージャからこのドライバを入れようとすると、「すでに最新ドライバが入ってます」と言われてインストールできませんでした。ダウンロードした一式に入っているインストーラでインストールしました。&lt;/p&gt;
&lt;p&gt;この結果、デバイスマネージャの設定でWOLを有効できるようになります。以下のスクリーンショットでは、Wake On Magic Packetが有効になるように設定しています。このほか「電源の管理」タブでもWOL関連の設定がありますが、多分デフォルトでokです。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/12/wol_win.png"&gt;&lt;/p&gt;
&lt;p&gt;BIOSにもWOLに関係する設定があります。こちらは、既に設定済みなので、今回は作業不要でした。&lt;/p&gt;
&lt;p&gt;以前、Homebridgeを導入したのですが、&lt;/p&gt;
&lt;p&gt;HomebridgeにはWOLによりコンピュータ機器の電源を投入するプラグインがいくつか公開されています。その中から、Homebridge Wolというプラグインを使ってます。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/alexgustafsson/homebridge-wol#readme" target="_blank" rel="noopener"
 &gt;GitHub - AlexGustafsson/homebridge-wol: A Wake on Lan plugin for Homebridge&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これにより、HomeKitからWindowsマシンの電源を投入し、On/Offの状態を確認できました。下はMacのホーム.appの画面です。Siriにお願いしてWindowsの電源を入れることも可能です。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/10/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2021-10-08-18.52.50.png"&gt;&lt;/p&gt;
&lt;h3 id="biosもアップデート"&gt;BIOSもアップデート
&lt;/h3&gt;&lt;p&gt;ついでにBIOSもアップデートしておきました。HP EliteDesk 800 G2 DMのBIOS画面に、ネットワークから最新BIOSをダウンロードして更新するメニューがあります。クリックするだけで最新版 (2021/4/16版のN21 02.53) になりました。&lt;/p&gt;
&lt;h3 id="まとめ"&gt;まとめ
&lt;/h3&gt;&lt;p&gt;暗黒画面問題で頓挫したHP EliteDeskは、とうとうWindows 11マシンになりました。10より画面が洗練されて、良くなった気がします。引き続き、このマシンにはディスプレイを接続せず、macOSからMicrosoft Remote Desktopとssh経由で使用する予定です。&lt;/p&gt;</description></item><item><title>「Hey Siri, マックをつけて」で電源を投入する</title><link>https://bootmacos.rinontech.com/posts/12217/</link><pubDate>Wed, 13 Jan 2021 23:55:08 +0900</pubDate><guid>https://bootmacos.rinontech.com/posts/12217/</guid><description>&lt;img src="https://bootmacos.rinontech.com/uploads/2020/12/black512.jpg" alt="Featured image of post 「Hey Siri, マックをつけて」で電源を投入する" /&gt;&lt;p&gt;&lt;a class="link" href="https://bootmacos.rinontech.com/posts/12223/" &gt;電源をoffにしたhackintoshをWake On LANの機能によって起動する記事&lt;/a&gt;を少し前に書きました。今回は、WOL機能をSiriから呼び出して「Hey Siri, マックをつけて」で電源投入できるようにしました。hackintoshに限らず大抵のコンピュータ（ただし本物のMacは除く）に使える手法です。&lt;/p&gt;
&lt;h3 id="siriでショートカット呼び出し"&gt;Siriでショートカット呼び出し
&lt;/h3&gt;&lt;p&gt;Apple製品に搭載されたSiriは、HomeKit対応デバイス（アクセサリ）に直接接続して、色々なコントロールをしてくれます。HomeKit対応デバイスには、照明器具とか学習リモコンとかデロンギのヒーターなどがあります。なのでWOLのマジックパケットを送出するコンピュータを、HomeKit対応サーバとして設定すれば、これをSiriから操作することも可能です。でも今回はこれはやりません。&lt;/p&gt;
&lt;p&gt;HomePodとWatchは特定のiPhoneと紐付けられているので、SiriはそのiPhoneに登録したショートカットも実行できます。ショートカットとは、一連の操作を記録したiOS版バッチファイルのようなものです。macOSだとApple ScriptやAutomator.appのような存在です。なのでショートカットからWOLできるように設定すれば、これをSiriから起動することが可能です。今回は、iPhoneショートカットを利用する方法で、SiriからWOLします。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Siri (HomePod mini) --&amp;gt; iPhone short-cut --&amp;gt; WOL起動
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;iOS用にWOLを行ってくれる無料アプリに&lt;a class="link" href="https://apps.apple.com/jp/app/remoteboot-wol/id310369182" target="_blank" rel="noopener"
 &gt;RemoteBoot WOL&lt;/a&gt;があります。これもショートカットに対応しているので、RemoteBoot WOLを起動してWOLを実行するショートカットを作れます。これで設定しておけば、iPhoneのSiriならば音声でお願いしてWOLを起動させることが可能です。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Siri --&amp;gt; iPhone short-cut --&amp;gt; RemoteBoot WOL --&amp;gt; WOL
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ただとても残念なことに、HomePod miniのSiriからこのショートカットを起動すると「コンパニオンデバイスで続きの操作を行う必要があります」と言われてしまい、この後iPhoneでの画面操作が必要になります。結局はiPhoneを使用することになるので、HomePodを使う意味がありません。そこで、「コンパニオンデバイス (iPhone) で続きの操作を行う必要」の無いショートカット作りを目指します。&lt;/p&gt;
&lt;h3 id="全体の流れ"&gt;全体の流れ
&lt;/h3&gt;&lt;p&gt;RemoteBoot WOLを利用したショートカットでは、その後のiPhone操作が必要になりました。もっと単純なショートカット、例えば単に特定のURLにアクセスするだけのショートカットならば、iPhoneでの操作は不要なのではと考えました。以下に示すように、実際にiPhone画面操作不要のショートカットが作れました。&lt;/p&gt;
&lt;p&gt;そこでURLアクセスされるとWOLのマジックパケットを送出するNode.jsサーバを作ることにします。全体の流れは、Siriに「Hey Siri, マックをつけて」と音声でお願いすると、iPhoneのショートカットが起動して、Node.jsが動くサーバが反応し、WOLを発動させます。以下に順番を示します。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Siri --&amp;gt; iPhone short-cut --&amp;gt; Node.js --&amp;gt; WOL
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;なので以下のものが必要です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Siriを動かすHomePod、Apple Watch、iPhoneなど&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ショートカットを実行するiPhone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Node.jsが常時動いているサーバ (Raspberry Piなど)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WOLで起動するコンピュータ (hackintoshなど)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;と4.が必要なのは当然ですね。HomePodを使う上でiPhoneは必須なので2.はあるはずです。HomePodはiPhoneの機能を呼び出す端末のような存在なので、動作中にもiPhoneが必要です。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;3.に関して、今回はたまたまNode.jsを使いますが、他にも実現方法はたくさんあります。いずれにしてもSiriからの命令を受け付けるために待機するサーバが必要です。実際には、macOSマシンでも、Windowsでも、Linuxマシンでも良いです。Intel CPU搭載のQNAPのNASもNode.jsが提供されているので、それでも良いです。今回は、安価・省電力に実現するためにRaspberry Piを使いました。将来色々と活用したいところですが、今の所WOLのためだけのサーバなので、できる限り簡単なものにしたかったです。インストールしたLinux (Raspbian) もCUIだけです。&lt;/p&gt;
&lt;h3 id="nodejsを使う"&gt;Node.jsを使う
&lt;/h3&gt;&lt;h4 id="nodejsをインストールする"&gt;Node.jsをインストールする
&lt;/h4&gt;&lt;p&gt;WebアクセスするとWOLのためのマジックパケットを送出するサーバをNode.jsを使って作ります。そのためにまずはNode.jsをインストールします。macOSならばHomebrewでインストールできます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ brew install nodejs
Updating Homebrew...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Raspberry PiやWindowsのWSLなどのLinux環境ならaptを使います。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ sudo apt install nodejs
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="nodejsでhello-world"&gt;Node.jsでHello World!
&lt;/h4&gt;&lt;p&gt;Node.jsをインストールするとnodeコマンドが使えるようになります。Node.jsはサーバーサイドでのJavaScript実行環境です。って言われてもなんのことかピンと来なかったのですが、乱暴に言ってしまうと普通のプログラミングに使えるJava Scriptインタプリターです。pythonコマンドとかrubyコマンドと同じようにnodeコマンドでJava Scriptファイルを実行できます。例えば、hello.jsというテキストファイルに&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;console.log(&amp;#34;Hello World!&amp;#34;);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;という1行のJavaScriptプログラムが書かれていた時、シェル環境からnodeコマンドを使うと&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;% node hello.js 
Hello World!
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;のように実行できます。nodeコマンドのパスを1行目に書いて、&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#!/usr/local/bin/node
console.log(&amp;#34;Hello World!&amp;#34;);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;のような内容のテキストファイルを作って、実行パーミッションを与えておけば、shellスクリプトファイルとして実行することもできます。&lt;/p&gt;
&lt;p&gt;通常、Java Scriptはクライアント側のwebブラウザで実行するので、ファイルアクセスやハードウェアアクセスに制限があります。サーバ機能も書けません。一方で、nodeコマンドで実行すると、制限無しで普通のプログラミングができます。サーバーサイドの実行環境と言われる所以です。&lt;/p&gt;
&lt;h4 id="nodejsでwol"&gt;Node.jsでWOL
&lt;/h4&gt;&lt;p&gt;Node.jsでは色々なパッケージをnpmコマンドでインストールしたり、削除したり、管理します。Wake on LANをサポートしてくれるパッケージもあります。その名もwake_on_lanです。これをインストールするには、&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ npm install wake_on_lan
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;とします。npmが無いと言われたら、homebrewやaptなどで&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ sudo apt install npm
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;というようにしてインストールします。これでWOLに関する機能が使えるようになります。WOLさせたいコンピュータのMACアドレスが例えば11:22:33:44:55:66の場合、&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;var wol = require(&amp;#39;wake_on_lan&amp;#39;);
wol.wake(&amp;#39;11:22:33:44:55:66&amp;#39;);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;というプログラムでWOLを機能させることができます。&lt;/p&gt;
&lt;h4 id="nodejsでサーバーアプリ"&gt;Node.jsでサーバーアプリ
&lt;/h4&gt;&lt;p&gt;nodeコマンドは、webサーバー側でJava Scriptを動かすコマンドですので、webサーバの機能もあります。そもそもNode.jsが作られた目的がサーバ機能だったようです。例えば、以下のようなJava Scriptプログラムを用意して、nodeコマンドで動かしておきます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;var http = require(&amp;#39;http&amp;#39;);
var server = http.createServer(function(req,res){
 res.write(&amp;#34;Hello world!\n&amp;#34;);
 res.end();
});

server.listen(8080);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;このプログラムを起動しておいて、このコンピュータのアドレスのポート8080番にhttpアクセスすると（例えばhttp://192.168.xxx.xxx:8080にアクセスすると）、Hello world!の文字列を返します。curlコマンドでアクセスするとこんな結果になります。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ curl http://192.168.xxx.xxx:8080
Hello world!
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;SafariでこのURLにアクセスすると以下のような表示になります。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/01/nodeweb.png"&gt;&lt;/p&gt;
&lt;p&gt;このようにプログラミングすれば、特定のURLに対して、決められた処理を実行するプログラムが簡単に書けます。&lt;/p&gt;
&lt;h4 id="urlアクセスでwol"&gt;URLアクセスでWOL
&lt;/h4&gt;&lt;p&gt;上で紹介したWOLのサンプルと、サーバアプリのサンプルを組み合わせると、特定のURLにアクセスした時にWOLするプログラムが書けます。例えば、&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;var http = require(&amp;#39;http&amp;#39;);
var wol = require(&amp;#39;wake_on_lan&amp;#39;);
var server = http.createServer(function(req,res){
	wol.wake(&amp;#39;11:22:33:44:55:66&amp;#39;);
	res.write(&amp;#34;Wake on LAN.\n&amp;#34;);
 res.end();
});

server.listen(8080);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;というプログラムを起動しておきます。すると、他のコンピュータからこのコンピュータのアドレス、http://192.168.xxx.xxx:8080にアクセスすることで、WOLを発動させることができます。このときWOLが動いたことがわかるようにWake on LAN.と返答するようにしておきました。&lt;/p&gt;
&lt;p&gt;Raspberry Piに固定IPアドレスを設定して、このプログラムを実行しておけば、Raspberry PiがWOLを発動するサーバになります。サーバとして動かしたい場合は、Raspberry Piからログオフしても動いていて欲しいので、&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ node hello_server.js &amp;amp;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;というように最後に&amp;amp;をつけて実行します。これを終了するときはps -xコマンドでPIDを調べてkillします。動作が確認できたら、Raspberry Piの起動時に自動的に実行されるよう設定すると良いでしょう。ちなみに、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/etc/rc.localに書き込む&lt;/li&gt;
&lt;li&gt;crontab -eの@reboot行に書く&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;などの方法があります。&lt;/p&gt;
&lt;h3 id="iphoneショートカットでwolする"&gt;iPhoneショートカットでWOLする
&lt;/h3&gt;&lt;p&gt;次に、上で作ったNode.js WebサーバにiPhoneからアクセスするショートカットを作ります。iOSにはショートカットというアプリが標準で入ってます。こんなアイコンのアプリです。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/01/shortcuticon.png"&gt;&lt;/p&gt;
&lt;p&gt;ショートカットは、macOSだとAutomator.appに相当するソフトで、iOS操作やプログラム実行を自動化するショートカットを作成します。ここでは、上で作ったWOLサーバにアクセスするショートカットを作り、それに「マックをつけて」という名前を付けます。ショートカット作成後に「ホーム画面に追加」という設定を行うと、iPhoneの画面にショートカットアイコンが現れます。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/01/shortcut_icons.jpg"&gt;&lt;/p&gt;
&lt;p&gt;最初に、ショートカットアプリの中で、「すべてのショートカット」を閲覧すると、右上に+のボタンが現れます。これを押すと新規ショートカットが作れます。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/01/shortcut1.jpg"&gt;&lt;/p&gt;
&lt;p&gt;ここでは、URLを指定して、それを開くという2個のアクションを追加します。まずは最初のアクションを追加します。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/01/shortcut2.jpg"&gt;&lt;/p&gt;
&lt;p&gt;アクションの候補が出てくるので、検索窓にurlと打ち込んで、URL関連のアクションを検索します。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/01/shortcut_url2.jpg"&gt;&lt;/p&gt;
&lt;p&gt;すると、「URL」というアクションがあるので選びます。URLを指定するアクションです。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/01/shortcut4.jpg"&gt;&lt;/p&gt;
&lt;p&gt;ここで、WOLサーバのアドレスと、ポート番号を示すURLを指定しておきます。さらにその下の+ボタンを押して、次のアクションを追加します。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/01/shortcut_url2.jpg"&gt;&lt;/p&gt;
&lt;p&gt;ここでは、「URLを開く」もしくは「URLの内容を取得」あたりのアクションが使えそうです。URLを開くは、実際にはSafariが起動します。これを試したところ、iPhoneでの操作が必要で、Siriには「コンパニオンデバイスで続きの操作を行う必要があります」と言われてしまいました。RemoteBoot WOLの場合と同じで、これでは元の木阿弥です。&lt;/p&gt;
&lt;p&gt;一方で、「URLの内容を取得」アクションの方は、最初の起動で確認を求められるものの、以降はiPhoneの操作なしで実行できました。なので、こちらを選びます。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/01/shortcut5.jpg"&gt;&lt;/p&gt;
&lt;p&gt;これで完成です。URLを指定して、その内容を取得する手順となりました。URLの内容には意味がなくて、アクセスさえしてくれれば良いのです。この後、名前をつけて保存します。この名前は、Siriに依頼する時の名前になります。「マックをつけて」にしました。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/01/shortcut6.jpg"&gt;&lt;/p&gt;
&lt;p&gt;これで「マックをつけて」ショートカットが完成します。最初に起動すると、先に述べたように、アクセスの設定を求められます。ここでOKを押しておけば、以降は何もしなくても実行してくれるようになります。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/01/shortcut_as.jpg"&gt;&lt;/p&gt;
&lt;h3 id="hey-siri-マックをつけて"&gt;Hey Siri, マックをつけて
&lt;/h3&gt;&lt;p&gt;これで、HomePod miniに「Hey Siri, マックをつけて」と話しかけてみます。iPhoneのショートカットが反応し、WOLサーバが応答し、hackintoshが起動するはずです。本物のMacだと電源遮断の状態からのWOLは出来ないらしいので、これはhackintoshならではの機能です。&lt;/p&gt;
&lt;p&gt;iPhoneショートカットを呼び出す機能は、iPhoneと連携して動くHomePodとWatchのSiriでのみ可能です。macOSのSiriにお願いするとこんな返事が返ってきます。もしかしたらハンバーガー屋さんの方を探そうとしてくれているのかもしれません。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2021/01/sirifrommacos.jpg"&gt;&lt;/p&gt;
&lt;h3 id="まとめ"&gt;まとめ
&lt;/h3&gt;&lt;p&gt;HomePod miniに話しかけてhackintoshの電源を投入できるようになりました。そのために、Raspberry PiにNode.jsをインストールして、WOLを発動するサーバとし、これにアクセスするショートカットをiPhone上に作成しました。Siriからプログラムを起動させたい場合、以前はHomeKit互換のデバイスとして構築する必要がありました。今はショートカットが使えるので、楽になりました。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/external/aliexpress/H9e6597c49d1349d5b84218c76ab984a3J.jpg"&gt;&lt;/p&gt;</description></item><item><title>HPの小型デスクトップEliteDesk (6: Windowsを入れる)</title><link>https://bootmacos.rinontech.com/posts/11724/</link><pubDate>Sun, 06 Dec 2020 00:53:46 +0900</pubDate><guid>https://bootmacos.rinontech.com/posts/11724/</guid><description>&lt;img src="https://bootmacos.rinontech.com/uploads/2020/03/hp800g2dm.jpg" alt="Featured image of post HPの小型デスクトップEliteDesk (6: Windowsを入れる)" /&gt;&lt;p&gt;いろいろ頑張ってきたHP EliteDesk 800 G2 DM (Core i5-6500T)ですが、Windowsをインストールしました。Hackintoshとしては&lt;strong&gt;完敗です&lt;/strong&gt;。macOSからはWindowsを画面共有で使います。sshでUbuntuも使います。電源が切れてても使えるようにWake On LANの設定もしました。&lt;/p&gt;
&lt;h3 id="microsoft-remote-desktop"&gt;Microsoft Remote Desktop
&lt;/h3&gt;&lt;p&gt;最近はWindowsが絶対必要という場面が少なくなりましたが、世の中がWindows前提なので、たまにWindowsを使わざるを得ない時があります。Hackintoshなら、マルチブートにしておけば、同じマシンでWindowsが使えますが、切り替えが面倒です。&lt;a class="link" href="https://bootmacos.rinontech.com/posts/11822/" &gt;VMware Fusion Player 12 が個人利用で無償になって、かなり快適でした。&lt;/a&gt;なので仮想環境でWindowsを使う手もあります。マルチブートに比べて性能は出ませんが、macOSとの切り替えが簡単です。今回は第3の選択肢として、Windowsマシンを別に用意して、これにリモートデスクトップする方法を試します。&lt;/p&gt;
&lt;p&gt;そこで、macOSをインストールしようとして暗黒画面問題で挫折したHP EliteDesk 800 G2 DM&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://bootmacos.rinontech.com/posts/8583/" &gt;HPの小型デスクトップEliteDesk (4: 暗黒画面問題で頓挫)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;にWindowsを入れて、ディスプレイ無しのリモートデスクトップサーバにします。macOSは諦めて、ただのWindowsマシンに戻すのですから、BootmacOSの路線からしたらダメダメな状況です。すみません。でもWindowsマシンが用意できれば、これにmacOS用のMicrosoft Remote Desktopで接続することでWindowsが使えます。Remote Desktopクライアントプログラムは、無償で配布されていて、使いやすいです。応答も素早いので、仮想マシンより快適な気がしました。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/11/remotedesktopIcon.png"&gt;&lt;/p&gt;
&lt;p&gt;Remote Desktopを起動すると、接続先を選べるようになります。接続先のマシンを何個も登録できるインタフェースでした。職場の何台ものWindowsマシンを管理するような状況を想定しているのかもしれません。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/11/mrd4.png"&gt;&lt;/p&gt;
&lt;p&gt;HP EliteDesk 800 G2 DMは小型なのでiGPUで動きます。M1が話題になって貧弱さが際立っているインテルiGPUなので、このままディスプレイには接続しないで、ヘッドレスのリモートデスクトップサーバとして使おうと考えてます。小さなマシンなので、邪魔にならないです。&lt;/p&gt;
&lt;h3 id="windowsをインストール"&gt;Windowsをインストール
&lt;/h3&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/12/winlogo.png"&gt;&lt;/p&gt;
&lt;p&gt;まずはHP EliteDesk 800 G2 DMにWindowsをクリーンインストールします。macOSマシンにされていたところが、本来の姿に戻ることになります。でも元からあったWindowsは綺麗に全消去されているので、起動できるUSBメモリインストーラを作ります。そこで、Z390 + 9900K + OpenCore 0.6.3 + Big Sur の構成のマシン（機種IDはiMac19,1）で以下の作業をしました。Windowsインストール用のISOイメージファイルがダウンロードできるMicrosoftのサイトに行きました。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.microsoft.com/ja-jp/software-download/windows10ISO" target="_blank" rel="noopener"
 &gt;Windows 10 のディスク イメージ (ISO ファイル) のダウンロード&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;とりあえずダウンロードしてみたところ、Windowsのイメージファイルは6GBほどでした。12GB超えてるBig Surに比べて優しいですね。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/11/iso.png"&gt;&lt;/p&gt;
&lt;p&gt;これから頑張れば、インストール用USBメモリをmacOS環境でも作れないことはないです。でも結構難しい作業で、適当に試しても失敗ばかりでした。USBメモリをFAT32でフォーマットするのですが、コピーしなければならないファイルの一つが、FAT32の限界の2GBを超えているところがネックです。それを乗り越える技が複雑過ぎました。&lt;/p&gt;
&lt;p&gt;結局、macOSで頑張るのは諦めて、Windowsでインストール用USBを作ることにしました。このマシンの、Big Surとは別のSSDにWindows 10が入っています。OpenCoreでWindows起動SSDを選択して起動し、上記のMicrosoftのサイトに接続しました。すると、ISOイメージファイル以外に、起動可能なUSBインストーラを作成するアプリケーション「Media Creation Tool」がダウンロードできるようになってます！。macOSからこのページを開いても、Media Creation Toolの選択肢は見えませんでした。Media Creation Toolは、macOSのcreateinstallmediaコマンドとよく似た名前で、同じような機能のプログラムです。ですが、Windows版の方が完成度高いです。CUIコマンドのmacOS版と違って、GUIで起動して、ISOイメージを自動でダウンロードして、そのままUSBメモリに書き込んでくれます。とても楽でした。&lt;/p&gt;
&lt;h3 id="biosもアップデート"&gt;BIOSもアップデート
&lt;/h3&gt;&lt;p&gt;ついでにBIOSもアップデートしておきました。HP EliteDesk 800 G2 DMのBIOS画面に、ネットワークからダウンロードして更新するメニューがあります。クリックするだけで最新版 (2020/11/6版の02.51 Rev.A) になりました。以下はHPのサイトですが、ここからダウンロードする必要はありませんでした。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://support.hp.com/jp-ja/drivers/selfservice/hp-elitedesk-800-35w-g2-desktop-mini-pc/7633266" target="_blank" rel="noopener"
 &gt;HP EliteDesk 800 35W G2 Mini PC ソフトウェア及びドライバーのダウンロード | HP&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="デジタルライセンス"&gt;デジタルライセンス
&lt;/h3&gt;&lt;p&gt;HP EliteDesk 800 G2 DMの筐体のどこを見てもWindowsのプロダクトキーが書いてありません。Windowsを買わないとダメなのか、全消去するんじゃなかったと少し後悔しました。ところが今やデジタルライセンスの時代だったんですね。このマシンの情報がすでにどこかのサーバに登録されているらしく、Windowsインストール作業最初のプロダクトキー入力をスキップしても、自動的に認証されてました。SSDもメモリもCPUも交換してしまっているので、BIOSのシリアル番号のようなもので個体識別しているようです。メーカー製PCにはWindows代が含まれているので当然の結果かもしれませんが、予想外でありがたかったです。ハードにOS代が含まれていることは、よく考えたらmacOSも同じです。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/11/digital.png"&gt;&lt;/p&gt;
&lt;p&gt;HP EliteDesk 800 G2 DMの中古価格は、Core i3モデルが1.5万円くらい、i5モデルでも2万円くらいです。一方で、マルチブートしたり、仮想環境を使ってWindows 10 Proを起動する場合には、パーツに紐付けたDSP版でも1.7万円くらい、通常版なら2万円以上のライセンス代が必要になります。そう考えると、デジタルライセンスが付いた上にCPUもメモリも手に入る中古のハードを買うのは、お得な手段なのではと思いました。&lt;/p&gt;
&lt;h3 id="リモートデスクトップサーバを有効化"&gt;リモートデスクトップサーバを有効化
&lt;/h3&gt;&lt;p&gt;インストールしたWindows 10で最初に行った作業は、リモートデスクトップサーバをonにすることです。これでmacOSから作業ができます。設定する場所が「設定」だったり「コントロールパネル」だったり混乱します。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/12/r1.png"&gt;&lt;/p&gt;
&lt;h3 id="wslを入れる"&gt;WSLを入れる
&lt;/h3&gt;&lt;p&gt;次に行った作業は、WSL (Windows Subsystem for Linux) を有効にすることです。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/12/wsl.png"&gt;&lt;/p&gt;
&lt;p&gt;そして、Microsoft StoreからUbuntu 20.04 LTSをダウンロードしてインストールしました。WSLがあってLinuxが使えることは、macOSユーザから見てちょっと羨ましいです。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/12/ubuntulogo.png"&gt;&lt;/p&gt;
&lt;p&gt;とはいえ、WindowsとLinuxではディレクトリ構成が違います。ディレクトリ階層の区切りも¥と／で違います。ファイルやフォルダをUbuntuのウィンドウにドラッグ&amp;amp;ドロップしても、Linuxが理解できるディレクトリ文字列になりません。macOSファインダとターミナルのような円滑な操作性ではなく、ぎくしゃくしている印象です。Windows上の仮想環境でLinuxを動かしているので仕方ないですが、もう少し統合してほしいと思いました。ネイティブに動いているmacOSのUNIX環境が、シームレスで使いやすいことを改めて実感しました。&lt;/p&gt;
&lt;h3 id="dropboxを入れる"&gt;Dropboxを入れる
&lt;/h3&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/12/onedrive.png"&gt;&lt;/p&gt;
&lt;p&gt;One Driveの方がWindowsとの相性が良いのでしょうが、Dropboxを使ってます。One Driveは、昔試したことがありますが、macOSとの相性が悪かったです。One Driveでは、Windowsの規則で、ファイル名に使えない文字があります。例えば、CON, PRN, AUXという名前はファイル名・フォルダ名に使えません。また、” * : &amp;lt; &amp;gt; ? / \ |などの文字も使えません。Dropboxにはそのような制約はありません。自分で作るファイルなら命名に気をつければ良いのですが、例えばアプリケーションのパッケージの中に、たまたまこのような名前のファイル・フォルダがあると厄介です。これらがOne Driveにコピーする際に除外され、アプリケーションの内容が変わってしまいます。実際にそのような事例が発生しました。現在のOne Driveも同様な命名規則を引き継いでいるのかどうかわかりませんが、こういう理由で使用を避けてました。&lt;/p&gt;
&lt;h3 id="sshサーバを入れる"&gt;SSHサーバを入れる
&lt;/h3&gt;&lt;p&gt;昔のWindowsでsshを使うのは面倒だった記憶がありました。でもWindows 10ではsshクライアントが標準で入っているようです。PowerShellから使えました。でもsshサーバ (sshd) はOpenSSHを自力でインストールする必要があります。&lt;/p&gt;
&lt;p&gt;一方で、WSLのUbuntuには、あって当然なのですが、sshのクライアントとサーバが入っています。Ubuntuのsshサーバは、以下のコマンドで起動することができます。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo service ssh start
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ということで、sshdを使うには、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windowsのsshdを使う&lt;/li&gt;
&lt;li&gt;Linux (WSL-Ubuntu)のsshdを使う&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;の2種類の選択肢があります。ここはすでにインストール済みのLinuxにしました。Windowsルートは手順が大変そうでしたが、Linuxルートにも罠がありました。普通のLinuxなら&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo systemctl enable sshd.service
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;というような類のコマンドで、起動時に自動的にsshdが起動するように設定できました。でもWSLでは技術的な事情でsystemctlコマンドが動かないようです。なので、コンピュータを起動するたびごとに、&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo service ssh start
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;のコマンドを発行する必要があります。これは自動化したいところです。ちょっと調べたところ、PowerShellからWSLのコマンドを発行する命令があるらしいです。その名もwslです。これを使って、&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@echo off
wsl -u root -- service ssh start
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;というbatファイルを作ると、Windows環境から、–の後に書いたLinuxの命令がroot権限で出せるようです。batファイルなんて書くのはものすごく久々でした。&lt;/p&gt;
&lt;p&gt;Windowsのbatファイルなので、これはWindowsで実行できます。なのでこのbatファイルを、Windowsが起動した直後に実行するよう設定すれば良いです。でもこの方法もかなり試行錯誤しました。結局は、コントロールパネル–&amp;gt;システムとセキュリティ–&amp;gt;管理ツール–&amp;gt;タスクスケジューラに行きついて、ここで「スタートアップ時（システム起動時）に」「ログインしているかどうかにかかわらず実行する」設定で、batファイルを登録すれば良いようでした。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/12/setup.png"&gt;&lt;/p&gt;
&lt;p&gt;sshdが起動するように設定するには、Linuxならコマンドひとつ、macOSだと「システム環境設定」「共有」で「リモートログイン」をクリックするだけです。Windows (WSL) だと深い階層の幾つもの設定が必要で大変でした。でもこの作業の結果、電源を入れるだけでLinuxのsshdが応答してくれる状態になるので、別のマシンからssh接続すればUbuntuのシェル環境が使えます。Windows環境が用意されただけでなく、いつでも試せるLinux環境も出来上がったので、ちょっと嬉しいです。&lt;/p&gt;
&lt;h3 id="wake-on-lanを設定"&gt;Wake On LANを設定
&lt;/h3&gt;&lt;p&gt;次にWake On LAN (WOL)を設定しました。これに関しては、Windowsは素晴らしい！です。WOLは、ネットワークの他のマシンから、スリープ中や電源切れているコンピュータを目覚めさせる機能です。そのために、相手のMACアドレスを指定して、マジックパケットという謎のパケットを送りつけます。マジックパケットを送るアプリケーションは多数ありますが、Pythonで書けばこんなプログラムで可能なようです。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#!/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(&amp;#39;\xFF&amp;#39;*6+&amp;#39;\x99\xAA\xBB\xCC\xDD\xEE&amp;#39;*16, (&amp;#39;192.168.xxx.255&amp;#39;, 7))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最後の行に、目覚めさせたいコンピュータのNICの情報を書きます。\x99\xAA\xBB\xCC\xDD\xEEの部分がMACアドレスで、192.168.xxx.255がIPアドレスです。IPアドレスの最後が255なのは、ブロードキャストするためです。ここを機器のアドレス通りにしても、一応は起動するようです。でも今回のマシンで試したところ、offした後しばらくは起動しますが、時間が経つと失敗します。シャットダウンしてからしばらくすると、スリープモードが深まるのか、自分のIPアドレスがわからなくなるようです。255にしておけば、必ず成功します。&lt;/p&gt;
&lt;p&gt;macOSでは、「システム環境設定」「省エネルギー」の「ネットワークアクセスによるスリープ解除」で、Wake On LANを有効にできます。以下は、「省エネルギー」のデフォルト設定ですが、デフォルトで有効になってます。このほかにもBIOSでWOLを有効にしておく設定が必要です。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/12/wol.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Windowsの場合は、デバイスマネージャの中のいくつかの設定でWOLを有効にします。ここではWake On Magic Packetが有効であることを確認してますが、このほか「電源の管理」タブも関係があります。一般的にmacOSよりも設定箇所が多い傾向にあると感じますが、デフォルトのままで大丈夫でした。ちなみにネットワークアダプターのドライバを、上記のHPのサイトからダウンロードしないと、WOL関係の設定が現れなかったです。Windowsの標準ドライバーでは、最新に更新してもWOLの設定がありませんでした。このほかBIOSの設定も確認する必要があります。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://bootmacos.rinontech.com/uploads/2020/12/wol_win.png"&gt;&lt;/p&gt;
&lt;p&gt;幾つか試行錯誤しつつ設定したところ、macOS（前述のZ390マシン）でも、このWindowsでも、どちらもマジックパケットを送ってスリープから目覚めさせることができました。&lt;/p&gt;
&lt;p&gt;macOSでは、スリープ状態に対してのみ、WOLが効くようでした。電源を落としてしまうとWOLは効かなくなります。少し検索しただけなのですが、ネットにもやっぱりそう書いてありました。もし、電源も入れられるようなWOL設定の情報ありましたら、教えていただければとても助かります。&lt;/p&gt;
&lt;p&gt;一方、Windowsでは、なんと&lt;strong&gt;電源を切った状態でもWOLが効きます&lt;/strong&gt;。電源の落ちたマシンにマジックパケットを送ると電源投入できました。これはちょっと素晴らしいです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;訂正&lt;/strong&gt;：hackintoshなら電源を切った状態からのWOLが効きます。以下をご覧ください。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;a class="link" href="https://bootmacos.rinontech.com/posts/12223/" &gt;Wake On LAN (WOL) を使ってmacOSの電源を入れる&lt;/a&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="追記windows-10のwol"&gt;追記：Windows 10のWOL
&lt;/h3&gt;&lt;p&gt;その後、起動ディスクをM.2 SSDに変更しようとして、Windows 10のクリーンインストールを再度行いました。そうしたら電源offでのWOLが効かなくなりました。結局は、再びWOLが動くようにできたのですが、そのポイントをメモしておきます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LANのドライバーは最新にします。Windowsに最初に入っている、または更新からダウンロードできるIntel LANドライバーにはWOLの設定項目がありません。HPのサイトからダウンロードするとWOLの設定があります。これがないとsleepからのWOLもできないです。&lt;/li&gt;
&lt;li&gt;「高速スタートアップ」をoffにします。これがOnだとシャットダウンからのWOLができなかったです。&lt;/li&gt;
&lt;li&gt;スリープ中やシャットダウン時に、LANコネクタのLEDが点灯していることが重要です。これが消灯している状態だと如何なるパケットも受け付けないようで、WOLもしません。&lt;/li&gt;
&lt;li&gt;BIOSでシャットダウン時にS5に移行するよう設定すると、WOLしません。Off状態ではLANコネクタのLEDも点灯しません。デフォルトはS5ではないので、注意すべき点ではないですが。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;WOLはいろいろとややこしいです。シャットダウンしないと、機能しているかどうかを確認できないので、結果がなかなかわからないこともあり、手間がかかります。そこを設定するところが達成感を得られて楽しいところです。&lt;/p&gt;
&lt;h3 id="まとめ"&gt;まとめ
&lt;/h3&gt;&lt;p&gt;暗黒画面問題で頓挫したHP EliteDeskは、結局のところWindowsマシンとして復活しました。ディスプレイは接続せず、macOSからMicrosoft Remote Desktopで使用します。Windowsのデジタルライセンスが効いていたので無償でした。さらにWSL、SSHサーバ、Wake on LANなどを設定しました。このプライベートネットワークには、ルータのVPN機能を使ってL2TP over IPSecでインターネットから入れるようにしてあります。なので&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;外出先からVPNで接続する&lt;/li&gt;
&lt;li&gt;Pythonプログラムでマジックパケットを送る&lt;/li&gt;
&lt;li&gt;電源が切れているHP EliteDeskが起動する&lt;/li&gt;
&lt;li&gt;sshまたはRemote Desktopで接続する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という手順で、世界中どこからでも、このWindowsマシン（Ubuntu付き）をmacOSから利用できるようになりました。今後は、電源が切れている自作Z390 macOSマシンも、外部から起動して使えるように考えたいです。&lt;/p&gt;</description></item></channel></rss>