Some devices especially laptops is trying to limit the function of Linux by cutting down some hardware or limit, this will make not only Linux distros but also Android-x86 based OS like Darkmatter working improperly.
Fortunately this can be fixed by faking the OSI (Operating System Interface Level ) string to make BIOS thinking Linux is a supported version of Windows
So let’s get started.
I. Preparation
- A Linux Live USB. (or a Linux distro that you are using).
Yea you only need Linux distro to identify the Windows OSI you need to fake. If you are a newcomer to Linux, I’d recommend to check some of Ubuntu (and their “flavour”). One of my recommendation is Xubuntu , a Ubuntu version that using Xfce as Desktop Environment so it’s kinda light.
(NOTE : You don’t need to install Linux after created USB, we only make LiveUSB to identify the OSI string.)
To flash the iso, you can use Etcher
2. Getting OSI string in the BIOS.
Now boot to USB, connect to the Internet and then open Terminal. install acpica-tools and iasl tool.
sudo apt install acpica-tools iasl
(apt is the package manager of Ubuntu or Debian-based distro, if you use other distro like Fedora (rpm, dnf) or Arch (pacman), please use the right package manager to install)
Next, time to dump ACPI tables.
sudo acpidump > acpi.log
sudo acpixtract acpi.log
sudo iasl -d dsdt.dat
You will have the dsdt.dsl in your home folder, open it using File Manager (in Xfce is Thunar). Look into home folder.
and you will see the file. In my case, I’m using Dolphin (FM of KDE) so my file is here
Open the file and find “Windows” (using Ctrl+F, of course ) and you will see your OSI version identified by BIOS.
If you wonder what are those Windows + year here mean : https://docs.microsoft.com/en-us/windows-hardware/drivers/acpi/winacpi-osi
I will the latest one in my BIOS which is Windows 2012 ("Windows 2012" for Windows 8 and Windows Server 2012). It is recommended for you to use the latest string in your BIOS too.
So now you know the OSI version need to fake, now comes to the final part, edit boot manager.
3.Edit Boot Manager (or GRUB2 bootloader).
Now it’s time to edit entry for PhoenixOS Darkmatter (or any Android-x86 based OS). Add the following line
acpi_osi=! acpi_osi='OSI Version'
For example I said I’m gonna fake as Windows 2012 so I’ll set like
acpi_osi=! acpi_osi='Windows 2012'
Into the entry like this example :
insmod all_video
search --set=root --file /findme
linux /kernel quiet root=/dev/ram0 androidboot.selinux=permissive acpi_osi=! acpi_osi='Windows 2012' acpi_sleep=s3_bios,s3_mode SRC=/
initrd /initrd.img
Save it and try to boot.
** Some note made by linesma from Manjaro Forum that I found it pretty interesting.
https://forum.manjaro.org/t/how-to-choose-the-proper-acpi-kernel-argument/80035
Note on acpi_osi=!
This argument disables all vendor strings that maybe present. It should only be used if one of the above OSI strings does not work on its own. If you use it when it is not needed, you maybe able to boot without any acpi errors, but your touchpad or wifi will not work. It also must be used in combination one of the above OSI strings.
Note for Dell Laptops
Sometimes the above kernel parameters will not work properly on some Dell laptops. If that is the case, you can try the following: acpi_rev_override=# Replace the “#” with a number between 1 to 5. In order to have this kernel parameter applied properly, cold booting (shutting your system down completely before restarting) your laptop twice may be required.
Adding the acpi kernel to grub
Once you have found the kernel argument that works the best for your hardware, you need to add it to grub in order to have it applied every time you boot your system. This is easier than it sounds. The problem most users have is syntax or how to type it on the appropriate line. They key to having the argument recognized is to only use “single quotes”, or as we call them in the United States, the apostrophe.
Additional Notes
The kernel parameter apci_osi=Linux can be used in newer (late 2019 and later) Asus laptops to fix an issue where the external HDMI port is not working. Use this one instead of a Windows related parameter.
So I hope I’ve wrapped up almost everything about this topic. Good luck
(refer to number 5 of this post made by arter97 : http://arter97.blogspot.com/2018/08/saving-power-consumption-on-laptops.html)