🦔

Proxmox VEにmacOS(BigSur)のインストールとmacVMの初期設定

2021/05/05に公開約31,300字2件のコメント

概要

せっかく仮想環境を用意したら色んなOS使いたいよねと思って、macOSをproxmox VE(以下pve)環境に乗せるまでの手順と、日本環境に合わせたmacの初期設定までを書いた。
意外と日本語で書かれている構築手順のブログが見当たらなかったのでそのまとめ。
あと日本語環境に合わせるまでがちょっと苦労したので、そのあたりも書いてある。

今回インストールするmacOSはBigSurだけど、Catalinaとか前のバージョンでも同じ手順でいける。

環境

Proxmox VE : 6.3
インストールするmacOS : BigSur
ブートローダー : OpenCore

前提

1. macOSのisoの用意方法

macOSのisoを用意する方法は2つある。
・手元のmacOSでisoを作成する。
・手元のUbuntuでisoを作成する。

今回はUbuntuでisoを作成した。macOSでisoを作成するのとUbuntuで作成するのは難易度はあまり変わらないと思う。
今さら思ったけど、日本語版macOSでisoを作成すればmacOSのインストーラーの中身日本語だったのかな...

2. OSK認証キーの出力

pveでmacOSを動かすためにはmacOSでOSK認証キーというのを出力する必要がある(やったことはないけど、vSphereやHackintoshはOSK認証キーはなくても良さそう)。
このOSK認証キーはmac純正ハード以外で動かす時に、そもそも純正mac持ってるよね?的な意味合いと解釈した(違うかも)。
じゃあ手元にmacOSがない人はどうすればいいかというと、思いつくのが3つくらいある。
・macやHackintoshを持ってる友達に協力してもらう
・AWSのEC2でmacOSが対応したから一瞬EC2を構築する
・別の仮想環境でmacOSを作成する

ただ、OSK認証キーは特徴があるのでmacなしでずるしようと思えばできる。それを自分から勧めるのは違うなと思うので、ずるしたい人は英語ブログとか探そう。

OSK認証キーの取得

macで操作。

参考
https://web.archive.org/web/20200603015401/http://www.osxbook.com/book/bonus/chapter7/tpmdrmmyth/
最初のボックスの部分をコピペする。

//smc_read.cの空ファイルの作成
# touch smc_read.c

//smc_read.cの編集
# vi smc_read.c

//以下をそのままコピペ

/*
 * smc_read.c: Written for Mac OS X 10.5. Compile as follows:
 *
 * gcc -Wall -o smc_read smc_read.c -framework IOKit
 */

#include <stdio.h>
#include <IOKit/IOKitLib.h>

typedef struct {
    uint32_t key;
    uint8_t  __d0[22];
    uint32_t datasize;
    uint8_t  __d1[10];
    uint8_t  cmd;
    uint32_t __d2;
    uint8_t  data[32];
} AppleSMCBuffer_t;

int
main(void)
{
    io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault,
                               IOServiceMatching("AppleSMC"));
    if (!service)
        return -1;

    io_connect_t port = (io_connect_t)0;
    kern_return_t kr = IOServiceOpen(service, mach_task_self(), 0, &port);
    IOObjectRelease(service);
    if (kr != kIOReturnSuccess)
        return kr;

    AppleSMCBuffer_t inputStruct = { 'OSK0', {0}, 32, {0}, 5, }, outputStruct;
    size_t outputStructCnt = sizeof(outputStruct);

    kr = IOConnectCallStructMethod((mach_port_t)port, (uint32_t)2,
             (const void*)&inputStruct, sizeof(inputStruct),
             (void*)&outputStruct, &outputStructCnt);
    if (kr != kIOReturnSuccess)
        return kr;

    int i = 0;
    for (i = 0; i < 32; i++)
        printf("%c", outputStruct.data[i]);

    inputStruct.key = 'OSK1';
    kr = IOConnectCallStructMethod((mach_port_t)port, (uint32_t)2,
             (const void*)&inputStruct, sizeof(inputStruct),
             (void*)&outputStruct, &outputStructCnt);
    if (kr == kIOReturnSuccess)
        for (i = 0; i < 32; i++)
            printf("%c", outputStruct.data[i]);

    printf("\n");

    return IOServiceClose(port);
}

