Get ready to keep note of all your hardware!
We'll start by writing down the CPU, Motherboard, and GPU information. It’s essential to check that your storage devices, such as NVMe drives, are recognized and perform well with macOS as well if you are interested in passing them through to an OS X / macOS guest. Physical storage passthrough is not required, but you'll be prepared for any situation by knowing all of your machine hardware.
Ensuring compatibility with Wi-Fi & Bluetooth (if you plan to use it in the guest for Continuity), and Motherboard Audio chipsets is also important for a smooth experience when it comes to properly configuring your Hypervisor. In many cases it still makes sense to check how old your motherboard firmware (BIOS) is, and update it if necessary. This reduces the chances of future updates breaking or modifying your IOMMU groups (You'll learn what IOMMU is later!)
You only need to open one of the following sections of instructions. Either manually search for the information using your Terminal, or use DarwinKVM’s Main Menu options to use System Profiler.
Using Terminal
The commands below should work regardless of the distribution of Linux you are using! There are multiple ways to get the same information, so if you are missing a package or a command does not work for you, try using the others in the intended section as a last resort.
Finding CPU Name
The command below will probe /proc/cpuinfo and pretty print you the info you need
grep "model name" /proc/cpuinfo | head -n 1 | cut -d ':' -f2 | xargs
This one is pretty simple, and should give you something like so:
AMD Ryzen 7 3700X 8-Core Processor
Finding GPU Information
We'll need to know a decent amount about our Graphics Processing Units. You may have more than one in your system, please note that Integrated and Dedicated GPUs both count and will appear, you will want to know plenty for both. We'll get the GPU Name, the Vendor and Device ID as well. In this section, you'll also get the PCI location of the GPU, in case you require it later to disable non supported GPUs from being visible in OS X / macOS
lspci -nn | grep -i -E 'vga|3d|2d|display'
The above command will search using LSPCI to gather all GPUs with the extended information like the PCI location, and the Vendor/Device ID. Example output is as follows:
06:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 23 [Radeon RX 6600/6600 XT/6600M] [1002:73ff] (rev c7)
-
06:00.0
is the PCI location -
Navi 23 [Radeon RX 6600/6600 XT/6600M]
is the Generation and GPU Name -
[1002:73ff]
is the Vendor and Device ID data
Finding Motherboard Name/Chipset
This one is a bit trickier, as the information is not directly exposed in a command typically. Below we will start with the most universal option using Cat and reading from the filesystem.
cat /sys/devices/virtual/dmi/id/board_vendor
cat /sys/devices/virtual/dmi/id/board_name
These two individual commands should print out something similar to below:
[user@host ~]$ cat /sys/devices/virtual/dmi/id/board_vendor
ASUSTeK COMPUTER INC.
[user@host ~]$ cat /sys/devices/virtual/dmi/id/board_name
ROG STRIX B550-F GAMING
The command below is simply an easier way to execute both commands at the same time, to pretty print the information to write down.
echo "$(cat /sys/devices/virtual/dmi/id/board_vendor) $(cat /sys/devices/virtual/dmi/id/board_name)"
If you have dmidecode
installed, you can use the following command:
sudo dmidecode -t baseboard | grep -E 'Manufacturer|Product'
Finding Storage Name/Model/Type
Most, if not all Linux installations come with lsblk. We can use it to specifically find out what type of storage we have, and the Product Name/Model of it.
lsblk -d -o NAME,MODEL
You should get something similar to the output below:
NAME MODEL
nvme0n1 WDS100T3X0C-00SJG0
nvme2n1 Samsung SSD 980 1TB
Finding Networking Controllers
We can again leverage LSPCI to parse out information related to Networking, and all types available on your system.
lspci -nn | grep -i -E 'ethernet|network'
You may or may not getting something like the following:
09:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller I225-V [8086:15f3]
03:00.0 Network controller [0280]: Intel Corporation Wi-Fi 6E(802.11ax) AX210/AX1675* 2x2 [Typhoon Peak] [8086:2725]
Let's break down the information.
09:00.0
is the PCI location-
03:00.0
is the PCI location Intel Corporation Ethernet Controller I225-V
is the Brand, Type, and Chipset-
Intel Corporation Wi-Fi 6E(802.11ax) AX210/AX1675
is the Brand, Type, and Chipset [8086:15f3]
is the Vendor and Device ID data[8086:2725]
is the Vendor and Device ID data
Finding Sound Controller and Codecs
Like the motherboard information, finding out the specific Codec in use by your Sound Controller is a tad tricky and may require additional packages but, we'll try the universal methods first.
lspci -nn | grep -i 'audio'
We start by getting all Audio Controllers on the system like so:
06:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 21/23 HDMI/DP Audio Controller [1002:ab28]
0c:00.4 Audio device [0403]: Advanced Micro Devices, Inc. [AMD] Starship/Matisse HD Audio Controller [1022:1487]
I'm sure by now, you understand how to read the command, let's get straight to figuring out the Codec in use right now.
cat /proc/asound/card*/codec* | grep -m 1 "Codec"
This would give something similar to the following:
If you cannot use the above method, and have the aplay
command available on your system, you can use the following:
aplay -l | grep -i codec
Where you may get similar output to below.
card 1: Generic [HD-Audio Generic], device 0: ALC1220 Analog [ALC1220 Analog]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 1: ALC1220 Analog [ALC1220 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
We're looking for something similar to ALC1220
. That is the Codec.
Using DarwinKVM's Menu
This feature is still not available.
Now that we've written all of that down, we can now go ahead and see if the hardware is supported.