//保存
:wq

//gccをmacにインストール(インストールしている場合はスキップ、インストールは数分待つ)
# xcode-select --install

インストールを選択

利用規約に同意する

インストール完了すればOK

//smc_read.cをコンパイル
smc_read.cがあるディレクトリで作業すること
# gcc -o smc_read smc_read.c -framework IOKit

//smc_readを実行してOSK認証キーを表示させる
# ./smc_read

ここで出てきた結果を控えておく

macOSのisoの作成

ubuntuで操作。

//必要なパッケージのインストール
# apt install g++ git qemu-utils libxml2-dev libssl-dev zlib1g-dev cmake libbz2-dev libfuse-dev fuse autoconf unzip

//OSX-KVM toolのダウンロード
# git clone --depth 1 https://github.com/kholia/OSX-KVM.git
Cloning into 'OSX-KVM'...
remote: Enumerating objects: 144, done.
remote: Counting objects: 100% (144/144), done.
remote: Compressing objects: 100% (90/90), done.
remote: Total 144 (delta 29), reused 143 (delta 29), pack-reused 0
Receiving objects: 100% (144/144), 71.18 MiB | 20.52 MiB/s, done.
Resolving deltas: 100% (29/29), done.

//OSX-KVMディレクトリに移動
# cd OSX-KVM/

//macOSインストーラーの取得
番号選択後、色々ダウンロードされるのでコマンド入力できるようになるまで結構待つ。
# ./fetch-macOS-v2.py
1. High Sierra (10.13)
2. Mojave (10.14)
3. Catalina (10.15) - RECOMMENDED
4. Latest (Big Sur - 11)

Choose a product to download (1-4): 4 (Big Surがほしいので4を選択)
Downloading 694-24485...
Saving http://oscdn.apple.com/content/downloads/19/05/001-28530/f5eukmvtgjyblrf2af2clohxt4mba7g2pn/RecoveryImage/BaseSystem.dmg to BaseSystem.dmg...
Note: The total download size is 633.79 MB
Download complete!
Saving http://oscdn.apple.com/content/downloads/19/05/001-28530/f5eukmvtgjyblrf2af2clohxt4mba7g2pn/RecoveryImage/BaseSystem.chunklist to BaseSystem.chunklist...
Note: The total download size is 2596 bytes
Download complete!

//BaseSystem.dmgファイルが存在していることを確認(ダウンロードされたやつ)
# ls | grep BaseSystem.
BaseSystem.chunklist
BaseSystem.dmg

//BaseSystem.dmgをiso形式に変換
(BaseSystem.isoでもよかったが、名前がわかりやすいようにmac_BigSur11.isoにした)
# qemu-img convert BaseSystem.dmg -O raw mac_BigSur11.iso

作成したisoをpveにアップロード。
自分はGUIでアップロード。
データセンター > pve01 > local(pve01) > ISO Images
アップロードから、作成したisoを選択しアップロードする。

OpenCoreのダウンロード

ブートローダーとしてOpenCoreをダウンロードする。
これはwindowsでもlinuxでもどのマシンで実施しても良い(gzを解凍できればいい)。
https://github.com/thenickdude/KVM-Opencore/releases にアクセス。
最新のOpenCoreのgzファイルをダウンロード。

ダウンロードしたファイルを7zipなどで解凍し、中のisoをpveにアップロード
データセンター > pve01 > local(pve01) > ISO Images
アップロードから、作成したisoを選択しアップロードする。

macVMの作成

1. VMの作成

VMの作成を選択。

・全般タブ
名前 : 好きな名前

・OSタブ
isoイメージ : OpenCore-v12.iso (BigSur11のisoは選ばないこと。BigSur選んでもいいけど後のconfファイルの変更はいい感じに読み替えてください。)
種類 : Other

・システムタブ
グラフィックカード : VMWare互換
BIOS : OVMF(UEFI)
ストレージ : 自分の使いたいところ
Machine : q35

・ハードディスクタブ
バス/デバイス : SATA or VirtlO Block (というかどれでもいいような気がするけど、今回はSATAにした)
ディスクサイズ : 64GiB以上を入力(64以下はだめらしい)
キャッシュ : Write back (unsafe)
Discard : 有効

・CPUタブ
ソケット : 1
コア : 好きな値
種別 : Penryn

・メモリータブ
メモリー : 好きな値
Ballooning Device : 無効

・ネットワーク
ブリッジ : 使いたいnic
モデル : VMware vmxnet3

・確認タブ
確認画面で問題なければ完了を選択。
この後設定変更をするので、作成後に起動は有効にしないこと。

対象マシンのオプションのUse tablet for pointerが有効になっていることを確認

対象マシンのハードウェアからCD/DVDドライブの追加を行う。

バス/デバイス : IDE
CD/DVDイメージファイル(iso)を使用する : 有効
ストレージ : 使いたいところ
isoイメージ : mac_BigSr11.iso

ここまででGUIでの準備は終了。
対象VMのVM番号を確認しておくこと。

2. VMのconfファイルの設定変更

pveにSSHする。

//作成したmacVMの設定ファイルの編集
# nano /etc/pve/qemu-server/VMID.conf

//先頭に以下を追加(構文)
args: -device isa-applesmc,osk="THE-OSK-YOU-EXTRACTED-GOES-HERE" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 “CPU別説明”

"THE-OSK-YOU-EXTRACTED-GOES-HERE"にOSK認証キーを入力する。
この際、""は必要。

"CPU別説明"はintelとAMDで異なる。今回pveがintelのCPUなので、今回はintelの説明を入力する。
この際、""は不必要。
・intelの場合
-cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc
・AMDの場合
-cpu Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+fma,+fma4,+bmi1,+bmi2,+xsave,+xsaveopt,check

まとめると、自分が入力したのは以下の1行になる。
args: -device isa-applesmc,osk="THE-OSK-YOU-EXTRACTED-GOES-HERE" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -cpu host,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc


//CDROMの設定変更
ide0とide2の行から、media=cdromを削除し、cache=unsafeを追加。これによりハードディスクとして認識する。
OpenCoreの方にサイズを追加

- ide0: local:iso/mac_BigSur11.iso,media=cdrom,size=2096060K
- ide2: local:iso/OpenCore-v12.iso,media=cdrom
+ ide0: local:iso/mac_BigSur11.iso,cache=unsafe,size=2096060K
+ ide2: local:iso/OpenCore-v12.iso,cache=unsafe,size=150M

//bootの設定を変更する
ここは諸説あり、デフォルトでboot行やbootdisk行が存在しているしていないがあるっぽい。
おそらくどの環境であってもデフォルト状態のままで良いと思われる。
VM起動したときに動かないようであれば、以下の行を追加したり変更する。
今回自分の環境ではboot行はあるが、bootdisk行は存在しなかった。のでこの変更はしなかった。

+ bootdisk: ide2

//保存
ctrl + X

OSのインストール

VM起動する。
macOS Base Systemを選択(ブートローダーのこの画面だけはマウスは使えないのでキーボードで選択する)。

Disk Utilityを選択。

Externalのディスクを選択し、Eraseを選択。

Name : 適当な値
Format : APFS

Disk Utilityを閉じて、Reinstall macOS Big Surを選択。

Continueを選択。

利用規約に同意する。

フォーマットしたディスクを選択。

結構待つ。インストールが終わるとVMが自動で再起動される。

再起動後はmacOS Installerを選択。インストールが始まるので結構待つ。

インストールしたディスクを選択して起動。

ここで起動されないトラブルが発生。
オチはVMのconfファイルの追加した行に謎のスペースが入っていたことが原因。なので謎スペースを削除したら普通に起動できた。
これに気付いたのは、pve上でqm start "VMID"でmacVMを起動したときに、警告が出たから気付いた。警告はGUIのタスクには出てこないんだなと思った。

ただ、起動ループという症状も存在しているらしくそのコマンドを入力した。
基本的にはこのコマンドなしでも動くとは思うんだけど、もし動かない場合はこのコマンドをpveで入力すると解決するかもしれない。

//起動ループ対策コマンド
# echo 1 > /sys/module/kvm/parameters/ignore_msrs

//永続的に実行するコマンド
# echo "options kvm ignore_msrs=Y" >> /etc/modprobe.d/kvm.conf && update-initramfs -k all -u
update-initramfs: Generating /boot/initrd.img-5.4.106-1-pve
Running hook script 'zz-pve-efiboot'..
Re-executing '/etc/kernel/postinst.d/zz-pve-efiboot' in new private mount namespace..
Copying and configuring kernels on /dev/disk/by-uuid/A6F3-7E83
	Copying kernel and creating boot-entry for 5.4.106-1-pve
	Copying kernel and creating boot-entry for 5.4.73-1-pve
Copying and configuring kernels on /dev/disk/by-uuid/A6F4-7158
	Copying kernel and creating boot-entry for 5.4.106-1-pve
	Copying kernel and creating boot-entry for 5.4.73-1-pve
update-initramfs: Generating /boot/initrd.img-5.4.73-1-pve
Running hook script 'zz-pve-efiboot'..
Re-executing '/etc/kernel/postinst.d/zz-pve-efiboot' in new private mount namespace..
Copying and configuring kernels on /dev/disk/by-uuid/A6F3-7E83
	Copying kernel and creating boot-entry for 5.4.106-1-pve
	Copying kernel and creating boot-entry for 5.4.73-1-pve
Copying and configuring kernels on /dev/disk/by-uuid/A6F4-7158
	Copying kernel and creating boot-entry for 5.4.106-1-pve
	Copying kernel and creating boot-entry for 5.4.73-1-pve

地域 : Japan

Customize Settingsを選択し、すべての項目をJapaneseにする。
Japaneseが存在していなかったら、+ボタンから探して追加する。


何も選ばず進む。

macやwindowsにバックアップデータがあればこのマシンに情報を転送できるということ。
今回は情報はないし、あってもクリーンインストールにしたいので、Not Nowを選択。

Apple IDでのサインインは後今やっても後でやってもいい。
今回はSet Up Laterを選択。

ライセンス規約に同意する。

ローカルユーザー作成
Full name : 使いたい名前
Account name : 使いたい名前
Password : 使いたいパスワード

追加設定はしないのでContinueを選択(Customize Settingsを選択すると設定できる)。
位置情報サービスと統計データの送信っぽい。

統計情報の送信。必要なら有効にする。

スクリーンタイムは必要なら設定する。
今回はSet Up Laterでスキップする。

必要ならSiriを有効にする(音声送れないから有効にする必要はないと思うけど)。

好みのカラーテーマを選択する。

デスクトップが表示されればインストール完了。
インストール完了した時点でqemuエージェントがインストールされているようで、pveのGUI上でIPアドレスの確認ができる。
(qemuエージェントが入っているかどうかの確認方法がわからなかった。)

OSの初期設定

1. 画面共有設定

システム環境設定 > 共有
画面共有を有効にする。これでvncで接続ができるようになる。必要があれば他の項目も有効にする。

2. ホスト名設定

システム環境設定 > 共有
コンピュータ名を変更する。

3. ブートローダーをハードディスクに追加

今はOpenCore.isoがないとmacを起動することができない。OpenCoreをハードディスクに追加してOpenCore.isoをVMのデバイスから削除する。これによりOpenCore.isoを必要とせずmacOSをハードディスクから自動起動させることが可能。

やり方は2通りある。
・ターミナルを起動しコマンドで実行する。
・EFIをマウントできるソフト(Clover Configurator)をmacにインストールしてGUIで操作する。

今回はコマンドで実施した。

//ディスク状態の確認
% diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *2.1 GB     disk0
   1:                  Apple_HFS ⁨macOS Base System⁩       2.0 GB     disk0s1

/dev/disk1 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *157.3 MB   disk1
   1:                        EFI ⁨EFI⁩                     157.2 MB   disk1s1

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *68.7 GB    disk2
   1:                        EFI ⁨EFI⁩                     209.7 MB   disk2s1
   2:                 Apple_APFS ⁨Container disk3⁩         68.5 GB    disk2s2

/dev/disk3 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +68.5 GB    disk3
                                 Physical Store disk2s2
   1:                APFS Volume ⁨main - Data⁩             3.3 GB     disk3s1
   2:                APFS Volume ⁨Preboot⁩                 284.5 MB   disk3s2
   3:                APFS Volume ⁨Recovery⁩                622.1 MB   disk3s3
   4:                APFS Volume ⁨VM⁩                      1.1 MB     disk3s4
   5:                APFS Volume ⁨main⁩                    15.3 GB    disk3s5
   6:              APFS Snapshot ⁨com.apple.os.update-...⁩ 15.3 GB    disk3s5s1

disk1s1がOpenCoreのデータになる。
これをメインハードディスクである、Apple_APFSが存在しているdisk2s1にコピーする。

//disk1s1のデータをdisk2s1にコピーする
構文は、sudo dd if=”送信元” of=/”宛先”

% sudo dd if=/dev/disk1s1 of=/dev/disk2s1
307120+0 records in
307120+0 records out
157245440 bytes transferred in 15.457359 secs (10172853 bytes/sec)

OSシャットダウンし、VMの設定変更。
ide0とide2をデタッチする。

デタッチ後

macVMを起動する。
ブートローダーが起動して、mainを選択しデスクトップが表示されればOK。

4. ブートローダーでのmacの自動起動

今の状態だと、VM起動したときに自動でmacOSが入っているディスクで起動してくれないため、毎回pveにアクセスしてコンソールを開く必要がある。
それが面倒なのでブートローダーの設定変更をしてmacが自動で起動するようにする。

ProperTreeをmacにダウンロードする。
テキストエディタより、ProperTreeのようなplistエディタを使う方が安全。

https://github.com/corpnewt/ProperTree
Download ZIPからダウンロードする。

ProperTree.commandを起動する。

セキュリティで開けないので許可する。

システム環境設定 > セキュリティとプライバシー > 一般タブ

許可する。

EFIがマウントされていないため何も表示されていない。
そのためEFIマウントをする。

//パーティション確認
% diskutil list
/dev/disk0 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *68.7 GB    disk0
   1:                        EFI ⁨EFI⁩                     209.7 MB   disk0s1
   2:                 Apple_APFS ⁨Container disk1⁩         68.5 GB    disk0s2

/dev/disk1 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +68.5 GB    disk1
                                 Physical Store disk0s2
   1:                APFS Volume ⁨main - Data⁩             3.6 GB     disk1s1
   2:                APFS Volume ⁨Preboot⁩                 284.5 MB   disk1s2
   3:                APFS Volume ⁨Recovery⁩                622.1 MB   disk1s3
   4:                APFS Volume ⁨VM⁩                      1.1 MB     disk1s4
   5:                APFS Volume ⁨main⁩                    15.3 GB    disk1s5
   6:              APFS Snapshot ⁨com.apple.os.update-...⁩ 15.3 GB    disk1s5s1

//EFIのマウント
% sudo diskutil mount /dev/disk0s1
Password:
Volume EFI on /dev/disk0s1 mounted

FileからOpenを選択。

EFI > OC > config.plistを開く。

真ん中より下あたりのMisc > Boot > Timeoutの値を好きな値に変更する。
0は自動起動しないので、5にして5秒で起動するようにする。

設定を保存する。

//EFIをアンマウントする
% sudo diskutil unmount /dev/disk0s1
Password:
Volume EFI on disk0s1 unmounted

OS再起動して自動でmacが立ち上がることを確認。

参考
https://manjaro.site/how-to-install-macos-catalina-on-proxmox-using-opencore-boot-loader/
https://gaddet.com/propertree/

5. OS解像度変更

windowsのrdpだと接続クライアントの解像度に依存してリモート先の解像度が変更されるが、macのVNC接続だとmac側の解像度に依存して接続クライアント側で表示される解像度が決定される。
接続クライアントがWQHDや4kだと解像度の粗さが気になってしまうので、解像度を変更する。
フルHDのモニターを使用している場合はこの作業は不要。

4. ブートローダーでのmacの自動起動で使用したProperTreeを起動し、config.plistを開く。
下の方にあるUEFI > Output > Resolutionを好きな値に変更する。
@の後ろはリフレッシュレートを表しているが、VMだからかリフレッシュレートの数値を変更してもOSには反映されない(でも気持ち的に32じゃなくて60にした)。

config.plistを保存, OS再起動し、解像度が変更されていることを確認する。
左上のappleアイコン > このMacについて > システムレポート > グラフィック/ディスプレイ
(実機のmacだとここにリフレッシュレートの値が表示されているが、このマシンにはない)


6. 時刻設定

GMT-7が時刻になっているので、時間帯をTokyoに変更する。
システム環境設定 > 日付と時刻
時間帯をTokyoに変更する。

7. マウスホイールの逆向き設定

マウスホイールが上にスクロールすると下にスクロールして、下にスクロールすると上にスクロールするようになっている。これをwindowsと同じ上は上、下は下にする。これは好みの設定になると思う。

システム環境設定 > マウス
スクロールの方向 : 無効

JIS配列にするまでの苦労

macVM作ってから放置していたので、全然気づいてなかったが、JIS配列にどうしてもならなくて苦労した。

1. キーボードの日本語入力設定

色々手を尽くしたけど、OS標準の設定で日本語入力にすることができなかった。
JISキーボードに表示上はできたけど、入力モードはひらがな表示なのにずっと英字が入力される。
再起動後、入力ソースを見ると、US配列に戻ってる(表示上の問題かもしれない)。

ので、諦めてgoogle日本語入力をインストールした。

ダウンロードフォルダにある、Google.JapaneseInput.dmgを起動。

GoogleJapaneseInput.pkgを起動。

デフォルトでインストール。

インストール後、google日本語入力を有効にするにチェック。

キーボードの入力ソースをgoogle日本語入力のひらがなと英数のみにする。

これでメニューバーを選択すればキーの切り替えは可能。
ショートカットでは以下のように入力すれば切り替えられる(リモート元の物理キーボード入力)。
ちなみにmacのcommandキーはwindowsのaltキーに割り当てられている(vnc接続の場合)
・日本語入力する時 : ctrl + shift + J
・英数入力する時 : ctrl + : (コロン)

もしくは以下を有効にして、ctrl + スペースで切り替えできるようにする。
システム環境設定 > キーボード > ショートカットタブ
前の入力ソースを選択 : 有効

2. Karabiner-Elementsのインストール

自分はリモート接続元PCはJIS配列のキーボードを使用していて、リモート接続した時にmac側に記号を入力した際にUS配列の記号の出力がされる。
これをどうにかJIS配列で出力させようとした。

以下の公式ページにアクセスし、Karabiner-Elementsをダウンロードする。
https://karabiner-elements.pqrs.org/

ダウンロードしたKarabiner-Elemetns.dmgをダブルクリックでマウントし、その中にあるKrabiner-Elements.pkgをダブルクリックで起動する。

続けるをクリック。

インストール先を選択して、インストールをクリック。
PCのパスワードの入力が求められるので、ログインパスワードを入力する。

「インストールが完了しました」と表示されることを確認。

アプリケーションフォルダから、Karabiner-Elements.appを起動する。

初回なので、いつものセキュリティブロックが表示されるので、許可する。
今回は2つポップアップが出るので、それぞれで許可をする。
“セキュリティ”環境設定を開くをクリック。

左下の鍵マークをクリックし、パスワードを入力したあと、アプリケーションの許可をクリックする。

キー操作の受信のポップアップで、”システム環境設定“を開くをクリック。

入力監視の項目で、karabiner_grabberとkarabiner_observerの2つともにチェックを入れる。

チェックを入れると、キーボード設定アシスタントが自動で起動するので、
指示に従ってshiftキーの横を押す。
(VMでこの作業意味あるんだろうか...)



karabiner-elementsを起動し、Profilesタブをクリック。
何かがきっかけでUSキーボードを使う時などが来るかもしれないので、デフォルトプロファイルは残しておいて、新しいプロファイルを作成する。
今回はJISとわかるような名前を付けておく。

Virtual Keyboardタブをクリック。
country codeにJIS配列を表す、45を入力する。

本来ならこれでJIS配列で出力されるはずなのに、例えばshift + 2を入力したら@が出力され、設定が反映されていない。
OS再起動しても反映されない。
なんとなしに、ログアウトしてから再度ログインしたらJIS配列になっていた。
この状態でOS再起動したらUS配列に戻っていたが、ログアウトしてから再度ログインしたらやはりJIS配列になっていた。

正直納得はいかないけど、JIS配列にすることはできた。

3. 全角/半角キーでのIME切り替え設定(結局ダメだった)

半角全角キーで日本語と英語の切り替えをさせる。
IMEがOFF(ON)のときに"全角/半角"キーを押したらIMEをON(OFF)にする、という動作がKarabiner-Elementsだけで実現させる。

これをやる際に、~/.config/karabiner/karabiner.json のjsonファイルに直接書いてもいいんだけど、
~/.config/karabiner/assets/complex_modifications にjsonファイルを書いて、GUIからルールを追加する方が簡単だし事故も起きないと思う。
karabinerのファイルを簡単に開く方法は、Karabiner-Elementsを開いて、MiscタブのOpen config folderをクリックすると、簡単に開ける(まだmacのfinderの使い方がわからない)。

以下にある基本の記述をベースに使用する入力方式によって値を変更する。
自分はgoogle日本語入力を使用しているため、それに合わせたものを作成する。
ちなみにこのベースのjsonはcomplex modificationsに追加するようではない(titleがない)ので、karabiner.jsonに直接書き込むタイプのjsonになる。
なのでそこは自力で追加する必要がある。
https://qiita.com/s-show/items/08a7c1b558e4d7e6f1b0

jsonのファイル名は数字以外を使用するとKarabiner-Elementsが認識しないことがあるようなので、数字のみで作成する。

IMEのON/OFF判定や切り替えに使う値を確認する。
対象になる値は以下。
"ja"
"en"
"^com\.apple\.inputmethod\.Kotoeri\.Roman$"

Karabiner-EventViewer.appを起動し、Variablesをクリックする。
“input_source_id”の行をIMEオンとオフの状態それぞれで確認する。
確認した値を正規表現で表さなければならない点に注意。

・IMEオフの時

・IMEオンの時

この値をjsonに当てはめる。
input_sourcesがenの方には^com\.google\.inputmethod\.Japanese\.base$
input_sourcesがjaの方には^com\.google\.inputmethod\.Japanese\.Roman$
を適用する(逆になる)。

//jsonファイルの中身
{
  "description": "grave_accent_and_tilde to IME ON/OFF",
  "manipulators": [
    {
      "type": "basic",
      "from": { "key_code": "grave_accent_and_tilde" },
      "to": [
        {
          "select_input_source": {
            "input_source_id": "^com\\.google\\.inputmethod\\.Japanese\\.Roman$"
          }
        }
      ],
      "conditions": [
        {
          "type": "input_source_if",
          "input_sources": [
            { "language": "en" }
          ]
        }
      ]
    },
    {
      "type": "basic",
      "from": { "key_code": "grave_accent_and_tilde" },
      "to": [
        {
          "select_input_source": {
            "input_source_id": "^com\\.google\\.inputmethod\\.Kotoeri\\.base$"
          }
        }
      ],
      "conditions": [
        {
          "type": "input_source_if",
          "input_sources": [
            { "language": "ja" }
          ]
        }
      ]
    }
  ]
}

理屈的にはこれで動きそうなんだが、complex modificationsに適用しても反映されず。
再ログインしても反映されず。

というかテストで再ログインとかしていたら、IMEのONかOFFどちらかで固定されて変更できない問題が発生するのはなんなんだろうか。

もう1つの方法として、全角半角キー(grave_accent_and_tilde(`))をF13に割り当てて、システム環境設定から入力ソースの切り替えをF13にしてしまうというのがある。

Simple modificationsからAdd itemで行を追加する。
From key : grave_accent_and_tilde(`)
To key : F13

システム環境設定 > キーボード > ショートカット > 入力ソース
前の入力ソースを選択のみチェックを入れて、切り替えキーを全角半角キー(F13)をクリックしてショートカットに割り当てる。

本来ならここでちゃんとF13になるはずなんだが、VMだからか切り替わらない。
F1-F12までは単独でショートカットキーになれるし、キー次第では装飾キーと合わせてショートカットキーになることができる。
だが、F13は反応しない。

qemuのキーボードの問題なのかOSなのかもうわからなくて、諦めた。
どちらにしろctrl + スペースで切り替えられるから一応OKということにしておく。

4. マウスのサイドボタン設定

rdpだとマウスのサイドボタンが反応するのにmacへのリモート接続だとサイドボタン反応しないの不便だなと思っていたら、だいたいのマウスはmacに接続してデフォルトの状態だとサイドボタンは認識しないことが判明した。
Krabiner-Elementsを使用すればマウスのサイドボタンを反応させることが可能という情報を見つけた。

公開されているjsonがあるのでそれをインポートする。
Complex modificationsタブからAdd ruleをクリック。

Import more rules from the Internet(open a web brower)をクリック。

ブラウザが立ち上がるので、”Key Specific”セクション内にある、”Change mouse buttons (rev 2)”をインポートする。

開くをクリック。

インポートするか聞かれるので、Importをクリック。

成功と表示されるのを確認。

Change button4,5 to back,forward (rev 1)をEnableにする。

ここまでやったら本来の実機ならマウスのサイドボタンが反応するはずなんだが、やはりVMだからかサイドボタンが反応しない。
試しにproxmoxにUSBパススルーの設定をしてサイドボタン付きマウスを接続してみたら、サイドボタンがちゃんと反応した。

5. 参考

https://knowledge.sakura.ad.jp/23355/
https://github.com/pqrs-org/Karabiner-Elements/issues/167
https://qiita.com/s-show/items/08a7c1b558e4d7e6f1b0
http://alaida.techblog.jp/archives/9942941.html
https://qiita.com/funatsufumiya/items/2d0395c6622468a31b4f
https://qiita.com/s-show/items/a1fd228b04801477729c

windows用JISキーボードの装飾キー入力の対応表

接続元windows用JISキーボードの装飾キーを押したときに、使用するソフトで出力される装飾キーが異なることに気づいたのでまとめておく。

JISキーボード入力 vnc(VNC viewer) Splashtop(Splashtop personal)
ctrl control(⌃) control(⌃)
windows option(⌥) alt command(⌘)
alt alt command(⌘) option(⌥)
capsock capslock capslock

ちなみにsplashtopで接続した際に気づいたのが、capslock1回押しで次の文字が大文字になり、次の文字は小文字になる。
shift + capslockでもう一度shift + capslockを押すまで大文字になる。
vncの場合は、capslock1回押しの後は大文字にならない。
shift + capslockでもう一度shift + capslockを押すまで大文字になる。

参考

https://manjaro.site/install-macos-big-sur-11-on-proxmox-6-3/
https://manjaro.site/how-to-install-macos-catalina-on-proxmox-using-opencore-boot-loader/
https://www.nicksherlock.com/2020/04/installing-macos-catalina-on-proxmox-with-opencore/
https://www.youtube.com/watch?v=86XqF5dqjYc

所感

macOSでやりたいことがないため、どうしたものかなという感じ。
音声をmacからリモート元のクライアントPCから流すことができないため、CPUとメモリリソースを割り当ててメインPCにすることができないし。
macの音声をリモート元で再生するために、splashtop personalをインストールして接続してみたりしたが音声が流れなかった。1回だけ音声が流れたが、macの再起動をした後からは音声が流れなくなった(なんかmacの仕様が変わってsplashtop側が対応していないという可能性もある)。

CPUとメモリを余裕を持って割り当てても、GPUの問題なのか動作が重いとか反応が悪い時が結構ある。
GPUパススルーとかしたら改善するのかもわからないから手を出す気になれない...

キーボード関係でまじで苦労するのでほんとにmac側でいい感じになってほしい。
そもそもVMで動かすことを想定していないのもあるだろうけど、全然思い通りに動かないから大変。
vncじゃなくて、windowsのrdpみたいなリモート接続ツールがmac存在しているべきなのでは?(vnc音も出ないし)

Discussion

とても参考になりました。
質問なのですが、proxmoxのスペックとそのスペックでの動作はどのような感じですか?

コメントありがとうございます。
proxmoxのCPUがintel gold G5420@3.80GHzで、メモリが16GBメモリ、ストレージはHDDです。
他のVM起動しててproxmoxのメモリが足りないため、mac構築してからはずっと塩漬け状態です...

macのchromeでyoutube流してみるくらいはしてみましたが、ちょっと固まることはありました。
リソースの計測はちゃんとやってはいないです。

ログインするとコメントできます