diff --git a/knowledgebase/troubleshooting/wifi-issues/index.html b/knowledgebase/troubleshooting/wifi-issues/index.html
index e4155ef1..640ac4d9 100644
--- a/knowledgebase/troubleshooting/wifi-issues/index.html
+++ b/knowledgebase/troubleshooting/wifi-issues/index.html
@@ -3,7 +3,7 @@
diff --git a/resources/js/config.js b/resources/js/config.js
index 35c36b3e..d58753ee 100644
--- a/resources/js/config.js
+++ b/resources/js/config.js
@@ -1 +1 @@
-var __DOCS_CONFIG__ = {"id":"+emOVwIdL0kxSC7nqsgCU1KteR50WP146TZ","key":"VmmUgwMKErRyKQiRDBMZFI2/hHEKj8pmmlpP08YzahE.tqdpvWWQTMbeq0w1MlJ6WkSR5E6/vh0S5BXg/mBdADej7u1ervEmFNaFThEy8zBBbsCjqA/R96/ezJZFlAuEhw.98","base":"/","host":"docs.blissos.org","version":"1.0.0","useRelativePaths":true,"documentName":"index.html","appendDocumentName":false,"trailingSlash":true,"preloadSearch":false,"cacheBustingToken":"3.5.0.762641470305","cacheBustingStrategy":"query","sidebarFilterPlaceholder":"Filter","toolbarFilterPlaceholder":"Filter","showSidebarFilter":true,"filterNotFoundMsg":"No member names found containing the query \"{query}\"","maxHistoryItems":15,"homeIcon":"
","access":[{"value":"public","label":"Public"},{"value":"protected","label":"Protected"}],"toolbarLinks":[{"id":"fields","label":"Fields"},{"id":"properties","label":"Properties"},{"id":"methods","label":"Methods"},{"id":"events","label":"Events"}],"sidebar":[{"n":"/","l":"Welcome","s":"
"},{"n":"installation","l":"Installation","c":false,"o":true,"i":[{"n":"install-in-a-virtual-machine","l":"Install in a Virtual Machine","i":[{"n":"install-in-virtualbox","l":"[deprecated]Bliss OS: How to install Bliss OS on VirtualBox"},{"n":"advanced-qemu-config","l":"Advanced configuration for qemu"},{"n":"install-in-qemu","l":"Bliss OS: How to install Bliss OS on Qemu"}]},{"n":"advanced-installation","l":"Advanced Installation"},{"n":"collecting-bug-reports","l":"Collecting bug reports"},{"n":"install-from-bootable-usb","l":"Install Legacy From Bootable USB"},{"n":"install-on-mac-os","l":"Install on Mac OS"},{"n":"live-boot-bliss-os","l":"Live boot Bliss OS"},{"n":"manual-install-on-linux","l":"Manual Install on Linux"},{"n":"run-from-docker","l":"Run from Docker"},{"n":"syslinux-efi-stub-installation","l":"Syslinux EFI Stub Installation"},{"n":"updating-bliss-os-ag-builds","l":"Updating Bliss OS/AG builds"},{"n":"using-auto-install","l":"Using Auto-Install"},{"n":"using-the-windows-installer","l":"Using the windows installer"}],"s":"
"},{"n":"knowledgebase","l":"Knowledgebase","c":false,"o":true,"i":[{"n":"bliss-bass","l":"Bliss bass","c":false,"i":[{"n":"applications","l":"Applications","c":false,"i":[{"n":"blissethernetmanager","l":"BlissEthernetManager"},{"n":"blisskiosklauncher","l":"Setting Up Bliss Kiosk Launcher"}]}]},{"n":"external-threads-and-links","l":"External threads and links","c":false,"i":[{"n":"xda-threads","l":"XDA Threads"}]},{"n":"frequently-asked-questions","l":"Frequently asked questions","c":false,"i":[{"n":"build-filenames","l":"Build Filenames"},{"n":"desktop-mode","l":"Desktop Mode"},{"n":"faq","l":"F.A.Q."},{"n":"hardware-compatibility","l":"Hardware Compatibility"},{"n":"how-to-log","l":"How to Log"},{"n":"keyboard-shortcuts","l":"Keyboard Shortcuts"},{"n":"sandboxing-apps","l":"Sandboxing Apps"},{"n":"vulkan-mode","l":"Vulkan Mode"}]},{"n":"other-bliss-variant","l":"Other Bliss Variant","c":false,"i":[{"n":"surface-builds","l":"BlissOS for Surface devices"},{"n":"go-builds","l":"BlissOS Go"},{"n":"zenith-builds","l":"BlissOS Zenith"}]},{"n":"supreme-gamers-resources-we-like","l":"Supreme gamers resources we like","c":false,"i":[{"n":"advanced-android-x86-installer","l":"Advanced Android-x86 Installer"},{"n":"gearlock","l":"Gearlock"},{"n":"linux-android-x86-installer","l":"Linux Android-x86 Installer"}]},{"n":"troubleshooting","l":"Troubleshooting","c":false,"i":[{"n":"debug-booting","l":"Debug Booting"},{"n":"graphics-troubleshooting","l":"Debug Graphics"},{"n":"edit-grub-from-bliss-install","l":"How to edit grub from your Bliss OS install"},{"n":"how-to-mount-ext-partition-on-boot","l":"How to mount ext partition on boot"},{"n":"how-to-mount-internal-ntfs-partition-on-boot","l":"How to mount internal NTFS partition on boot"},{"n":"microsoft-surface-ipts-gearlock-package","l":"Microsoft Surface IPTS Gearlock Package"},{"n":"not-booting-after-install-on-linux","l":"Not booting after install on Linux"},{"n":"remount-system-as-read-write","l":"Remount system as Read/Write"},{"n":"sound-issues","l":"Sound Issues"},{"n":"touch-orientation","l":"Touch orientation"},{"n":"wifi-issues","l":"Wifi Issues"}]}],"s":"
"},{"n":"configuration","l":"Configuration","c":false,"o":true,"i":[{"n":"calibrate-and-configure-iptsd","l":"Calibrate and configure iptsd"},{"n":"configuration-through-command-line-parameters","l":"Configuration Through Command Line Parameters"}],"s":"
"},{"n":"development","l":"Development","c":false,"o":true,"i":[{"n":"gui-method-build-bliss-os-14.x","l":"[GUI Method] Build Bliss OS 14.x"},{"n":"build-bliss-os-11.x","l":"Build Bliss OS 11.x"},{"n":"build-bliss-os-15.x","l":"Build bliss os 15.x"},{"n":"build-bliss-os-14.x","l":"Build Bliss OS (v14.x)"},{"n":"contributing-documentation","l":"Contributing Documentation"},{"n":"development-faq","l":"Development FAQ"},{"n":"maintaining-proper-authorship","l":"Maintaining Proper Authorship"},{"n":"porting-linux-drivers","l":"Porting Linux Drivers"},{"n":"what-are-linux-drivers","l":"What are Linux Drivers?"}],"s":"
"},{"n":"code_of_conduct","l":"Code of Conduct","s":"
"}],"search":{"mode":0,"minChars":2,"maxResults":20,"placeholder":"Search","hotkeys":["k"],"noResultsFoundMsg":"Sorry, no results found.","recognizeLanguages":true,"languages":[0],"preload":false},"resources":{"History_Title_Label":"History","History_ClearLink_Label":"Clear","History_NoHistory_Label":"No history items","API_AccessFilter_Label":"Access","API_ParameterSection_Label":"PARAMETERS","API_SignatureSection_Label":"SIGNATURE","API_CopyHint_Label":"Copy","API_CopyNameHint_Label":"Copy name","API_CopyLinkHint_Label":"Copy link","API_CopiedAckHint_Label":"Copied!","API_MoreOverloads_Label":"more","API_MoreDropdownItems_Label":"More","API_OptionalParameter_Label":"optional","API_DefaultParameterValue_Label":"Default value","API_InheritedFilter_Label":"Inherited","Search_Input_Placeholder":"Search","Toc_Contents_Label":"Contents","Toc_RelatedClasses_Label":"Related Classes","History_JustNowTime_Label":"just now","History_AgoTime_Label":"ago","History_YearTime_Label":"y","History_MonthTime_Label":"mo","History_DayTime_Label":"d","History_HourTime_Label":"h","History_MinuteTime_Label":"m","History_SecondTime_Label":"s"}};
+var __DOCS_CONFIG__ = {"id":"/U232UHX5b5fn4Wmg4Qz2k7GFTaHzAFq+5e","key":"ZWGt/boXV98op3jVzssqGvbXIa1Irp3RSRhfH1iCzpY.qI0mp98pqFlzv7OMc9dztQfbkPK7TkWwRU2A7WqCMhTMITbulLXz+wzuFn/6vNPlkr37gy1fY/3yhgpV+Yfb3g.15","base":"/","host":"docs.blissos.org","version":"1.0.0","useRelativePaths":true,"documentName":"index.html","appendDocumentName":false,"trailingSlash":true,"preloadSearch":false,"cacheBustingToken":"3.5.0.762641487064","cacheBustingStrategy":"query","sidebarFilterPlaceholder":"Filter","toolbarFilterPlaceholder":"Filter","showSidebarFilter":true,"filterNotFoundMsg":"No member names found containing the query \"{query}\"","maxHistoryItems":15,"homeIcon":"
","access":[{"value":"public","label":"Public"},{"value":"protected","label":"Protected"}],"toolbarLinks":[{"id":"fields","label":"Fields"},{"id":"properties","label":"Properties"},{"id":"methods","label":"Methods"},{"id":"events","label":"Events"}],"sidebar":[{"n":"/","l":"Welcome","s":"
"},{"n":"installation","l":"Installation","c":false,"o":true,"i":[{"n":"install-in-a-virtual-machine","l":"Install in a Virtual Machine","i":[{"n":"install-in-virtualbox","l":"[deprecated]Bliss OS: How to install Bliss OS on VirtualBox"},{"n":"advanced-qemu-config","l":"Advanced configuration for qemu"},{"n":"install-in-qemu","l":"Bliss OS: How to install Bliss OS on Qemu"}]},{"n":"advanced-installation","l":"Advanced Installation"},{"n":"collecting-bug-reports","l":"Collecting bug reports"},{"n":"install-from-bootable-usb","l":"Install Legacy From Bootable USB"},{"n":"install-on-mac-os","l":"Install on Mac OS"},{"n":"live-boot-bliss-os","l":"Live boot Bliss OS"},{"n":"manual-install-on-linux","l":"Manual Install on Linux"},{"n":"run-from-docker","l":"Run from Docker"},{"n":"syslinux-efi-stub-installation","l":"Syslinux EFI Stub Installation"},{"n":"updating-bliss-os-ag-builds","l":"Updating Bliss OS/AG builds"},{"n":"using-auto-install","l":"Using Auto-Install"},{"n":"using-the-windows-installer","l":"Using the windows installer"}],"s":"
"},{"n":"knowledgebase","l":"Knowledgebase","c":false,"o":true,"i":[{"n":"bliss-bass","l":"Bliss bass","c":false,"i":[{"n":"applications","l":"Applications","c":false,"i":[{"n":"blissethernetmanager","l":"BlissEthernetManager"},{"n":"blisskiosklauncher","l":"Setting Up Bliss Kiosk Launcher"}]},{"n":"interfaces","l":"Interfaces","c":false,"i":[{"n":"power-management-aidl","l":"Power management aidl"}]}]},{"n":"external-threads-and-links","l":"External threads and links","c":false,"i":[{"n":"xda-threads","l":"XDA Threads"}]},{"n":"frequently-asked-questions","l":"Frequently asked questions","c":false,"i":[{"n":"build-filenames","l":"Build Filenames"},{"n":"desktop-mode","l":"Desktop Mode"},{"n":"faq","l":"F.A.Q."},{"n":"hardware-compatibility","l":"Hardware Compatibility"},{"n":"how-to-log","l":"How to Log"},{"n":"keyboard-shortcuts","l":"Keyboard Shortcuts"},{"n":"sandboxing-apps","l":"Sandboxing Apps"},{"n":"vulkan-mode","l":"Vulkan Mode"}]},{"n":"other-bliss-variant","l":"Other Bliss Variant","c":false,"i":[{"n":"surface-builds","l":"BlissOS for Surface devices"},{"n":"go-builds","l":"BlissOS Go"},{"n":"zenith-builds","l":"BlissOS Zenith"}]},{"n":"supreme-gamers-resources-we-like","l":"Supreme gamers resources we like","c":false,"i":[{"n":"advanced-android-x86-installer","l":"Advanced Android-x86 Installer"},{"n":"gearlock","l":"Gearlock"},{"n":"linux-android-x86-installer","l":"Linux Android-x86 Installer"}]},{"n":"troubleshooting","l":"Troubleshooting","c":false,"i":[{"n":"debug-booting","l":"Debug Booting"},{"n":"graphics-troubleshooting","l":"Debug Graphics"},{"n":"edit-grub-from-bliss-install","l":"How to edit grub from your Bliss OS install"},{"n":"how-to-mount-ext-partition-on-boot","l":"How to mount ext partition on boot"},{"n":"how-to-mount-internal-ntfs-partition-on-boot","l":"How to mount internal NTFS partition on boot"},{"n":"microsoft-surface-ipts-gearlock-package","l":"Microsoft Surface IPTS Gearlock Package"},{"n":"not-booting-after-install-on-linux","l":"Not booting after install on Linux"},{"n":"remount-system-as-read-write","l":"Remount system as Read/Write"},{"n":"sound-issues","l":"Sound Issues"},{"n":"touch-orientation","l":"Touch orientation"},{"n":"wifi-issues","l":"Wifi Issues"}]}],"s":"
"},{"n":"configuration","l":"Configuration","c":false,"o":true,"i":[{"n":"calibrate-and-configure-iptsd","l":"Calibrate and configure iptsd"},{"n":"configuration-through-command-line-parameters","l":"Configuration Through Command Line Parameters"}],"s":"
"},{"n":"development","l":"Development","c":false,"o":true,"i":[{"n":"gui-method-build-bliss-os-14.x","l":"[GUI Method] Build Bliss OS 14.x"},{"n":"build-bliss-os-11.x","l":"Build Bliss OS 11.x"},{"n":"build-bliss-os-15.x","l":"Build bliss os 15.x"},{"n":"build-bliss-os-14.x","l":"Build Bliss OS (v14.x)"},{"n":"contributing-documentation","l":"Contributing Documentation"},{"n":"development-faq","l":"Development FAQ"},{"n":"maintaining-proper-authorship","l":"Maintaining Proper Authorship"},{"n":"porting-linux-drivers","l":"Porting Linux Drivers"},{"n":"what-are-linux-drivers","l":"What are Linux Drivers?"}],"s":"
"},{"n":"code_of_conduct","l":"Code of Conduct","s":"
"}],"search":{"mode":0,"minChars":2,"maxResults":20,"placeholder":"Search","hotkeys":["k"],"noResultsFoundMsg":"Sorry, no results found.","recognizeLanguages":true,"languages":[0],"preload":false},"resources":{"History_Title_Label":"History","History_ClearLink_Label":"Clear","History_NoHistory_Label":"No history items","API_AccessFilter_Label":"Access","API_ParameterSection_Label":"PARAMETERS","API_SignatureSection_Label":"SIGNATURE","API_CopyHint_Label":"Copy","API_CopyNameHint_Label":"Copy name","API_CopyLinkHint_Label":"Copy link","API_CopiedAckHint_Label":"Copied!","API_MoreOverloads_Label":"more","API_MoreDropdownItems_Label":"More","API_OptionalParameter_Label":"optional","API_DefaultParameterValue_Label":"Default value","API_InheritedFilter_Label":"Inherited","Search_Input_Placeholder":"Search","Toc_Contents_Label":"Contents","Toc_RelatedClasses_Label":"Related Classes","History_JustNowTime_Label":"just now","History_AgoTime_Label":"ago","History_YearTime_Label":"y","History_MonthTime_Label":"mo","History_DayTime_Label":"d","History_HourTime_Label":"h","History_MinuteTime_Label":"m","History_SecondTime_Label":"s"}};
diff --git a/resources/js/search.json b/resources/js/search.json
index aa910c85..f839680b 100644
--- a/resources/js/search.json
+++ b/resources/js/search.json
@@ -1 +1 @@
-[[{"l":"Welcome to BlissOS Documentation"},{"l":"Table of contents"},{"l":"Install Bliss OS","p":["Live boot Bliss OS","Install From Bootable USB","Install in a Virtual Machine","Install in VirtualBox","Install in Qemu","Advanced QEMU Config","Syslinux EFI Stub Installation","Updating Bliss OS/AG builds","Advanced Installation","Manual Install on Linux","Run from Docker","Install on Mac OS","Using Auto-Install","Using The Windows Installer"]},{"l":"Configuration","p":["Configuration through Command Line Parameters","Calibrate and configure IPTSD"]},{"l":"Development","p":["[GUI Method] Build Bliss OS 14.x","Build Bliss OS 11.x","Build Bliss OS 14.x","Development FAQ","Maintaining Proper Authorship","Contributing Documentation","What are Linux Drivers?","Porting Linux Drivers"]},{"l":"Knowledgebase","p":["FAQ - App Sandboxing","FAQ - Build Filenames","FAQ - Collecting Logs","FAQ - Desktop Mode","FAQ - General","FAQ - Hardware Compatibility","FAQ - Keyboard Shortcuts","FAQ - Vulkan Mode","Resource - Advanced Android-x86 Installer","Resource - Gearlock Recovery","Resource - Linux Installer","Troubleshooting - Boot","Troubleshooting - Graphics","Troubleshooting - Linux Boot","Troubleshooting - Mounting EXT on Boot","Troubleshooting - Remount as RW","Troubleshooting - Sound","Troubleshooting - Surface IPTS Package","Troubleshooting - WiFi","XDA Threads"]}],[{"i":"#","p":["Install Bliss OS in a Virtual Machine of your choice"]},{"l":"Install in a Virtual Machine","p":["This method is incomplete, a work-in-progress. Android in general do not run great in VMs, because they do not have the proper drivers. As such performance is greatly reduced if you use this method. Please only install Bliss OS in VMs for evaluation, and keep in mind that the performance exhibited by Bliss OS in such an environment is not a true representation of actual performance on bare metal. With that in mind, let's get started!","First, make sure your CPU is capable of running VMs. For Intel, it is usually Intel VT-x and VT-d. For AMD, it is usually AMD-V. You may also need IOMMU support, although it is probably not necessary since you won't be passing through GPUs.","Download the latest Bliss OS .iso from our website. Then, download the latest version of VirtualBox, and the latest VirtualBox extension pack. Install both executables.","Once inside VirtualBox, click on \"New.\" For the name, type \"Bliss OS.\" For the type, select Linux, and then Linux 2.6 / 3.x / 4.x (64-bit) for the version. Set memory size to 2048 MB (2 GB) or more. For the disk, accept the default options for the disk type. For the size, set it to 20 GB. VirtualBox should initialize a new virtual machine.","We need to tweak a couple more settings. Click on \"Settings\" on the top bar. Allocate more logical processors in System > Processor. Drag the slider to the right, keeping it inside the green bar, as you want to leave a couple of logical processors for the host operating system. For the display, try allocating all of the VRAM. (128 MB most likely) Enable 3D Acceleration. Click OK to save settings.","Now click on Start. VirtualBox will ask you for the CD image. Click on the folder with the green up arrow, and then select the ISO you downloaded earlier.","Select \"Installation - Install Bliss-OS to harddisk\" Press D to detect devices. Press C to create and modify partitions. If asked, select No for GPT. Select New, Primary, full size, and then make it bootable. Write to disk. Quit. Select the partition and then reformat to ext4. Select Yes to install GRUB. ( On Bliss OS 9.x - 11.x) Select Yes to make the /system directory writable.","[PLEASE NOTE]: Recent versions of Bliss OS require manually extracting the system.img from within the system.sfs, removing the system.sfs afterwards from the installed directory in order to allow the system to be mounted as R/W. Please follow further instructions here for that process: Remount System as Read-Write","At this point the installation should be complete. But when you reboot, you will notice that the screen is completely black with a cursor at the top-left. This is because there is no display drivers for the virtual machine. Reset the instance, edit the boot parameters, and add nomodeset to the end. Bliss OS should then boot fully.","Congratulations! You should have a fully working Bliss OS install in a VM, or at least something that works... even if it may be slow. Again, Android on VM is generally not a good idea and you will get a lot more performance if you install Bliss OS to the actual hardware."]}],[{"l":"Install in VirtualBox","p":["This article is a draft content to describe how to install Bliss OS on VirtualBox. It combines android-x86 VirtualBox howto and our old article:\"Install Bliss OS on a VM ( virtualbox)\"."]},{"l":"Create a new VM","p":["If you have not already created a VirtualBox virtual machine for Bliss OS yet, do so as follows:","Click the \"New\" button, and name your new virtual machine however you like. Set Type to Linux, and Version to Linux 2.6 / 3.x / 4.x. Note that you should choose the appropriate bit type for the version of Bliss OS that you downloaded.","Specify how much RAM will be allocated to your virtual machine when you run it. Android doesn't specify a bare-minimum requirement for memory, just keep in mind what apps you plan on running. 2GB (2048MB) is a good place to start, and you can change this later if you need to.","Create a new Hard disk image which will act as your machine's storage. The recommended starting size of 8GB is enough. Click through the rest of the options for creating your Hard disk.","Your virtual machine has now been created. It still needs to be initially installed at this point."]},{"l":"Settings","p":["Tested on VirtualBox 64-bit for Ubuntu 20.04 with Intel and AMD( Ryzen R7 4800H) processors, version 6.1. Bliss OS version v11.11, 64-bit.","Select your machine, then click the Settings button and refer to the below recommended configuration to make sure your settings match.","[System] Recommended: Processor(s) should be set above 1 if you have more than one virtual processor in your host system. Failure to do so means every single app (like Google Chrome) might crush if you try to use it.","[Display]:","2.1. Optional: Video Memory may be increased beyond the minimum selected automatically. The affects of this are unknown.","2.2 Mandatory: Unless guest additions are installed, change the default VMSVGA to VBoxVGA.","2.3 Optional: Enable 3D Acceleration may be checked. The Linux Guest Additions must ( VirtualBox v6.1+) / may ( VirtualBox v6.0 and below) need to be installed to get any benefit from this.","Failure to do so means you won't even be able to launch Bliss OS in the first place.","[Storage] Find the first \"Empty\" item (this should have an icon of a CD). In the Attributes, click on the CD icon with a small down arrow, and pick \"Choose Optical Virtual Disk File...\". Specify the Bliss OS ISO that you downloaded.","[Audio] Intel HD Audio seems to be natively supported in Bliss OS.","[Network] By default, your installation of Bliss OS will be able to automatically connect to the internet. If not, you can try to enable WiFi in \"Settings/Network & Internet\", and connect to showing VirtWifi. If you do not want to connect to the internet in VirtualBox, uncheck \"Enable Network Adapter\" under the Adapter 1 tab."]},{"l":"Install","p":["Now we can click the start on VirtualBox to start the VM.","When entering installation page, 1. select \"Installation - Install Bliss-OS to harddisk\". 2. Press D to detect devices. 3. Press C to create and modify partitions. If asked, select \"No\" for GPT. 4. Select \"New\", \"Primary\", \"full size\", and then make it bootable. 5. \"Write to disk\". 6. \"Quit\". 7. Select the partition and then reformat to ext4. 8. Select \"Yes\" to install GRUB. 9. Select \"Yes\" to make the /system directory writable.","After than, just closing the installing window, and restart this VM instance, and select \"Advanced Options\" and \"Boot from local device\" to select Bliss OS with different options to start.","To here, you should have a fully working Bliss OS install in a VM, or at least something that works... even if it may be slow. Again, Android on VM is generally not a good idea and you will get a lot more performance if you install Bliss OS to the actual hardware."]}],[{"l":"Advanced configuration for qemu cli","p":["Qemu is a very powerful tool that may be confusing for a lot of people. However when using it we can get some very detailed and custom setups, this page will document some more advanced features that folk may wish to utilize with qemu. The majority of this page will assume running on linux. Many of these will not be compatible with windows. While this guide is oriented towards Android. Many of the same concepts apply to general VM usage.","Many of the concepts on this page will not apply to all users, If you have been linked This document is a document and this warning is still present. Any questions or corrections can be asked and posted on the Bliss OS telegram, Matrix, and Discord groups. Ping @quackdoc@Quack Doc.","This guide is for for qemu's cli. while many concepts still apply, virt-manager/libvirt documentation is being worked on."]},{"l":"Evdev","p":["One of the more useful and easy to implement features of qemu is evdev passthrough. Doing this can enable low latency and a better by using hotkeys to globally toggle device passthrough.","There are two methods of doing this, we can use virtio-input-host and we can attach evdev to virtio-mouse and virtio-keyboard.Using virtio-input-host will give the guest exclusive access to the device, and will implicitly setup the proper device. This may cause bugs, and is likely not what all users would like, however this might be helpful for unique devices that don't fall under traditional inputs, and won't work with usb passthrough.","virtio-input-host is fairly easy to setup and simply add. It does however come at the detriment that you cannot use a hotkey to bind it back to the host without closing the VM. It accepts both eventx device files, as well as works with by-id paths. However the strength of it comes from being able to use any evdev device. This includes gamepads, some multi-touch screens and more.","The below to add a multi-touch device through to the VM.","A minimal example of this would be","The more common option would be attaching evdev devices to virtio-keyboard and virtio-mouse. This will allow us to toggle back and forth between the guest VM and the host OS. We need to attach the below output to qemu corresponding device ids.","A functional example of this would be","By default you can use left and right ctrl together to change whether the device is used by the host or the VM."]},{"l":"Flexible bash scripting","p":["Some people who add and remove options from qemu often may find that the current script setups are more of a hassle to use. However we can set up scripts using arrays instead this can allow users to comment out arguments from the script without breaking script. This is very useful for prototyping as this allows us to more efficiently test and comment out various arguments. This does however pose some issues which will be explained under the booting a physical install section."]},{"l":"VFIO","p":["You may wish to pass a physical PCIe through to the VM. This can be helpful for people looking to make a gaming setup using Bliss, or perhaps more unique setups. Qemu and Crosvm both allow doing this. With libvirt this is unbinding, and binding is handled mostly automatically. You still need to load the vfio module yourself (see below).","This article will assume you have prepared IOMMU for passthrough, there are many guides on how to find your IOMMU grouping. If you have a bad grouping it is typically possible to override them using ACS override. Be warned, this is a potential security risk and could be dangerous for host security. ACS will not be elaborated any further in this and it is totally an At your own risk solution.","First we need to prepare the device(s) we are going to passthrough, the command to achieve this is below. It requires root being done by root, not simply with root permissions. The easiest way to do this is to use su -c. but first we need the pcie function address and the pcie driver. To get this we can use lspci | grep -i vendor to find the function address. We can then use lspci -vvnn -s xx:xx.x to get the pci device driver too. It will be listed under kernel modules: pci_device_driver. After that we need to append the domain to it, for the majority of users it will be 0000:. Below is an example command line.","After we have unmounted the drive we need to bind to vfio. This is done in a similar manner with the command below, however we need to load the vfio module and use the vid:pid of the device. The VID and PID will be printed in lspci -nn xx:xx.x an example output would, in the case below where the vid and pid would be 8086 56a5 be;","Using the above output we would do the below command to bind the DG2 graphics card to VFIO.","If you have multiple GPUs with the same vendor and product IDs, you will need to use same GPU passthrough techniques. Arch wiki's PCI_passthrough page provides a number of possible scripts one can use to make this possible.","This needs to be done for all the devices in the IOMMU group until all of them are bound to VFIO.","You can instead add this to module autoload using your init system, this can be done various ways such as mkinitcpio and systemd, an example of a systemd setup would be;","After the card is loaded into VFIO we can then load it into qemu using the below argument. The second device is because we need to passthrough any additional function devices separately, this include audio and on some gpus USB controllers.","All devices in the iommu group should too be bound to the VM.","It may also be necessary to specify the pcie-root-port device. Below is a small example of this","It is a good idea to explicitly disable attaching any other displays to qemu by passing the arguments. This may or may not be needed."]},{"l":"Booting physical media","p":["Below is an example of booting a physical install where a second drive is mounted to nvme and bliss is installed in the folder called android. However there is a small issue, due to how arrays work under bash, this can complicate how variables and strings work, meaning that sometimes it is better to simply avoid using them in the array, thankfully that does not pose too much issues in the majority of cases."]},{"l":"USB passthrough","p":["In qemu, there are three main ways to achieve USB passthrough. Spice, VFIO and usb-host. When using usb-host we can passthrough either a hub device or a specific usb device. I have typically had poor experience using hub passthrough in the past so I would recommend preferring single device passthrough.","The most simple way to do this is typically the best, simply run lsusb and grab the VID:PID of the device you wish to passthrough, Then use -device usb-host to add it to the VM.","Instead of simply adding -usb we can add specific controllers instead, an example would be.","In some cases it might be more suitable to attach the device using it's address;","In other cases you can use the below command to passthrough via hostbus and host port, which is useful for passing through usb hubs. Finding the appropriate hub or device can be done using lsusb -t","It is always a good idea to append an appropriate ID to the device, in case of a keyboard, simply do id=keyboard in the case of a thumbdrive, you can do id=usb-drive. This is largely preference.","For using Spice,","It will be explained in more depth below, however in the spice client you will need to enable usb-passthrough and select the appropriate device there.","For VFIO,","Simply pass the appropriate USB controller through to the VM using vfio above. Using lsusb -t to locate the controller and lspci can be useful for determining what devices to passthrough.","USB devices can be hotplugged using the Qemu Human Monitor explained below."]},{"i":"low-latency-pipewirejack-audio","l":"Low latency PipeWire/Jack audio","p":["Using qemu, we can instead of using pulse audio backend, use jack. This is very useful since we can use jack for higher quality and lower latency audio, as well as a highly configurable two way audio. This is great because Bliss and other Android x86 operating systems have a quite high base latency.","Using jack you can manage to cut a round trip from 240ms to 200ms. It's important to remember that this is a Round Trip numbers, meaning the time it takes from audio to go from the host to the virtualized microphone, into Android, to the speakers, and back to the host. This is not the android -> host latency, currently this is not something tested. however it could be anywhere from 1/3 of this to 2/3 of this. This will assume using PipeWire since it is the easiest and most convenient option.","Using jack_lsp to list ports we can connect to the ports I am interested are","qemu uses regex to match, so here we want to choose a name that will match the devices we want, but not the extras","If you remove the out.connect-ports=Family,in.connect-ports=USB part of the command line, it will create an output not connected to anything. In this case you could either manually connect ports using helvum or PipeWire direcly, or you could setup a WirePlumber profile to handle automatic connections. however this is far out of scope","We can also do a bit more tuning by setting PIPEWIRE_LATENCY When we do this, we can actually ignore the output qemu tells us when it starts as if we check pw-top we can see that it is indeed running when we check pw-top","However jack is not the only options we have, we also have Alsa output. this is about as direct as you can get automatically outputs to headphones and microphone properly, and is still controlled via PipeWire. however audio quality of it can be greatly dependant on the host PC. so while not recommended you can try it by using -audiodev alsa,id=alsa0 instead of -audiodev jack,id=jack0...","Testing SDL audio output is fine, but is higher latency than Jack so it would be typically not recommended.","As for the emulated audio devices, AC97 is the lowest latency, but may suffer in audio quality. There are multiple other audio devices however at this time I do not have a method for testing latency in them. The recommendation for low latency audio is AC97 but for general use it is -device ich9-intel-hda -device hda-duplex.","This open the doors to advanced audio manipulation and high quality audio from Android. This can be useful for gaming as well as game recording since you could connect to a virtual device which could then be connected to both headphones and OBS.","This also opens the way for high fidelity audio though it is currently not recommended to go above 48000 hz on bliss at this time due to potential audio distorting."]},{"l":"EGL-headless for remote VMs","p":["Egl headless is useful for remote VMs. A remote VM being a virtual machine hosted on a separate machine that the user is connecting from. Much like -display sdl,gl=on or -display spice,gl=on this provides 3D acceleration. However unlike the two previous, this does not open a window on the server. This means you can use spice-app to connect to the VM over a network. It may also have lower preformance then the alternative.","You can use rendernode= to specify the GPU, this can be helpful to select a secondary GPU, or perhaps if you have many VMs running at the same time to spread the load across multiple GPUs.","Note: you can not at the current time use multiple -display arguments, so you will need either spice server, or some other remote graphics solution. (IE. scrcpy)"]},{"l":"Spice","p":["Spice is a method of interacting with VMs that can work both locally and over a network. It supports relatively advanced features such as usb redirection, video compression, and more. There are two ways to add spice to the VM, one for local machine, and one for remote machine. Below is an example of a local machine.","And below this is an example of a remote machine. It's important to remember to setup firewall and/or port forwarding to allow remote connections.","To setup usb redirection you can copy the below block into your config. For each device you want to be able to redirect, you need to add a chardev device and a usb-redir slot. These will let you dynamically change what devices you want to passthrough.","https://www.spice-space.org/spice-user-manual.html"]},{"l":"Human Monitor","p":["Instead of connecting tty to the terminal, we can also connect Qemu Human Monitor to the terminal. This is an interface that allows us to send commands to a running VM in order to interact with it. We can send shutdown and reset signals, add and remove usb and storage devices. As well as more advanced features like resize disks, dump the framebuffer (a sort of over glorified screenshot) and create VM snapshots. It is a very powerful tool and only some of the more common uses will be outlined here.","First thing is to add it to the VM. While with bliss it might be common to use -serial stdio, that will conflict with using qemu human monitor, what we instead want to use is -monitor stdio. If you need both, we can use -serial mon:stdio which will multiplex the serial connection and the qemu human monitor. You can swap between the two using CTRL + a then press c. That will swap between the serial and the human monitor.","When using spice, the human monitor will already be attached to it, so do not add commands to attach human monitor to qemu itself.","The other option you have is to connect either the serial connection or the monitor connection to a socket, then interfacing with it over said socket. However most people will likely not use this route. It is therefore recommended to simply use;","However a short list of examples alternatives are below, there are more options.","Now that we have the human monitor attached to the VM, we can get to some of the commands we can do with it. Below will be some commands with a brief writeup, to learn more about how to use the command read the link below;","https://qemu-project.gitlab.io/qemu/system/monitor.html"]},{"l":"Disk Optimization","p":["There is a LOT we can do for disk optimization! This section will be as condensed as possible while still giving you a good idea at what these features are doing. Because of this do not expect this section to be as clear as the other sections.Because there is a lot we need to cover here.","NOTE: If you want to run many VMs off of a single drive, or an array, your considerations may be very different and some of these will not apply for you! This section is written based on the assumption that one, or maybe a couple VMs are being run on the computer."]},{"l":"Qcow2 vs raw image","p":["When it comes to whether or not you should use qcow2 vs raw image, this really comes down to what you as a user want out of the images. First talking about performance. Raw vs Qcow2, under normal circumstances, should typically have similar performance. However, Qcow2 can certainly be slow under the right (or perhaps better put wrong) circumstances.","If you want a simple answer to the question \"Which format will give me the best performance?'' The answer is a raw image. If you don't want any advanced features or configuration like compression or snapshots, you can skip the rest of the disk section."]},{"l":"Preallocation","p":["Preallocation is put simply, how the VM decides to assign storage blocks when no data is actually inside of them. with preallocation=none no data is pre assigned. this means that the disk image is very small, and will grow as more data gets written to it. when you choose metadata it pre allocates space for metadata, this means an empty VM disk will take up more space then one with none.","In most cases, the user will probably just want metadata. as it gives the best performance to space and features. falloc and full preallocation will cause the VM to use up more space. however in accordance with the chart below, performance goes up when you go down the chain. But you do start to lose some features, as full will cause snapshots to no longer work."]},{"l":"Compression","p":["Using compression to save space on your image can be a very valuable tool. while there are multiple ways to do this, but the focus of this will be on using qemu-img's qcow2 compression, you can simply run qemu-img create -f qcow2 -o compression_type=zstd disk.qcow2 10G and this will create a zstd compressed disk image for you to use."]},{"l":"Cache Modes","p":["Qemu supports a variety of disk write cache modes. These cache modes can be changed to tweak I/O speed below are the ones qemu support, See the link below for an explanation on these. Using none will essentially be the best performance option.","https://documentation.suse.com/sles/12-SP4/html/SLES-all/cha-cachemodes.html"]},{"l":"Custom cache size","p":["With qemu we can set both cache size and l2 cache size","...disk.qcow2,cache-size=16M","...disk.qcow2,l2-cache-size=4M where 1M is good for 8Gb of random R/W. Areasize / (clustersize / 8) where default cluster size is 64kb. and area size is the total ammount of space you want cache to cover. 1/8th of 64kb is a nice 8kb.","In this example we can say we want 16gb of r/w headroom, we do 16gb / 8kb. An easier way to calculate this by hand would be scientific notation. This would be 32x10^9 / 8x10^3 = 4x10^6 = 4mb","Try increasing cluster size instead qemu-img create -f qcow2 -o cluster_size=2M.","Try mixing 2m cluster and metadata for a good blend of preformance!"]},{"l":"Backups and snapshots","p":["Utilizing snapshots is a key feature in doing development, as well as making sure that any downtime is minimal. This is particularly useful for preventing a corruption inside of the machine from causing a re-install.","There are two main ways of doing this, you can create a full backup of the drive. This is as simple as doing rclone. This does however waste a lot of space. What we can do instead is use qemu-snapshot.","Qemu-snapshot redirects the writes to a new image, so that you can save space. say you have disk.qcow2 you can run the command qemu-img create -f qcow2 -b disk.qcow2 disk-snap1.qcow2 and that will create a new image. Now you modify qemu to use disk-snap1.qcow2 it will read from disk.qcow2 but will never write to it. All modifications made are made in disk-snap1.qcow2. and to revert the snapshot, you can simply delete the disk-snap1.qcow2.","Another use of this is to do qemu-img create -f qcow2 -b base.qcow2 vm1.qcow2&& qemu-img create -f qcow2 -b base.qcow2 vm2.qcow2. by making two separate snapshots, we can now run multiple VMs each with their own unique writable disk, that is based on the base.qcow2. this is great for running multiple VMs without needing to waste space and setup time. REMEMBER writing to the base disk will corrupt the snapshots. It's a wise idea to change the permissions of the base disk to read only, this prevents user error. Even professionals with many hours can slip up and accidentally make an error. Remember to practice safe VM handling.","The above paragraph is about creating external snapshots which is great for when the VM is off, and should be done when you wish to create a new VM. However qemu also supports internal snapshots and live snapshots. The snapshots work internally in the single qcow2 (or qed) image. It may not be as flexible, however it is bother faster, and for many people more convenient and nice to use internal snapshots.","Using the human monitor above it is shown the commands savevm loadvm info snapshots these can be used to save, load and view the current snapshots available. Live snapshots save the entire state of the cpu, devices, Ram, as well as the entire disk contents, so the live snapshots can be a good amount larger. It is very akin to using an emulator \"save state\".","Removable devices can sometimes cause issues, so it's preferred to disconnect any before taking a snapshot and before loading one. However as long as all the devices are there when the snapshot is made and loaded it will be fine."]},{"l":"full device passthrough","p":["For passing storage devices to qemu there are multiple ways of doing so. To pass a sata controller, the most typical way of doing this will be via pci passthrough. You can accomplish this with the vfio instructions listed previously.","As for Nvme devices, you can actually do something similar, you can use vfio, however a better way of doing it would be to actually use qemu's built in functionality for this listed below","You can also passthrough raw block devices or better known as partition passthrough. you can pass it through a lot like you could with a standard file, an example is given below"]},{"l":"IoThread","p":["IO threads can help both raw and qcow2 when using virtio drives"]},{"i":"erofs-to-sfs-and-the-other-way-around","l":"EroFS to SFS and the other way around.","p":["Bliss is currently shipping with SquashFS or EroFS. EroFS has the best raw read speed of the supported read only filesystems. however it has a significant compromise in being the compression. EroFS only supports LZMA and LZ4 compression. LZMA is quite slow, and LZ4 doesn't offer great compression ratios.","So there are two reasons why you would want to recompress system.img using SquashFS or EroFS. The first one being wanting to simply shrink the the size of system.img.","if you have an eroFS image and want to compress it further, you may want to convert it to an SquashFS image. Likewise, if you have an SFS image, you might be better suited to convert it to EroFS if you want better performance if you are willing to sacrifice a bit of storage space.","If you wanted to keep using EroFS but use the slower but best in class compression LZMA, you could use the below sample."]},{"i":"qa-about-qemus-drives","l":"Q&A about qemu's drives","p":["https://events19.lfasiallc.com/wp-content/uploads/2017/11/Storage-Performance-Tuning-for-FAST-Virtual-Machines_Fam-Zheng.pdf"]},{"l":"Finishing Notes","p":["Handling multiple VMs efficiently can be a complicated topic, and is largely out of scope for this guide. This bit is just a few tips to make running more than a couple VMs a better experience. This would be a stopgap between a more professional solution such as proxmox or a libvirt. This is just a rough guideline, and may not apply across the board or when you scale up.","When installing Bliss, It might be a good idea to break up the Disks, you only need one system disks for the VMs if it's read only. This can save many gigabytes of data storage, and increase storage performance across the storage of any potentially affected drives.","Another good idea is to consider what VMs need persistent memory and which ones don't. If you are running many VMs at once, whether it be for a cloud solution or a more tailored setup, you may find that you don't want many, or even any of the VMs to retain any modifications to them.","It is highly recommend reading the free redhat docs on setting up and tuning VMs if you need more than what this guide offers. It will be a lot of reading. It will however be more valuable than most resources you can freely find on the internet. It should be the first stop for anyone wanting to actually learn more and implement these kinds of setups for yourself.","The next freely accessible resource is the oVirt forums, documentation, and most importantly Mailing list. oVirt is an enterprise grade solution built upon libvirt so many of the solutions and concepts will directly apply when using libvirt, and can be used to gain a further understanding of VM infrastructure in general.","https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_tuning_and_optimization_guide/index"]}],[{"l":"Install with Qemu Script","p":["This article is a guide to install Android Generic builds on Qemu. Bliss 14 at the current moment does not work. Gearlock causes resizefs errors that do not occur in the current Project Sakura build. There is a version of Bliss 11.13 that does have a working Gearlock in the BLISS OS telegram group.","Also tested is AOSP 12. with AOSP 12 you may need to boot with hwcomposer.drm to get it to work properly when using virgl graphics. currently default boot does not work, and while using gbm mesa, the android UI crashes when a mouse is drawn. so while a keyboard works. no mouse control even with a real mouse passed through to the VM. this is not an issue when using hwcomposer.drm. I recommend duplicating or editing the hwcompser.drm entry, remove 'DEBUG=2' from it. as it will allow usage as normal."]},{"l":"Background","p":["Qemu while simple in use, can be complicated to understand for beginners. This is because Qemu has a LOT of options for customization, many of which are useful, but more so that are not.","Qemu on windows as of time of writing this will NOT work on bliss 14. but may work on bliss 11. this is due to lack of software rendering on bliss 14. assuming Gearlock issues get fixed. in the mean time, use Project Sakura OS.","If you wish to use this guide on windows 10 or above, It may be possible to use WSL, however to get Qemu KVM support on WSL you will need a custom kernel. Another possible method is to use an unofficial patch from the qemu-3dfx project to get virgl working on windows. but at this current time. it has not been tested with any android generic project."]},{"i":"make-the-image","l":"Make the image.","p":["When you have Qemu installed be it on Linux or windows, you will have installed a plethora of Qemu related tools. the tool we need for this is qemu-img, Navigate to the folder you want your image installed in and run the following command.","qemu-img create -f qcow2 Bliss14.qcow2 20G","Breaking this down a little bit running qemu-img create is used to tell the program we want to create.","-f qcow2 is used to tell it we want to create the image using qcow2 format. qemu-img supports many formats so we want to specify this one.","Bliss14.qcow2 is the name of the image","20G is the image size."]},{"i":"make-a-script-to-run-the-vm","l":"Make a script to run the VM.","p":["Below is a sample bash script used to run Bliss14 in a Qemu VM","If you don't want an in-depth explanation, you can skip the next section, Just make sure to replace -drive and -cdrom with the proper disk image, and cdrom image for your use."]},{"l":"Explanation","p":["-audiodev pa,id=snd0 -device AC97,audiodev=snd0 this is needed to add audio to the VM. --audiodev pa,id=snd0 is used to create a pulseaudio backend with the id of snd0. this is important as we then use -device AC97,audiodev=snd0 to create an emulated AC97 audio device and attach it to the audiodev we created just before.","-bios /usr/share/ovmf/x64/OVMF.fd \\ is needed to tell Qemu to boot using UEFI, which is necessary as right now there is a bug that prevents android-generic based roms from being installed when in legacy mode. It is important to note that the location of this can vary depending on the host OS.","-cdrom images/Bliss-v11.iso \\ Just mount the iso for bliss, while we could use virtio driver for this, there is no real need to, because it's only use is installing the OS, this can be removed when the VM is installed","-cpu host This tells Qemu what CPU it should be trying telling the guest it is. Generally it is the preferred option. However in case you start to get instability -cpu qemu64 may be the option you need as it presents a very bare bones cpu to the VM. see qemu-cpu-models of the Qemu docs to learn more.","-device qemu-xhci,id=xhci tells Qemu what USB version to use, no need to change this","-device virtio-keyboard is for keyboard, no need to change anything here, usb-kbd also exists for using emulated keyboard instead.","-device virtio-tablet is one of two options for mouse capture the other being -device virtio-mouse using Tablet will allow you to use Qemu as if it were any other app, using virtio-mouse on the other hand will capture the mouse, and lock it to the VM. and to free it you will need to click ctrl+alt to free it. You may use usb-mouse or usb-tablet to use a emulated mouse and tablet instead of the paravirtualized ones. which incurs a very minor preformance hit. but also a measurable latency one.","-device virtio-vga-gl this is needed for graphics acceleration, and while you can add a plethora of arguments, none are really beneficial at this time.","-display sdl,gl=on This is used for the display, there are three main options here -display sdl,gl=on display gtk.sdl-on and -display spice-app,gl=on The difference between these are some features. each one has pros and cons, feel free to experiment. Though do take note that even if you close the VM's window with -display spice-app,gl=on the VM will still be running, you will need to kill it from the terminal.","-drive file=disks/bliss14-k54-gapps.qcow2,if=virtio \\ is how we mount the disk. Using this method instead of -hda lets us use virtio driver instead of emulated driver, giving us greater performance in the VM.","-enable-kvm tells Qemu to use KVM hypervisor, this is how we get near native CPU performance from our VM","-m 4096 -smp 4 tells Qemu How much ram to use, and how many cores to add the the VM","-M q35 This tells Qemu what Machine type to run as, we need to specify this as i440fx will not work it is simple too old.","-machine vmport=off \\ this option turns of vmware I/O emulation. this has caused me some bugs in the past, so I leave it off.","-net nic,model=virtio-net-pci -net user,hostfwd=tcp::4444-:5555 This really long command is the network command, -net nic,model=virtio-net-pci is what is used to add the network device to the guest in which case we are using virtio drivers again for best performance. -net user tells Qemu how to pass the network through and the argument hostfwd=tcp::4444-:5555 forwards port 4444 and port 5555 together, meaning if we open another terminal and type adb connect localhost:4444 we can get an adb connection to the VM.","-usb is used to tell Qemu to add a USB controller, no real need to give it any additional arguments","qemu-system-x86_64 is used to launch the program, there are various other commands that can launch different versions of Qemu, but this is the one we want in the majority of cases.","While this looks a little complicated, when we break this down we can see that it isn't. we are just telling Qemu what we want our virtual machine to have attached to it. if you don"]},{"l":"Install","p":["The rest of the installation is the same as real hardware. You should be able to proceed as normal."]},{"l":"Known Issues","p":["Currently we cannot properly set resolution using qemu and virgl. Because of this we need to manually edit the grub file in the VM to do so. There are a plethora of ways to do this. However the easiest is to use qemu-nbd to manually edit the grub entry and use video=1920x1080 to manually set resoltuon to 1080p. Change this value to a resolution that suits your needs.","Qemu does not currently support vulkan acceleration. While there was a work in progress patch that had support. It has not made it into qemu yet, nor does it seem like it will anytime soon. You may use physical gpu passthrough to get around this issue.","Qemu does not currently support video decode/encode acceleration. There is no news when this might be availible in qemu. You may use physical gpu passthrough to get around this issue."]},{"l":"Additional customizations","p":["Qemu is an incredibly powerful tool. this quick guide barely scratches the surface of some of the advanced customizations that are possible. if you are looking for more advanced features to step up your VM. To make it closer to a hardware install. Here are some potential further customizations that are possible with Qemu.","USB passthrough","EVDEV usb+mouse passthrough for easy switching","PCIe passthrough","egl-headless for remote VM's with graphics acceleration","emulate USB storage device","It may also be possible to use multiple virtual monitors, though this has not yet been tested.","This is all possible using virt-manager, or any other libvirt solution given they too support it. no guide has been written up for it yet."]}],[{"l":"Advanced Installation","p":["This is only for advanced users. For regular users, please visit our main Installation Guide found here."]},{"i":"custom-install---bliss-os-8x10x11x-uefiesp-64-bit","l":"Custom Install - Bliss OS 8.x/10.x/11.x UEFI/ESP (64-bit)","p":["Just as a reminder, Team Bliss is NOT responsible for any damage caused by this guide. By continuing, you automatically agree to these terms."]},{"i":"part-1---mounting-your-uefiesp-partition","l":"Part 1 - Mounting Your UEFI/ESP Partition","p":["You will want to make sure you can view hidden and system files in Explorer options. Once you do that, hit the start menu, and type in cmd. Once \"Command Prompt\" shows up, right click on it and choose \"Open as administrator\"."]},{"i":"cmd-is-not-showing-up-what-should-i-do","l":"cmd is not showing up, what should I do?","p":["Press the Windows key and the R key to bring up the \"Run...\" dialog. Type in cmd, and then press Ctrl-Shift-Enter. Press \"Yes\" on the UAC popup.","Run the following:","Then check to see if it is mounted already. Run \"Task Manager\" by either","Pressing Ctrl-Alt-Del and then clicking on \"Task Manager\", or","Pressing Ctrl-Shift-Esc","Click on \"File\", \"Run new task\", \"Browse\", \"This computer\", and SYSTEM (X or type in X: in the filepath bar. If you cannot access X:, then that could mean one of three things.","You have an ESP setup (follow the installation method below)","You have a legacy MBR setup","Your setup has a custom boot sequence"]},{"i":"part-1-alternate---esp-setup","l":"Part 1 (alternate) - ESP setup","p":["Windows 10 sometimes has an EFI partition already mounted under drive letter Z:, hidden. A very quick and easy way to access the ESP (EFI System Partition) in Windows 10 without using the command line is to start \"Task Manager\" (check above if you forgot the steps), and then click on \"File\", \"Run new task\", \"Browse\", \"This computer\", and SYSTEM (Z or type in Z: in the filepath bar).","Now go to boot/grub/grub.cfg and edit it accordingly with Notepad++ or another text editor. Save the file and your're ready to go!"]},{"i":"part-1-alternate---killing-the-explorerexe","l":"Part 1 (alternate) - Killing the explorer.exe","p":["Run cmd as admin and enter the following command:","This will kill the explorer.exe process - don't be surprised if it shows a warning. This step is sometimes required, because by default explorer.exe is ran by the currently logged in user, and it has to be run by the \"Administrator\" in order to view the mounted system drive. The \"Administrator\" account is not the same as an account with administrative privileges.","This will mount the system partition that usually consists of UEFI related files. X: is the letter of the drive - you can use whatever letter you want, but it has to be free for assignment. Then type:","This will run explorer as \"Administrator\" and will allow you to browse the mounted system partition.","The above may not work for all devices, as some handle UEFI differently."]},{"i":"part-2---uefi-installation","l":"Part 2 - UEFI installation","p":["Let's start by downloading the required files. Here is a customized UEFI boot for 32/64-bit machines.","Please note that if you came from our Nougat builds to our Bliss OS 8.x builds, you will have to edit the grub.cfg.","If you are using Bliss OS 8.x/10.x, please use the grub entry below as a guide:","If you are installing on ext3/ ext4, due to a bug in the install you will have to use the following grub entry setup:","Now that we have the partition mounted, we can copy that BOOT directory to your UEFI partition using explorer as the Administrator or by using the \"New Task\" dialog from Task Manager. (See above if you forgot the steps!) Once it is copied, go back to the Administrator cmd prompt and type:","or if you used Z:, type:","This will dismount the UEFI/ESP volume for safe reboot. We then suggest you use EasyUEFI here to create the UEFI boot entry. Open the app, and create a new entry. Select your UEFI partition, and in the \"File\" Path, click \"Browse\" and use the file manager window to browse to your BOOT/grub/grubx64.efi file. Click OK, and then choose the new grub entry and move it to the top. Make sure Secure Boot is turned off or else it likely will just boot back to Windows."]},{"i":"part-4---the-manual-blissification-of-your-pc","l":"Part 4 - The Manual Blissification of Your PC","p":["To do a manual \"Wubi like\" install of Bliss OS after you install the UEFI entry, you will need to open the Bliss OS .iso/.img with 7zip, and then drag all the .img& .sfs files to C:/android-x86 or whatever your target drive is (make sure your grub entries match where you are putting these). Then create your data.img. We suggest using a tool like RMXtools (use version 1.7) from XDA to create it. Check the tool's thread for detailed instructions. You will want to create your data.img inside that android-x86 folder.","You can now reboot if you have installed the custom UEFI entry right and selected it using EasyUEFI. You should boot right to the Android-x86 grub theme. There, you can use up and down to select, and return to boot that entry. You can also hit e to edit the selected entry. You will want to pay attention to which entry you select, since there will be one for Bliss-x86(32bit) and one or Bliss-x86_64(64bit)."]}],[{"l":"Collecting bug reports"},{"l":"Collecting Bug Reports","p":["This process is mostly the same as Android-x86 builds, but with a few additions that help things along. If you need to collect logs in order to submit a bug report, then the first thing you will want to do is reboot your Bliss OS install using debug mode. We do this through Grub with the command:","Once your device starts to boot, you will be presented with a root console, just before the Android systems init process starts. From here, you can use root commands to remount as read/write, or do basic filesystem and kernel debugging. In order to proceed to Android, you will need to type 'exit' followed by Return twice in the console, and the system will continue to boot.","While in debug mode, there are logs and dmesg found in both /tmp/ as well as /data/. You will need those logs to submit a bug report."]}],[{"i":"#","p":["Install Bliss OS from bootable USB Installer"]},{"l":"Install Legacy From Bootable USB"},{"l":"Introduction","p":["This is the current recommended method for beginners!","We recommend beginners to use this method as it is the least error-prone and non-destructive. The following instructions were adapted from the Android-x86 project, so some of the images are from them. To look at Android-x86's original installation guide, click here."]},{"l":"Download Bliss OS","p":["You can download a stable Bliss OS build from the website here."]},{"l":"Install Bliss OS","p":["If you are looking for a GUI based installer for Windows, we do include one in some of the .ISO's we produce, and we also support the Supreme-Gamers Advanced Android-x86 Installer. We also have a second option for Windows install that can be found on our repo here: Android-x86 UEFI Installer","When booting into the installer, choose \"Installation - Install Android-x86 to harddisk\":","Booting into the installer","Once the installer boots, you will be asked to select the target drive. Choose the NTFS drive that houses your current Windows install. You do not need a separate partition, as the installer will create an image on your Windows partition.","Choose partition","Choose \"Do not re-format\" on the next screen. It is important that you choose \"Do not re-format\", as any other option will cause the installer to continue with the \"Bootable installation method\", which will result in permanent data loss, including your Windows partition!","Do not reformat","Choose \"Yes\" when prompted about the GRUB bootloader:","Install GRUB","The installer will ask whether or not you want to make the system partition read/write-able. If you want to root your installation, you will choose \"Yes\" here. Otherwise, choose \"No.\"","Root installation","The installer will begin to write the changes to the disk. This will take some time. Go grab a coffee!","Grab a coffee","Then the installer will ask you how much space you want to allocate for the data image. Most users choose 8 GB, 16 GB, or 32 GB.","Congratulations! You should now have a functional dual-boot with Bliss OS!"]},{"l":"Install EFI From Bootable USB"},{"i":"download-bliss-os-1","l":"Download Bliss OS","p":["You can download a stable Bliss OS build by clicking on the link here, non-stable builds can be found here."]},{"i":"install-bliss-os-1","l":"Install Bliss OS","p":["And just like with legacy, The installer will begin to write the changes to the disk. This will take some time. Go grab another coffee!","Booting into the uefi installer","Congratulations! You should now have a functional UEFI-boot with Bliss OS!","Create a [new ] partition","First create the EFI partition, this is the partition that is used to install the bootloader.","for \"Size in Sectors\" all we need to do is enter +512M","Format Drive p1 Format Drive p2","Grab a coffee","If you are looking for a GUI based installer for Windows, we do include one in some of the .ISO's we produce, and we also support the Supreme-Gamers Advanced Android-x86 Installer. We also have a second option for Windows install that can be found on our repo here: Android-x86 UEFI Installer","In the next screen, we need to make two partiitons for this to work, as Bliss needs to install a bootloader to boot to. if you have a pre-existing install of linux, this step may be unnecessary.","Install Grub","Lastly we click [WRITE ] and [QUIT ]","leave First Sector default (Just press enter)","Next we need to make the second partition this is the partition that the bulk of android will be installed to.","Now that we have the drives partitioned, we can start to install android. Select the ANDROID partition that we have made before, and format it as ext4. this is the recomended format unless windows compatibility is need, in that case select NTFS. and click < Yes > on the next screen","Once the installer boots, you will be asked to select the target drive. You will need to choose what drive to install it too, this could be a pre-existing install of something, or a new drive, shown will be a new drive. you will need to select \"Create/Modify partitions\"","Partitioned","Partitioning p1","Partitioning p2","press down until the largest chunk of free space is slected, and click [NEW ]","Root installation","Set type as ef00","The installer will ask whether or not you want to make the system partition read/write-able. If you want to root your installation, you will choose \"Yes\" here. Otherwise, choose \"No.\"","The installer will procede to format and install android, you will then be prompted to install EFI GRUB2. we need to accept that, unless you have a pre-existing grub or other bootloader install","WARNING THIS WILL DELETE ANY DATA ON THE DRIVE","We can leave everything default. Although a name is not necesary we can call it ANDROID.","We don't necessairly need to name this partition, but it is best practice to name it EFI","When booting into the installer, choose \"Android-x86 ... Installation\":"]}],[{"l":"Install on Mac OS"},{"i":"triple-boot-macos-windows-and-bliss-os","l":"Triple boot macOS, Windows and Bliss OS","p":["(Thanks to @lconstantin for this guide)","Also, because you chose to install GRUB, rEFInd will get replaced with GRUB as the default boot manager on the EFI partition at this stage. You can choose not to install GRUB during installation and manually create a boot entry for Bliss in rEFInd which will not be explained in this guide.","Alternative: It should be possible to skip the Windows installation. Read at the end.","Alternative: It should be possible to skip the Windows installation. You can boot into macOS recovery and use the Disk Utility from there to resize the macOS partition and create a new partition for BlissOS formatted as FAT32 (macOS does not support many filesystems natively). You can then create the BlissOS bootable stick from macOS using UNetbootin instead of Rufus and also make sure you download rEFInd, unpack it and copy its directory to the stick. Then boot into recovery again, install rEFInd, boot into rEFInd to start the BlissOS installation. You can reformat the FAT32 partition as NTFS during the BlissOS installation and then follow all the steps. Install Grub. Go into recovery again, install rEFInd again and you're done.","At this stage if you reboot your system you will only see GRUB and you will only be able to boot into the Bliss OS installation. You need to reinstall rEFInd to restore booting into macOS and Windows. (In reality rEFInd is still there on the EFI partition, but not the default option anymore). Luckily you still have the rEFInd directory on your BlissOS bootable stick, so repeat the instructions from step 9 again to boot into macOS recovery, open terminal, navigate to the USB stick and run the ./refind-install script again. This will restore rEFInd as the default boot manager with all the options it had (the previous configuration doesn't get replaced.)","BACKUP ALL DATA with TimeMachine","Boot into Windows and download a) the latest version of Bliss OS, b) the latest version of the rEFInd boot manager and c) Rufus, a program for creating bootable USB sticks.","cd / cd Volumes cd BLISS-xx (the name of the USB stick) cd refind-xx (the name of the refind directory on the stick) ./refind-install","Choose the install option and go through the normal process ( detailed here). Select either the Windows partition or the new partition you created for Bliss (my case). Do not reformat. Choose YES when asked to install GRUB (this will replace rEFInd temporarily). Create the BlissOS data image with the size you want.","Disable FileVault (disk encryption in macOS). This can take a long time (hours) if you already have it turned on and sometimes it can result in a locked state where the filesystem is not fully decrypted and the option to turn FileVault on or off is greyed out. Recovering from this state might require wiping the entire SSD from macOS recovery. This happened to me and I couldn't find a solution. Apparently it's a fairly common problem as I found many reports online.","Download the Windows 10 installation ISO from Microsoft's website. It’s freely available.","However, note that rEFInd does not install an NTFS driver by default and does not install an ext3/4 driver either unless a Linux installation is present on the disk when rEFInd is installed. There are ways to fix this and include drivers (see rEFInd documentation on drivers), but it's easier to just use rEFInd to start GRUB which will boot Bliss regardless of whether it's on an NTFS or ext4 partition.","Install Rufus and create a bootable stick for Bliss OS using the ISO you downloaded earlier.","Launch Boot Camp Assistant and follow the instructions to install Windows using the downloaded ISO. The process will allow you to resize the macOS partition and will create the Windows partition called BOOTCAMP for you. When you choose the size of the BOOTCAMP partition please account for the extra space you will need for Bliss OS including its data. I wanted 32GB for the Bliss OS data image so I accounted for 50GB extra for BlissOS when choosing the size of the BOOTCAMP partition.","Note: I have not tried this multiboot process with FileVault enabled because I read FileVault does not play nicely with multiboot so I just decided to disable FileVault. I don't know if it might actually work with FileVault on, but probably not.","Note: Once Boot Camp is done installing Windows you will be able to boot into it and select it as boot option when the Mac starts up. At this point the system will still use Apple's bootloader, which by design is capable of booting Windows too.","Notes: If you created a separate NTFS partition, you could choose to format it as ext3/4 during the Bliss OS installation. If you choose this option the installer will no longer ask you to create a data image.","OPTIONAL: You have the option to either install Bliss OS on the same partition as Windows or you can resize the Windows partition using the Disk Manager in Windows and create a new partition for Bliss OS. I chose to resize and create a new partition of 50GB for Bliss OS and I formatted this new partition as NTFS.","Reboot and now you will see the rEFInd boot screen with multiple options for booting into macOS and Windows that will be automatically detected. Note: For macOS Big Sur and later the option that works is the one that says \"Boot macOS from Preboot.\" You can hide the other option by selecting it and pressing the - (minus) key. For Windows it’s the Boot with EFI option. You can hide the rest. You can test that booting into both systems works at this stage before continuing.","Reboot the Mac and keep COMMAND + R pressed during the booting process. This will boot into macOS recovery. Go to Applications > Utilities in the top bar and choose Terminal. This will open a terminal shell. Type:","rEFInd will also provide you with an option to boot into the Bliss OS stick if it’s plugged in. This will launch the GRUB bootloader that comes with Bliss OS and will show you multiple options: to start Bliss OS Live which can be used to test if Bliss works on your system or to install the OS to disk.","Remove the USB stick and reboot your system. You will now see the rEFInd screen again with options to boot into macOS, Windows and multiple options for BlissOS, which will be detected with a Linux icon. Choose the option that says Boot with /EFI/Android/grubx64 and you can hide the rest. This will launch the familiar GRUB screen with all the normal BlissOS boot options.","This will launch the rEFInd installation script and will install the boot manager.","Unpack the rEFInd zip and copy its directory to the Bliss OS bootable stick. DON’T SKIP."]}],[{"i":"#","p":["Try out Bliss OS before installation via live boot"]},{"l":"Live boot Bliss OS"},{"l":"Downloading Rufus","p":["Giving our Android builds a try on your PC is pretty simple and straight forward. To start out, let's head over to https://rufus.ie and download the latest version of Rufus (I use the portable version)","Download Rufus"]},{"l":"Using Rufus to flash your USB drive","p":["Once downloaded, plug in your USB drive, and launch Rufus and give it permissions to make changes to your device. Then press the \" Select\" button to browse for the .iso or .img file.","Using Rufus to flash the USB","Select the .iso by pressing the \" Open\" button on that dialog:","Selecting the iso","Once selected, keep all the rest of the settings as default and click the Start button:","Start flashing the USB using Rufus","It will then show an ISOHybrid dialog, we will want to select .iso mode:","Select ISO mode","There might also be a notice about Syslinux, asking to download something. Select \" Yes\" and it will then continue.","Notice, select yes","Once that is done, it may ask you to \" OK\" the cleaning of your USB drive. Please select \" OK\"","Clean USB, select OK","Rufus will then start to write the USB drive with what is on the Android .iso you downloaded. This process may take some time."]},{"l":"Rebooting from windows into your USB drive","p":["From Windows, hit the Start Button > Settings > Update & Security > Recovery and select the Restart Now button under Advanced Startup.","Advanced startup","This will start to restart your PC, and show a Blue screen (Metro bootloader) where you will want to select \"Use a Device\" Then on the next screen, your USB Drive should show up as either Bliss OS, Android OS or something to that effect. Select that, and it will reboot to grub and let you select the boot options to Live Boot Android from there."]}],[{"l":"Manual Install on Linux"},{"l":"Installation","p":["Create a directory at / as /blissos","Extract initrd.img, ramdisk.img, kernel and system.* from your desired blissOS ISO into the /blissos directory. ramdisk.img can be ignored for Android 10 and newer as it is already merged into the system (system-as-root).","Make a directory called /blissos/data. This will only work for ext4 filesystems, for NTFS and other filesystems or if you are having bootloop you need data.img, can be created with make_ext4fs.","Create a new grub entry with this the following code:"]},{"i":"example-for-making-a-8gb-image","l":"Example for making a 8gb image:","p":["Alternatively, one can use truncate","Here are some additional tips for installing BlissOS on Linux:","Do not try to install Bliss OS on exotic linux filesystems such ZFS, XFS, BtrFS, currently not every filesystem has built-in support in the Bliss OS kernel, ext4 is supported. If you install it on an unsupported filesystem, it will be stuck at Detecting Android-x86.... You will probably have to compile your own kernel and use a modified initrd.img to boot from other filesystems.","If you want read-write /system or being able to make changes to the system, simply extract system.img from system.img using a tool that support Zstandard compressed squashFS images. It can also be mounted.","For data.img, it would be good to repair/check filesystem regularly using command e2fsck -f data.img.","!!ATTENTION!! Bliss OS 14.3 and below versions also support Jaxparrow's Android-x86 Installer for Linux. Source can be found here: https://github.com/jaxparrow07/Androidx86-Installer-Linux"]}],[{"l":"Run from Docker","p":["We have gained support for running our images from Docker thanks to @sickcodes and his Dock-Droid project.","Our stable Android 9 based images are default, but you can load up a specific image as well (helpful for testing in a development environment)"]},{"i":"exerpt-below-taken-from-httpsgithubcomsickcodesdock-droid","l":"Exerpt below taken from: https://github.com/sickcodes/dock-droid"},{"l":"Initial setup","p":["Before you do anything else, you will need to turn on hardware virtualization in your BIOS. Precisely how will depend on your particular machine (and BIOS), but it should be straightforward.","Then, you'll need QEMU and some other dependencies on your host:","Then, enable libvirt and load the KVM kernel module:"]},{"l":"Quick Start"},{"i":"run-bliss-os-11x-image-httpsimgshieldsiodockerimage-sizesickcodesdock-droidlatestlabelsickcodes2fdock-droid3alatest","l":"Run Bliss OS 11.x Image https://img.shields.io/docker/image-size/sickcodes/dock-droid/latest?label=sickcodes%2Fdock-droid%3Alatest","p":["Increase RAM by adding this line: -e RAM=4 \\","Want to use your WebCam and Audio too?","v4l2-ctl --list-devices","lsusb to get the hostbus and hostaddr","Would be -device usb-host,hostbus=3,hostaddr=3","Want to use SwiftShader acceleration?","In development by BlissOS team: mesa graphics card + OpenGL3.2."]},{"i":"use-your-own-imagenaked-version","l":"Use your own image/naked version","p":["Use any generic ISO or use your own Android AOSP raw image or qcow2","Where, ${PWD}/disk.qcow2 is your image in the host system."]},{"l":"Custom Build"},{"l":"How to connect using ADB","p":["In the Android terminal emulator:","Edit /default.prop","Change ro.adb.secure=1 to ro.adb.secure=0","E.g.","In the Android terminal emulator, run adbd","Then from the host, you can can connect using either: adb connect localhost:5555","adb connect 172.17.0.2:5555","For further information, and even information. on a dockerized build environment for Bliss OS, please visit: https://github.com/sickcodes/dock-droid"]}],[{"l":"Syslinux EFI Stub Installation"},{"i":"use-syslinux-efi-to-run-bliss-os-7x10x11x12x14x","l":"Use syslinux EFI to run Bliss OS 7.x/10.x/11.x/12.x/14.x","p":["Thanks to @IcedCube for the original post! This method is NOT recommended as it is fairly bleeding-edge and experimental, but it should help booting on Chinese tablets that do not want to run grub.","Use a Linux installation for the following procedure."]},{"i":"part-1---grab-the-required-tools","l":"Part 1 - Grab the required tools","p":["Install unsquashfs(part of squashfs-tools)."]},{"i":"part-2---get-bliss-os","l":"Part 2 - Get Bliss OS","p":["Grab the latest build of Bliss OS 7.x/10.x/11.x/12.x/14.x"]},{"i":"part-3---get-the-syslinux-efi-bootstrap","l":"Part 3 - Get the syslinux EFI bootstrap","p":["Grab the .zip file from @IcedCube's original post, and extract it to the root of the USB drive. This will bootstrap syslinux EFI onto it.","Then, make a folder called android.","Now, open up the .iso in an archive program. Extract the following files form the root directory of the .iso image to the USB drive's android folder ( ramdisk.img is not used in Android 10+ ):","initrd.img","ramdisk.img","kernel","Extract system.sfs to a folder somewhere, such as /tmp.","Open a terminal and change directory (using cd) to /tmp. Run ls and confirm that system.sfs is shown in the file list. If there is no output, start over as the file is misplaced.","Run the following:","unsquashfs ./system.sfs","This will make a new directory called squashfs_root."]},{"i":"part-4---version-specific","l":"Part 4 - Version specific"},{"i":"if-you-are-using-bliss-7x","l":"If you are using Bliss 7.x","p":["Change directory to squashfs_root and run ls. There should only be one file - a system.img inside the directory. Copy the file to the USB's android folder."]},{"i":"if-you-are-using-bliss-10x11x12x14x","l":"If you are using Bliss 10.x/11.x/12.x/14.x","p":["Change directory to squashfs_root. The structure is a complete Android root filesystem. To install Bliss OS, the files will need to be in a system image. The following steps will guide you through creating a 2 GB system.img file, formatting it, mounting it, and copying the contents of squashfs_root into the new disk image.","Execute:","The sync command might take some time.","Now copy the /tmp/system.img file to your USB's Android folder."]},{"i":"part-5---creating-the-data-image","l":"Part 5 - Creating the data image","p":["First, find where your USB drive is mounted. It is usually in /mnt or /media(ex. /media/USB).","cd into the android folder.","We will create a 3 GB data image file. You can attempt to create a 4 GB image but FAT32 maxes out at 4 GB per file. If your system supports exFAT or NTFS, you may try and use it.","This will be an completely empty ext4 disk image, but will be enough to run Bliss.","Finally, check to ensure everything is in structured like so:","Need to add some kernel parameters? Open syslinux.cfg and add them before the initrd=/android/initrd.img statement.","Unmount the USB from your computer. Plug it into your device and use the BIOS to boot from your UEFI USB Drive, partition 1. If all goes well, you will get a black screen with small white text saying \"Booting Android...\" followed by loading files. You should get the Linux kernel text, then see the Bliss boot animation play after a couple minutes depending on your USB drive read/write speed."]}],[{"i":"updating-bliss-osag-builds","l":"Updating Bliss OS/AG builds","p":["Somethmes you might want to update your Bliss OS/AG install when a new release is pushed out. Doing this is simple, as long as you used our documented methods to install.","Bootable USB Method:","This process is exactly the same as when you installed, except now it will ask if you want to update and existing install instead.","Windows Installer Method:","Use 7-Zip to open the new .iso, and simply drag the kernel, initrd.img (and ramdisk.img if on Pie) to the install folder, overwriting the old ones, then in 7-Zip, double click on the system.sfs file and drag the system.img inside over to replace your existing system.img. If you only have a system.sfs file, replace that with the system.img, and delete the old .sfs file. Then reboot and boot into your newly updated release"]}],[{"i":"#","p":["For those that want to use the auto-install feature, there are a few things you should know first."]},{"l":"Using Auto-Install","p":["Android-x86's bootable USB Auto-Install feature will only work for Android 9 and below. and it requires a MBR or Legacy boot setup and not EFI.","It sets a fixed size for the data image and does not allow for proper root as well. So if you still require the use of Auto Install, please note that we do not support this method as it is outdated."]}],[{"l":"Using the windows installer"},{"l":"Using the Windows Installer","p":["We maintain an installer for Windows, but we still recommend using the standard EFI install method from our bootable USB in order to take advantage of the stability, security and updatability of Bliss OS builds."]},{"l":"Downloading the installer","p":["Start off by heading to the github repo for the installer and downloading the latest .exe usually found in the /bin/make_installer folder of that repo. https://github.com/BlissRoms-x86/Androidx86-Installer-for-Windows/tree/2.9.0.1/bin/make_installer","There is an .exe file in there named Androidx86-Installv29.0000.exe. That is the one you will need to grab. Save it to your Computer along with the latest Bliss OS/Bass .iso you wish to install along side Windows."]},{"l":"Installing Android","p":["When you launch the application, the UI is mostly self explanitory, but just in case, we will run through the steps here with you.","alt text","If you have a pervious install attempt that did not work for Bliss, Remix OS, Prime OS, etc. We recommend that you use the Cleanup option first before installing. This will help avoid any configuration or installation issues. This step will ask for verification, and confirm with a dialog when complete.","alt text alt text","From here, we can relaunch the installer or continue using it, and select the .iso by clicking the icon to the right of the Android OS Image field. This will open a Windows File Explorer window and let you navigate to your download and select the .iso.","From here, we can select the Target Drive, and then drag the Data Size slider to the space we want to use for our data.img (Android Data partition).","(!!PLEASE NOTE!!): The Extract option is only useful for users that want to be able to remount the system as RW. We provide an immutable root method (KernelSU) in all recent Bliss builds, so this option can be ignored.","When you are done setting up the build, go ahead and click the Install button. The process of the install will display at the lower lefthand side of the app window.","When complete, the installer will popup a dialog stating so."]},{"l":"Rebooting into Android","p":["In order to reboot into Android, we start off by entering Settings, and navigating to the System tab on the left, and scroll down, selecting Recovery on the right.","alt text","In the Recovery tab, you want to find the Advanced startup option, and click the Restart now button.","This will restart your PC into the Advanced Startup menu. You want to select the Use a device option","Followed by the Android OS option","From here, your PC should reboot into Grub, and display the Grub menu for the .iso you installed"]}],[{"l":"BlissEthernetManager"},{"l":"Setting Up Ethernet Interfaces","p":["If your version of BlissBass comes with the Eternet Manager, then you are able to setup multiple ethernet interfaces and configure them.","alt_text","Clicking on the Interfaces item allows you to select the target Ethernet interface to view/edit. You may need to click the refresh button at the top for changes to be reflected.","From there, you can set the interface as Up/Down, Unassigned/DHCP/Static, and depending on selection, you can set the interface IP, Gateway and DNS.","IP and Subnet mask are handled in the IP Address field (< IP Address>/< Subnet Mask>)","Gateway Address is handled through the Gateway Address field","DNS is handled through the DNS Addresses field"]},{"i":"bliss-ethernet-manager-aidl-interface","l":"Bliss Ethernet Manager AIDL Interface:","p":["The source package for BlissEthernet Manager contains the framework and system libs for the AIDL interface.","Gradle:","Java:","AIDLs:","alt_text"]},{"i":"bliss-ethernet-manager-adb-interface","l":"Bliss Ethernet Manager ADB Interface:","p":["We also supply a simple interface using the service framework provided by Android that allows you to set IP, DNS, and Gateway.","ADB Interface:","
is the method number in aidl","1: getAvaliableInterfaces","2: isAvaliable","3: Etc…","Examples:","getAvaliableInterfaces:","x86_64:/ # service call blissethernet 1 s16 eth0 Result: Parcel( 0x00000000: 00000000 00000002 00000004 00740065 '............e.t.' 0x00000010: 00300068 00000000 00000004 00740065 'h.0.........e.t.' 0x00000020: 00310068 00000000 'h.1..... ')","isAvaliable:","x86_64:/ # service call blissethernet 2 s16 eth0 Result: Parcel(00000000 00000001 '........')"]}],[{"l":"Setting Up Bliss Kiosk Launcher","p":["If your BlissBass builds comes with Bliss Kiosk Launcher, then you have the ability to restrict it’s access to various packages on the device, as well as set specific packages to auto-launch when booting the device into Lockdown mode (Intel Default), or locking the device while in Admin mode (Other Options > Intel - Admin)."]},{"i":"lockdown-mode","l":"Lockdown Mode:","p":["alt_text","In Lockdown mode, navigation bar, gesture handle and status bar are all disabled. The app drawer will only display allowed packages. Example:","While in Lockdown mode, you can access the Kiosk Launcher Settings by clicking the Exit button, and inputting the maintenance password set (default is: 123):"]},{"i":"admin-mode","l":"Admin Mode:","p":["This mode shows a sprocket next to the exit icon, and depending on boot mode, will also display the navigation handle and statusbar.","alt_text","Along with the app drawer containing all packages:"]},{"i":"configuration","l":"Configuration:","p":["Clicking on the sprocket from the home screen will launch the Kiosk Launcher Settings screen:","alt_text","From the settings screen, you can manage the Maintenance Password, Change whitelisted apps, and set which package you want to Auto Launch when Kiosk Launcher starts in Lockdown mode.","You can also test the Kiosk Launcher while within Admin mode to ensure functionality before rebooting to Lockdown mode."]}],[{"l":"XDA Threads","p":["We usually release our builds on XDA, so here are the running threads we are currently maintaining:"]},{"l":"Bliss OS","p":["Bliss OS 11.x - https://forum.xda-developers.com/bliss-roms/bliss-roms-development/bliss-os-pie-beta-preview-t3855917","Bliss OS 12.x/14.x - https://forum.xda-developers.com/android/software/bliss-os-x86-pc-s-12-x-development-t4004419"]},{"l":"Android-Generic Project","p":["AGP 1.x/2.x - https://forum.xda-developers.com/t/android-generic-project-pc-gsi-build-automation-toolkit.4132031/"]}],[{"l":"Build Filenames","p":["_k-xxxxx :- Kernel Branch - ex: k-kernel-5.4","_m-xxxxx :- Mesa Branch - ex: m-r-x86 (r/r-x86 means stock Mesa branch in current manifest)","App Services:","BlissOS-( Version)-( Device Type)-( Build Date)_k-( Kernel)_m-( Mesa)_( App Services)_( Extras).iso","Build Date:","Device Type:","Extras:","foss/gms/emugapps :- Apps Type","houdini/libvndk :- Native-Bridge Type","Kernel & Mesa:","Our Native-Bridge variations are also added to this section.","Sometimes we will include extras into the builds, and that identifier will show in the last section.","Stock - Normally barebones, minimal apps added. Perfect for product testing FOSS - Includes Free and Open Source app store solutions Gapps/GMS - Includes Google Play Services","The filenames we use contain some important information about what all is included in the builds.","This will be Bliss OS 11.x or 14.x, depending on what version of Android we are compiling.","This will be the julian date-time from when the compile started.","Version:","x86/x86_64 :- Device Type 32bit/64bit"]}],[{"l":"Desktop Mode","p":["We have a number of requests on how to use the included Desktop Mode.","Ways to enable Desktop UI:","enable Taskbar from the Quick Settings tile in the notification drawer.","Settings > Apps > Defaults > Home. And set Taskbar as Home. Then adjust Taskbar Settings through that app in its app drawer.","Launch the Desktop Mode app from any other launchers App Drawer to enable the Desktop UI experience separately from your current launcher"]}],[{"i":"#","p":["Frequently asked questions about Bliss OS"]},{"i":"faq","l":"F.A.Q."},{"i":"why-is-there-no-keymapper-included-in-bliss-os","l":"Why is there no keymapper included in Bliss OS?","p":["Q: Many users ask why is there no keymapper included in Bliss OS? A: We have not found any open source keymappers, so we won't put our users data in jeopardy just for that.","We are slowly starting to work with a small group of developers interested in creating an open-source on-screen keymapper for keyboard/mouse and gampads, so please spread the word about that and help us gain some interest.","For those lost as to why we want to ensure security there, a gaming keymapper will redirect any input from the users device, and can even run when a game is not loaded. So it has the potential to grab passwords, banking info, etc. We don't trust anything we can't sift through the source of enough these days, so this is why we haven't included one as of yet","Q: What is Android-Generic Project? A: Android-Generic Project is a collection of scripts, manifests & patches that allow for rapid prototyping of Android projects based off AOSP to produce generic images for Linux PC hardware as well as others. For a more in-depth description of the goals and progressions leading up to this project, please read This Blog Post","More Info:","Website - https://android-generic.github.io/","Documentation - https://android-generic-project.gitbook.io/documentation/"]}],[{"l":"Hardware Compatibility","p":["A Series - Mostly Supported (Needs SSE4.2) (Kernel 5.10+ recommended)","AMD Desktop GPUs - mostly supported + Vulkan","AMD:","Athlon Series - Mostly Supported (Needs SSE4.2) (Kernel 5.10+ recommended)","Core2Duo - Not Fully Supported (Needs SSE4.2) (May require 32bit builds)","houdini- Includes Intel's Houdini (Works with most Intel CPU's and some recent AMD CPU's)","How to identify Native-Bridge Types in ISO file ?","Intel / AMD iGPU - all supported + Vulkan (Iris requires Mesa 21.1.3+)","Intel Atom - Mostly Supported (Kernel 5.10+ recommended)","Intel Celeron M - Fully Supported (Kernel 5.4+ recommended)","Intel i Series (i3/5/7/9) - Fully Supported","Intel:","libndk- Includes Google's libndk-translation (Works on all CPU's, but not as efficient as Houdini)","Native-Bridge is an ARM translation layer for android x86 developed by Intel and Google to run ARM apps on x86 architecture.","Native-Bridge:","Nvidia Desktop GPUs - poor support - no vulkan (Uses Nouveau drivers)","Repo: https://github.com/BlissRoms-x86/CompatibilityList","Ryzen Series (1k-7k) - Fully Supported (Kernel 5.10+ recommended)","Supported CPU's:(as of 2022 Q4)","Supported GPU's:","We have updated our hardware support tracking and moved it to a repo of it's own along with a web frontend at: https://tested.blissos.org/"]}],[{"l":"How to Log","p":["For grabbing manual logs of issues in Android-x86/Bliss OS, we need to use the alt-f1 console or built in terminal and we need to know the storage location we want to save in. For the examples below, we have our external storage mounted at sdcard/.","For Bliss 15.x & 16.x: Use KernelSU app to grant su permissions to Termux, then open the built in Termux app, then enter:","su logcat sdcard/log.txt","Or, boot into the OS using DEBUG=2 from Grub, and the logs will be saved in /data after boot, or /tmp/log during early boot stages","For Bliss 14.x: Open the built in terminal app, then enter:","For Bliss 12.x: Use the alt-f1/f7 console, then enter:","logcat sdcard/log.txt","For Bliss 11: Use the alt-f1/f7 console, then enter:","After that is done, you can close the terminal app or use alt-f7 to get back to Android if you are using the Console, and use the File Manager to access your log and share it where needed."]}],[{"l":"Keyboard Shortcuts"},{"i":"bliss-os-keyboard-shortcuts","l":"Bliss OS Keyboard Shortcuts:","p":["A: Reply-all to current message (works only while inside the message)","Alt + Del: Delete an entire line","Alt + Esc: Back","Alt + Spacebar: Insert a special character","Alt + Tab: Switch to last app in stack (Holding Alt, and repeatedly pressing tab will scroll through recent apps)","Alt + Trackball-Down: Jump to bottom of inbox","Alt + Trackball-Down: Move cursor to bottom of page","Alt + Trackball-Left: Move cursor to beginning of line","Alt + Trackball-Right: Move cursor to end of line","Alt + Trackball-Up: Jump to top of inbox","Alt + Trackball-Up: Move cursor to top of page","Apps","Browsing","Ctrl + A: Select all text in the current field","Ctrl + Alt + Del: Open up Power Menu","Ctrl + B: Open bookmarks","Ctrl + C: Compose new e-mail","Ctrl + C: Copy text to clipboard (will copy all text on-screen unless specific characters are highlighted)","Ctrl + F: Find on page","Ctrl + H: View browsing history","Ctrl + I: Zoom in","Ctrl + J: Go back a page","Ctrl + K: Go forward a page","Ctrl + O: Zoom out","Ctrl + R: Refresh current page","Ctrl + S: Open browser settings","Ctrl + S: Open social network sharing menu","Ctrl + U: Refresh inbox","Ctrl + V: Paste text from clipboard","Ctrl + X: Cut text (will cut all text on-screen unless specific characters are highlighted)","Enter: Open an e-mail (from the main inbox list)","F: Forward current message (works only while inside the message)","Gmail","Prtsc: Create Screenshot","R: Reply to current message (works only while inside the message)","Scrolling","Shift + Del: Delete the character to the right of the cursor","Shift + Shift (press it twice): Activate caps-lock; press shift once more to exit","Shift + Spacebar: Page up in any Web page/document view","Shift + Trackball-Left/Right: Highlight text for cutting or copying","Spacebar: Page down in any Web page/document view","System","Typing","Win + B: Open browser","Win + C: Open contacts","Win + E: Open e-mail","Win + G: Open Gmail","Win + I: Open calendar","Win + M: Open maps","Win + P: Open music","Win + S: Open text messaging","Win + Y: Open YouTube","Win: Home key","Y: Archive message (works from within message or while on main inbox list)"]}],[{"l":"Sandboxing Apps","p":["Sometimes we have apps that check the system for root. In these cases, they will all fail their check unless you are running the app in a sandboxed environment. There are a couple aps we use to get around this."]},{"l":"Island","p":["https://play.google.com/store/apps/details?id=com.oasisfeng.island"]},{"l":"Shelter","p":["https://play.google.com/store/apps/details?id=net.typeblog.shelter"]}],[{"l":"Vulkan Mode","p":["In our Android 9+ versions, we include the ability to use a Grub command for enabling Vulkan mode on supported graphics hardware. However, from Bliss OS 14.10, you don't have to to worry about triggering this value as we removed VULKAN=1 from the OS."]},{"i":"to-initially-test","l":"To initially test:","p":["When your PC reboots, it's initially shows a grub menu. tap \"e\" to edit the current selection and add the VULKAN=1 to the end of the line that starts with \"kernel\", then follow the on-screen prompts to boot with those edits.","If it works, then edit Grub from your main OS, and add the flag there."]},{"i":"here-is-an-example-grub-menuentry-bliss-os-158x","l":"Here is an example Grub menuentry (Bliss OS 15.8.x):","p":["menuentry 'Bliss-x86 Test-Vulkan' --class bliss { search --file --no-floppy --set=root /AndroidOS/android.boot linux /AndroidOS/kernel root=/dev/ram0 SRC=/AndroidOS androidboot.selinux=permissive GRALLOC=minigbm HWC=drm_minigbm quiet DATA= VULKAN=1 initrd /AndroidOS/initrd.img }"]}],[{"l":"BlissOS for Surface devices","p":["This version is designed specifically for the Microsoft Surface devices. The kernel use almost the same LTS kernel but with extra patches from the linux-surface project to ensure the most compatibility.","While this build indicate that this is for Surface devices, not all devices need to use it. To know if your device need to install this build or not, go to this section of linux-surface wiki:","https://github.com/linux-surface/linux-surface/wiki/Supported-Devices-and-Features","If you see your device has the number that said Requires linux-surface kernel or Requires linux-surface kernel =x.x.x then this is the build you are looking for.","The Surface build of BlissOS also include iptsd, an userspace touch processing daemon for Microsoft Surface devices using Intel Precise Touch technology made by linux-surface team. If you have any issue with the touchscreen, try to Calibrate or tweak the daemon. Go to Calibrate and configure iptsd to know how."]}],[{"l":"BlissOS Go","p":["This variant is designed specifically for the low-end hardware that meet the minimum requirement to run BlissOS. While using the same LTS kernel as the Generic variant, we've added a few tweaks to the internal Android parts to make sure you can have a good experience even if your hardware is limited."]}],[{"l":"BlissOS Zenith","p":["BlissOS Zenith is the new flagship build of BlissOS. Zenith is a BlissOS variant that is intended for \"chasing the latest\". We will build this variant weekly with only the latest version of BlissOS that is available, combine with latest Stable kernel. BlissOS is intended for people who are having a new hardware that LTS kernel can't support, or people who just want to get latest stable kernel to run on their builds."]}],[{"l":"Advanced Android-x86 Installer","p":["Axon from Supreme-Gamers put together a great installer that works with MBR/EFI and installs on NTFS or EXT4. Advanced Android-x86 Installer","Notice Due to Advanced Android-x86 Installer using Grub2Win, we can not currently recommend using it. Grub2Win is a GPLv3 licensed project that has made the decission to limit its userbase by blocking specific regional installs. This action goes against GPLv3 and we will not support the actions the developer has chosen."]}],[{"l":"Gearlock"},{"l":"Gearlock Info","p":["Gearlock Developer Documentation: https://supreme-gamers.com/gearlock/","Gearlock-dev-kit git link (for cloning): https://github.com/axonasif/gearlock-dev-kit","Gearlock-kernel-pkg: https://github.com/axonasif/gearlock-kernel-pkg","Gearlock (main repo for the new vendor/gearlock used in Bliss OS 11/14/AG 11 builds): https://github.com/axonasif/gearlock"]},{"l":"Supported Gearlock Extensions","p":["Bliss OS devs do occasionally create Gearlock Extensions also, and those can be found here: https://sourceforge.net/projects/blissos-dev/files/Android-Generic/PC/gearlock_extensions/","You can also find more extensions on the https://supreme-gamers.com/r/ site. Not all of those are compatible with our versions of Android, so please read carefully."]},{"l":"Gearlock Kernel Commands","p":["(these are passed through Grub CLI)","Gearlock kernel command lines:","NOSC=0 Disables supercharging","NOGFX=0 Skips loading Gearlock GPU drivers at recovery-mode (needed for vulkan and old-modprobe modes)","NORECOVERY=0 Disables recovery countdown","ALWAYSRECOVERY=0 Enters Recovery by default","To disable bootsound you have to use gearlock > more > settings > bootsound Or you can also use your own by editing /[data] [system] /ghome/.gearlockrc"]}],[{"l":"Linux Android-x86 Installer","p":["Advanced and easy to use Advanced Android x86 installer for Linux.","Developed with Python for linux.","User Xtr has also created a solution for recent versions of Bliss OS/Android-Generic Project. That can be found on aur: https://aur.archlinux.org/packages/android-x86-installer-tauri-bin","Source: https://github.com/jaxparrow07/Androidx86-Installer-Linux"]}],[{"l":"Debug Booting","p":["There are a few ways to debug booting and we will run through a few of them here.","First is to hit \"e\" when the grub selection screen shows up, and try and boot by removing the \"quiet\" from your grub entry.","The second option would be to boot in debug mode by adding DEBUG=1 or DEBUG=2 , both represent a lower level of logging. See Example below:","You will need to enter \"exit\" once or twice when using debug mode to procede to the following steps of the boot process.","If the animation never starts, add \"nomodeset\" to the grub command to force software rendering and hardware compatibility mode. See Example below:","Once you are able to get things to boot, use the alt-f1 /f7 console or the local Terminal app and the Logcat command to log things, su logcat sdcard/log_name.txt","When done, copy and paste the entire log either to Hastebin or Pastebin"]},{"i":"if-init-starts-but-never-boots-to-installer","l":"If init starts, but never boots to installer:","p":["This typically happens on newer CPU's and requires you to install ising either our Windows based installer:","Android-x86 Installer for Windows","or using a Linux based installer:","Android-x86 installer for Linux","If you are trying to install within VMWare or VirtualBox, we don't suggest doing so as it will not be hardware accellerated. Please use QEMU based emulator,like:","qemu-windows","For more advanced debugging information:","Please follow the advanced debugging procedures found on Android-x86 documentation https://www.android-x86.org/documentation/debug.html"]}],[{"l":"Debug Graphics","p":["When booting into Bliss for the first time, some users may see a blinking cursor, scrambled graphics, or black screen. These are all signs that your device requires some configuration to get things to run.","Android-x86, AG & Bliss OS builds all come with a configurable graphics stack that can be used through Grub CLI."]},{"i":"the-main-options-for-configuration-are-as-follows","l":"The main options for configuration are as follows,"},{"i":"gralloc","l":"Gralloc:","p":["GRALLOC=gbm - Uses GBM interface (Vulkan mode default)","GRALLOC=minigbm - Uses Minigbm interface","GRALLOC=intel - Uses Intel minigbm interface","GRALLOC=none - Force no Gralloc interface"]},{"i":"hw-composer","l":"HW-Composer:","p":["HWC=drm - Standard for versions <= Android 9","HWC=drmfb - Use drm-framebuffer insead","HWC=intel - Used Intel IA HWC","HWC=none - Force no hwcomposer definition"]},{"i":"grub-examples","l":"Grub Examples:"}],[{"l":"How to edit grub from your Bliss OS install","p":["Follow these steps to edit EFI from rooted Bliss OS"]},{"i":"step-1","l":"Step 1:","p":["Boot into Bliss OS and select \"DEBUG mode\" from the grub menu. Once boot completes, press enter"]},{"i":"step-2","l":"Step 2:","p":["To list devices:","blkid","Assuming device is /dev/sda, Identify EFI partition number (should have boot flag):","parted /dev/sda print","if you have nvme disk your EFI partition should be like this:","/dev/nvme0n1p1","You must use this partition for bottom commands.","Mount your EFI partition (usually first partition in disk):","mount /dev/sda1 /mnt"]},{"i":"step-3","l":"Step 3:","p":["Change directory to /mnt/efi/boot:","cd /mnt/efi/boot"]},{"i":"step-4","l":"Step 4:","p":["Edit the android.cfg using vi editor:","vi android.cfg"]},{"i":"step-5","l":"Step 5:","p":["Use Vi Editor to add your changes and save- Press insert to enter edit mode- Press Esc, type :w, and press Enter to save.- Press Esc, type :q, and press Enter to exit.","Also you can combine save & exit with :wq"]},{"i":"step-6","l":"Step 6:","p":["Now you can umount efi partition and reboot to see your changes:"]}],[{"l":"How to mount ext partition on boot","p":["User cjeu100 put together a script that works well from our Android 9 builds. Follow the link below to head to that post.","How to mount partition on boot:","https://forum.xda-developers.com/bliss-roms/bliss-roms-development/bliss-os-pie-beta-preview-t3855917/post83243055"]}],[{"l":"How to mount internal NTFS partition on boot"},{"l":"Method 1","p":["It is possible to automatically mount disks at boot. There may be other ways to do this, but one way to do it is:","1) Write the commands for creating a folder and mounting the disk in a text file which will be a bash script file.","`#!/system/bin/sh","mkdir /mnt/folder_name mount.ntfs /dev/block/partition_name /mnt/folder_name`","Here 'partition_name' could be any of the disk you want to mount like for example sda1 devb1 etc. and 'folder_name' is the folder where you want to mount the disk.","2) Place the script file under /system/etc/init.d. You can name the file anything you want, but it should not have any extension i.e. .txt or any other extension must be removed.","3) Reboot and enjoy ! Use a file manager like Mixplorer which can bookmark the mounted locations for easy access. The disks should now be mounted automatically at every boot."]},{"l":"Method 2","p":["Mount all NTFS Partitions on boot (mostly automated script)","Steps:","1) Open Terminal 2) create a \"mountfs\" file with the conetents below and place it under /system/bin 3) Then from a terminal: su chmod 777 /system/bin/mountfs 4) Then type mountfs 5) Done"]}],[{"l":"Microsoft Surface IPTS Gearlock Package","p":["If you have a Microsoft Surface device and touchscreen support is not enabled by default, this likely means that your device requires a special kernel for support.","Getting the Kernel:","You should use the latest Generic i3/5/7/9 ISO (11.13/14.3) which comes with Gearlock, then download the surface kernel from SupremeGamers resource site ( https://supreme-gamers.com/t/android-x86-kernel-for-microsoft-surface-based-on-linux-surface-patches.389/). and install it after initial boot from Gearlock Recovery mode.","If you need to reset your IPTS touchscreen while the system is running:","Open the alt-f1/f7 console, or built in terminal, and type:","su rmmod ipts_surface rmmod intel_ipts modprobe intel_ipts modprobe ipts_surface"]}],[{"l":"Not booting after install on Linux","p":["For Linux users that are able to boot our Android 10/11 builds in Live mode, but things fail to boot once installed, this is caused by a bug in our data detection scripts. try to remove the data/ folder from the install location, and replace it with an ext4 data.img","Example for making a 8gb image:","dd if=/dev/zero of=data.img bs=1 count=0 seek=$[1G*8]"]}],[{"i":"remount-system-as-readwrite","l":"Remount system as Read/Write","p":["(Credits go to Knoxville and others from Telegram for this method)","For remounting, we need to use the alt-f1 console or built in terminal.","For Bliss 15.x: Boot with DEBUG=1, and mount remount the install partition:","or if you want to backup original system image","Now we sync the filesystem and reboot:","Upon reboot, you will have R/W on system","Once we have a system.img and no system.sfs, we need to use the built in terminal app (with su permissions granted), and type:","Then look for the /dev/loop# where we see mounted at \"/\", likely followed by \"ext4 ro....\". Note that as we will need to use that for the next command. Now type:","Or for older Bliss versions ( 14.x, 11.x) use:","Then you can edit the system files you need. When you are done, you can remount as RO:","Then test to verify changes stick","Video Walkthrough Watch this video for detailed instructions.","https://youtu.be/hA1SjE3kTfQ"]}],[{"l":"Sound Issues","p":["0 [HDMI ]: HDA-Intel - HDA Intel HDMI HDA Intel HDMI at 0xb0610000 irq 46 1 [PCH ]: HDA-Intel - HDA Intel PCH HDA Intel PCH at 0xb0614000 irq 44","For some users, the simple sound fixes don't work. This means we will need to go into experimental mode on the issue. This method was provided by cjeu100 From XDA-Developers threads.","Go to Home, open the Volume Boost app and boost it to 15%-25% and test","In this example, the we picked the top one, (pcmC0D7). If that doesn't work, repeat these steps and choose a different card.","Install \"Volume Booster GOODEV\" or any other sound booster app","now you see your sound devices","On Bliss OS builds < 15.8.8:","On Bliss OS builds <= 15.8.8, we have different drivers we can try (1/2). We use the snd-intel-dspcfg.dsp_driver=# cmdline option to switch between those drivers on boot:","Open Play Store","Open the AudioFX app if installed and turn it off","Option 1","Option 2","Option 3","Option 4 - (Advanced)","Option 5 - snd-intel-dspcfg.dsp_driver","Start by using the alt-f1 console (use alt-f7 to get back) or the Terminal app (may require you to run Remount System as Read/Write first) and type following commands:","The initial way we should troubleshoot is to first see if it is a volume issue. Typically, you can install an app like Goodev Volume Booster, and that will add gain to the main sound channels.","There is also tools added to Gearlock Recovery that can help with most sound issues. Read the details about that here.","This will list all the devices that have been detected on the device. Search the output for anything sound related. If you see multiple audio or sound drivers loaded, refer to Option 1 to boost gain, otherwise you can reload the modules:","This will restart the audio server and hopefully result in sound working with the right output. Use alt-f7 to get back to the Android UI and test.","This will solve most sound issues.","Using the alt-f1/f7 console from Android 9 or a terminal app from Android 11/12, we can run:","When running our builds on real hardware, sometimes the sound is not detected properly. We can troubleshoot this issue a number of ways."]}],[{"l":"Touch orientation"},{"l":"Touch Orientation"},{"i":"requirements","l":"Requirements:","p":["System mounted as RW","Booted into Debug mode (or using root and terminal)","Knowledge on how to use common linux commands like cat, ls, etc."]},{"i":"process","l":"Process:","p":["First, you are going to want to get your device uevent from /sys/class/dmi/id/uevent:","Then find a good string to look for from it, like we do here","Your device may also require a couple accel opt_scale options too. Example:","Once done, save the file and reboot. If it works, please submit the changes as a PR to our device_generic_common repo"]}],[{"l":"Wifi Issues","p":["For many users, wifi is not detected right on boot. If you are using a build that is pre Kernel-5.x, you can try and add the grub option \"AUTO_LOAD=old\". If you are using a newer kernel (5.0+), make sure your device has native support included in the kernel. Some devices may also require the grub option \"VULKAN=1\" or \"GRALLOC=gbm\" too.","If it's not working, you can provide your wifi card info to us for help, or you can submit a pull request to our kernel-drivers repo with the proper Linux driver modules for your device ( https://github.com/BlissRoms-x86/external_kernel-drivers). If you don't know the card name you can try to provide lspci or lsusb (for usb cards) output for us by typing the command into the Terminal (with root)","su lsusb sdcard/lsusb.txt"]}],[{"l":"Calibrate and configure iptsd","p":["After you did that, you can restart iptsd and try out your new calibration.","Also check out this iptsd.conf sample if you want reference for manual tweaking.","AspectMax: 2.323","AspectMax(Default: 2.5)","AspectMin: 1.021","AspectMin(Default: 1.0)","Create a file /data/vendor/ipts/90-calibration.conf with a text editor of your choice, and enter the above values like this:","If you have issues with iptsd not detecting a particular gesture or contact, you should repeat this process and only do the gesture that iptsd has problems with. Then compare the reported values with the ones from your earlier run and adjust them accordingly.","In this case the new values would be:","NOTE: During the calibration, palm rejection is not active! So dont put your palm on the display. If you can, detach the display from the keyboard.","Once that is done you can run the calibration tool.","SizeMax: 0.859 cm","SizeMax(Default: 2.0 cm)","SizeMin: 0.425 cm","SizeMin(Default: 0.2 cm)","The first thing you need to do is stop iptsd. Grant Termux root permission using KernelSU Manager and then :","The palm rejection of iptsd relies on measuring the size and aspect ratio of every contact and then comparing these values to a reference to determine whether the contact is valid or not. The default values will try to cover the finger size of most people, but it is possible (and recommended) to tune these values to better match your fingers. This by extension will also improve palm rejection.","The values that are interesting for calibration are:","The values will update as soon as you touch the display and iptsd registers a contact. You can now start the actual calibration process. Touch the screen with each of your fingers, one time pressing hard and one time pressing lightly. Then put all your fingers on the display at the same time. You should also do some common gestures like pinch-to-zoom or swiping across the display with three or four fingers, since gestures tend to deform the contact. If you only press your fingers straight on the display, iptsd will detect touches fine but will fail to detect gestures.","There is no need for extensively long contacts. Keeping the finger on the display for a long time won't improve calibration accuracy, since you only need a minimal and a maximal value. But it has the potential to introduce noise into the calibration process which will distort the Min/Max values. 3000 to 4000 samples should be plenty.","This section is a copy of linux-surface iptsd wiki with a few edit for BlissOS's iptsd. If you have any trouble with configuring iptsd, please file a bug report here for BlissOS 14 & 15 and here for BlissOS 16+. You can also file a bug report at the main iptsd repo.","To calibrate iptsd, you need to measure the size of your own fingers and then input those values into the configuration file of the daemon. But before you go away and grab a ruler (or just go away), wait! To make this easier, iptsd includes a tool that will do these measurements for you: iptsd-calibrate.","When you are done with the calibration, you should see something like this in the terminal:","You will see something like this:"]}],[{"l":"Configuration Through Command Line Parameters","p":["Bliss OS (and the Bass builds) utilizes an expanded configuration layer, our Broad Apparatus Support System (Bass for short) allows one generic .iso to be configured through kernel command line parameters on a per-device basis. This allows end users to fine tune the performance of the OS to the capabilities of the device."]},{"l":"Intro to Kernel Command Line Parameters","p":["We use Grub, Refind, or other Linux bootloaders to boot the device once installed. The menu entry is how we also pass many of our parameters for configuring the device as well. Here is an example of a typical menu entry for Grub for Bliss OS 15.8.x:","The line we are targeting for our configuration is the one that starts with “ linux /AndroidOS/kernel”. Here are some of the explanations for the configs we support.","If your Grub menu entry looks a little different, and has some of the commands at the top, you can also edit there to add your configuration preferences."]},{"i":"supported-parameters","l":"Supported Parameters:","p":["Warning: Note that not all of the configs listed here are available in the open-source Bliss OS source, but are available through licensing the Android-Generic Project add-on for that feature, or licensing the use of our Bass builds or Bass source (which comes with most available AG add-on's) for your organization","Here are a few of the supported parameters that we support, organized by stack."]},{"i":"debugging","l":"Debugging:","p":["This will enable logging or low level debugging console before the system starts to boot Android.","This is a root console, and can be used for testing or troubleshooting. Pressing exit, twice will continue with the Android boot process.","Command:","DEBUG=*","Options:","1: high-level debugging console (logs to /tmp/log)","2: low-level debugging console (logs to /data/log.txt & /tmp/log)","You will also need to enable the console if you wish to use alt-f1/f7 virtual consoles:","Example:"]},{"i":"graphics-stack","l":"Graphics Stack:","p":["This includes a number pf parameters that we can use to customize the stack to our hardware's capabilities."]},{"i":"hardware-composer","l":"Hardware Composer:","p":["This allows us to include multiple hardware-composer options, and select the ones we want to target per-device.","By default, if you set HWC without anything like HWC=, Bliss will use drmfb-composer","Command:","HWC=*","Options:","drm: Use drm_hwcomposer","drm_celadon: Use Project Celadon's fork of drm_hwcomposer","drm_minigbm: Use drm_hwcomposer with minigbm support","drm_minigbm_celadon: Use Project Celadon's fork of drm_hwcomposer with minigbm support","Example:"]},{"i":"gralloc","l":"Gralloc:","p":["We pair up our Gralloc options to work with certain HWC options.","Command:","GRALLOC=*","Options:","gbm: This is gbm_gralloc and it's compatible with drm & drm_celadon","gbm_hack: This is gbm_gralloc but with a HACK commit to fix some issue with iris or nouveau. It's compatible with drm & drm_celadon","minigbm: This is minigbm and it's compatible with drm_minigbm, drm_minigbm_celadon","minigbm_arcvm: This is minigbm but made specifically for virgl by Google, compatible with drm_minigbm, drm_minigbm_celadon","minigbm_gbm_mesa: This is minigbm made by rsglobal which he tried to port gbm_gralloc philosophy to minigbm. Compatible with drm_minigbm, drm_minigbm_celadon","Example:"]},{"i":"gralloc4-configurations","l":"Gralloc4 Configurations:","p":["In some cases, we are working with hardware that requires Gralloc4 specs. We can force minigbm to use Gralloc4 by using:","GRALLOC4_MINIGBM: Force using gralloc4 with minigbm (only compatible with drm_minigbm_celadon)"]},{"i":"angle--software-rendering","l":"ANGLE & software rendering","p":["ANGLE is available in BlissOS 14.10 and above, if you have a device that can use Vulkan, you can try ANGLE with Vulkan backend using ANGLE=1.","Alternatively, you can also use SwiftShader Vulkan with ANGLE as a software rendering solution if you are running it inside something like a virtual machine by setting nomodeset ANGLE=1 or HWACCEL=0 ANGLE=1","There's one more option for software rendering, which is the legacy SwiftShader EGL, simply set nomodeset or HWACCEL=0 to use it.","For some virtualized methods uses, you may have a blinking cursor artifact that shows on screen. To remove this artifact, include the following boot flag: vt.global_cursor_default=0","NOTE: You may want to turn on Color Inversion when using software rendering because the color might be inverted"]},{"i":"media-stack","l":"Media Stack:"},{"i":"video-encodersdecoders","l":"Video Encoders/Decoders:","p":["By default, BlissOS will use AOSP's codec2 software decoder. We also offer a few various options that allow you to select different video decoders stack options:","CODEC2_LEVEL: This will set the C2 level (default value is 4, you can disable codeec2 completely with '0').","FFMPEG_OMX_CODEC: This will enable OMX version of FFMPEG codecs (disable codec2 with CODEC2_LEVEL=0 to use this codecs).","FFMPEG_CODEC2_PREFER: This will force Bliss to use codec2 version of FFMPEG codecs by default.","FFMPEG_HWACCEL_DISABLE: This will disable hardware accelleration for the FFMPEG codecs.","FFMPEG_CODEC_LOG: This will show more log of FFMPEG codecs, enable if you want to debug it","FFMPEG_CODEC2_DEINTERLACE& FFMPEG_CODEC2_DEINTERLACE_VAAPI: configuring deinterlacing option for FFMPEG codec2, you can find the options in this commit made by Micheal Goffioul","OMX_NO_YUV420: This will force the system to not use YUV420 color format on OMX codec (fixes some black or glitchy screens, use it with CODEC2_LEVEL=0)","FFMPEG_CODEC2_DRM: turn on/off DRM prime handle on ffmpeg codecs, 0 is the default because not any Gralloc supporting it."]},{"i":"networking","l":"Networking:","p":["We include the ability to have Ethernet appear as WiFi as some appli/cations will not work without a WiFi or Cell connection present. In order to enable this mode, we use the VIRT_WIFI boot flag: VIRT_WIFI=1"]},{"i":"disk-access","l":"Disk Access:","p":["(Available on Bliss OS 14.1x, 15.8.x, & 16.x) For use cases where you are dual booting or sharing system resources with multiple drives, you might want to enable automatic mounting of all disks within Android: INTERNAL_MOUNT=1: Allows device to mount other internal drives on boot."]},{"i":"usbpci","l":"USB/PCI:"},{"i":"usb","l":"USB:"},{"i":"usb-modes","l":"USB Modes:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","Switch USB mode (ADB/Storage) !! Requires kernel configs !!:","FORCE_USE_ADB_CLIENT_MODE: Forces client mode adb settings","FORCE_USE_ADB_MASS_STORAGE: Forces USB mass_storage mode"]},{"i":"power--memory","l":"Power & Memory:"},{"i":"power","l":"Power:"},{"i":"default-sleep-mode-options","l":"Default Sleep Mode Options:","p":["deep: This option will choose the deepest sleep state supported by the hardware.","Example:","mem: This option will choose the memory state.","nonvs: This option will not save non-volatile storage (NVS) to disk before entering S4 sleep.","off: This option will choose the off state.","old_ordering: This option will use the old ACPI sleep state ordering.","s2idle: This option will choose the S2 idle state.","s3_bios: This option will use the BIOS-provided S3 sleep state.","s3_mode: This option will use the kernel's own S3 sleep state.","s3bios: This option will choose the S3 BIOS state.","s3standby: This option will choose the S3 standby state.","s4_nohwsig: This option will disable the ACPI hardware wake signal for S4 sleep.","sci_force_enable: This option will force the ACPI SCI interrupt to be enabled.","shallow: This option will choose the shallowest sleep state supported by the hardware.","The default value for acpi_sleep is s3_bios, and the suggested value for most devices is s3_mode.","The default value for mem_sleep_default is deep, and the suggested value for most devices is shallow","The following are the options for acpi_sleep(suggested values are in bold):","The following are the options for mem_sleep_default(suggested values are in bold):"]},{"l":"Other Sleep Mode Options","p":["There are a number of other Linux kernel command line options that can be used to configure sleep mode settings. Some of these options include:","acpi_sleep_default: This option specifies the default sleep mode for the system. The possible values are:","s3: Standby mode","s4: Hibernate mode","s5: Off mode","Example:","suspend_console: This option specifies whether to suspend the console when the system enters sleep mode. The possible values are:","on: The console will be suspended.","off: The console will not be suspended.","no_console_suspend: This option specifies that the console should not be suspended when the system enters sleep mode. This option overrides the value of the suspend_console option.","SUSPEND_TYPE: Set suspend type. options: mem, disk, freeze mem, freeze disk","PWR_OFF_DBLCLK: Set power off double click. options: true,false","SLEEP_STATE: Override default sleep.state property for the device"]},{"i":"intel-power-options","l":"Intel Power Options:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","INTEL_PSTATE_CPU_MIN_PERF_PCT/INTEL_PSTATE_CPU_MAX_PERF_PCT: Allow for adjusting intel_pstate max/min freq on boot by setting the min/max pref percent","Example:","CPU_ENERGY_PERFORMANCE_PREF: Allow for adjusting cpu energy performance Normal options: default, performance, balance_performance, balance_power, power","INTEL_PSTATE_STATUS: Set cpu scaling at boot (ie set pstate status to active/passive at boot)"]},{"i":"generic-power-options","l":"Generic Power Options:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","SET_SCREEN_OFF_TIMEOUT: Set screen off timeout. options: integer in milliseconds","SET_SLEEP_TIMEOUT: Set screen sleep timeout. options: integer in milliseconds","SET_POWER_ALWAYS_ON: Set power always on. options: true or false","SET_STAY_ON_WHILE_PLUGGED_IN: Set stay on while plugged in. options: true or false"]},{"i":"generic-performance-options","l":"Generic Performance Options:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","FORCE_POWER_PROFILE: Sets the power_profile value. Options: ondemand, hotplug, interactive, performance","FORCE_IO_PROFILE: Sets the io_profile value. Options: ondemand, hotplug, interactive, performance","FORCE_CPU_GOV: Sets the cpu_governor value. Options: ondemand, hotplug, interactive, performance","FORCE_CPU_SCALING_GOV: Sets the cpu_scaling_governor value. Options: ondemand, hotplug, interactive, performance","FORCE_GPU_SCALING_GOV: Sets the gpu_scaling_governor value. Options: ondemand, hotplug, interactive, performance","FORCE_THERMAL_THROTTLE_ENABLE: Sets the thermal_throttle_enable value. Options: (true|false)","FORCE_HW_TIMEOUT_MULTIPLIER: Force hw timeout multiplier, # X 5s. Options: (integer)"]},{"i":"memory","l":"Memory:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","Example value: \"100\"","Example value: \"1024\"","Example value: \"1024M\"","Example value: \"128\"","Example value: \"16\"","Example value: \"256\"","Example value: \"32\"","Example value: \"512\"","Example value: \"512M\"","Example value: \"64\"","FORCE_ENFORCE_MIN_FREE_MB: Sets the enforce_min_free_mb value","FORCE_MAX_FREE_MEMORY: Sets the max free ram limit","FORCE_MEMORY_TRIM_ENABLE: Sets the memory_trim_enable value Options: (true|false)","FORCE_MIN_FREE_MEMORY: Sets the minimum free ram limit","FORCE_OOM_SCORE_ADJ: Sets the oom_score_adj value","FORCE_SCHED_MIN_ACTIVE_PAGES: Sets the sched_min_active_pages value","FORCE_SCHED_MIN_DIRTY_PAGES: Sets the sched_min_dirty_pages value","FORCE_SCHED_MIN_FREE_PAGES: Sets the sched_min_free_pages value","FORCE_SCHED_MIN_INACTIVE_PAGES: Sets the sched_min_inactive_pages value","FORCE_SCHED_MIN_RECLAIMABLE_PAGES: Sets the sched_min_reclaimable_pages value","FORCE_SCHED_MIN_UNRECLAIMABLE_PAGES: Sets the sched_min_unreclaimable_pages value","FORCE_SCHED_MIN_WRITEBACK_PAGES: Sets the sched_min_writeback_pages value"]},{"i":"lmkd","l":"LMKD:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","Default for low-RAM devices = 10, for high-end devices = 20","Default for low-RAM devices = 30, for high-end devices = 100","FORCE_KILL_HEAVIEST_TASK: Kill heaviest eligible task (best decision) vs. any eligible task (fast decision). Default = false","FORCE_LMK_CRITICAL: The possible values of oom_adj range from -17 to +15 (Default=0).","FORCE_LMK_ENABLE: Force enable LMK Daemon Default = false (unless device is detected to have less than 2GB RAM)","FORCE_LOW_MEM: Forces the low_mem mode in Android to the specific true/false value Default = false (unless device is detected to have less than 2GB RAM)","FORCE_MINFREE_LEVELS: Use free memory and file cache thresholds for making decisions when to kill. This mode works the same way kernel lowmemorykiller driver used to work. AOSP Default = false, Our default = true","FORCE_PSI_COMPLETE_STALL_THRESHOLD: The complete PSI stall threshold, in milliseconds, for triggering critical memory notifications. If the device receives critical memory pressure notifications too late, decrease this value to trigger earlier notifications. If critical memory pressure notifications trigger unnecessarily, increase this value to make the device less sensitive to noise.","FORCE_PSI_PARTIAL_STALL_THRESHOLD: The partial PSI stall threshold, in milliseconds, for triggering low memory notification. If the device receives memory pressure notifications too late, decrease this value to trigger earlier notifications. If memory pressure notifications trigger unnecessarily, increase this value to make the device less sensitive to noise.","FORCE_SWAP_FREE_LOW_PERCENTAGE: Level of free swap as a percentage of the total swap space used as a threshold to consider the system as swap space starved.","FORCE_SWAP_UTIL_MAX: The max amount of swapped memory as a percentage of the total swappable memory. When swapped memory grows over this limit, it means that the system swapped most of its swappable memory and is still under pressure. This can happen when non-swappable allocations are generating memory pressure which can not be relieved by swapping because most of the swappable memory is already swapped out. The default value is 100, which effectively disables this check. If the performance of the device is affected during memory pressure while swap utilization is high and the free swap level is not dropping to Sets the swap_free_low_percentage, decrease the value to limit swap utilization.","FORCE_THRASHING_LIMIT_DECAY: The thrashing threshold decay expressed as a percentage of the original threshold used to lower the threshold when the system doesn’t recover, even after a kill. If continuous thrashing produces unnecessary kills, decrease the value. If the response to continuous thrashing after a kill is too slow, increase the value.","FORCE_THRASHING_LIMIT: Number of working set defaults as a percentage of the file-backed pagecache size used as a threshold to consider system thrashing its pagecache.","High end: 10 Low end: 50","High end: 100 Low end: 100","High end: 70 Low end: 200","Other options available for specialized builds:","Recommended: 700","The higher the score, more likely the associated process is to be killed by OOM-killer. If oom_adj is set to -17, the process is not considered for OOM-killing."]},{"i":"logginglogd","l":"Logging/Logd:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","SET_MAX_LOGD: Sets the maximum logd value","Options: 1 = on, 0 = off","SET_LOGCAT_DEBUG: Enables logcat debugging","Options: true, false"]},{"i":"ota-updates","l":"OTA Updates:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","SET_CUSTOM_OTA_URI: Sets the custom URL for OTA updates","Example:","SET_CUSTOM_OTA_URI=https://192.168.1.1/updates/update.json"]},{"i":"features","l":"Features:"},{"i":"kiosk-mode","l":"Kiosk Mode:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)",": This will add or remove the specified quick settings tile.","0: Disables the recent apps menu.","1: Displays up to 1 app in the recent apps menu.","2: Displays up to 2 apps in the recent apps menu.","3: Displays up to 3 apps in the recent apps menu.","4: Displays up to 4 apps in the recent apps menu.","5: Displays up to 5 apps in the recent apps menu.","all: This will restore all default quick settings tiles.","FORCE_DEFAULT_QS_TILES: Sets the config_defaultQsTiles value Options:","FORCE_DISABLE_NAV_HANDLE: Force disable gesture navigation handle. Options: (true|false)","FORCE_DISABLE_NAV_TASKBAR: Force disable navigation taskbar. Options: (true|false)","FORCE_DISABLE_NAVIGATION: Force disable navigation bar. Options: (true|false)","FORCE_DISABLE_RECENTS: Force disable SystemUI recents. Options: (true|false)","FORCE_DISABLE_STATUSBAR: Force disable statusbar. Options: (true|false)","FORCE_ENABLE_CLEAR_ALL_RECENTS: Sets the config_enableClearAllRecents value Options: (true|false)","FORCE_HIDE_NAVBAR_WINDOW: Force hide navigation bar window. Options: 0, 1","FORCE_SET_MAX_RECENTS: Sets the config_maxRecents value Options:","none: This will remove all default quick settings tiles.","Other options available for specialized builds:"]},{"i":"launcher-options","l":"Launcher Options:","p":["USE_LAUNCHER3: Forces Launcher3 to be set instead of secondary launcher in build","SET_SMARTDOCK_DEFAULT: Set's SmartDock as default launcher when booting into Desktop specific builds (requires a build with SmartDock included by default)","ENABLE_QUICKSTEP_TASKBAR: Set quickstep taskbar features to enabled (requires dev-options to be enabled & Launcher3 to also be enabled). options: true,false","FORCE_DESKTOP_ON_EXTERNAL: Enable desktop mode on external display (required for MultiDisplay Input). options: 0,1"]},{"i":"rotationorientation","l":"Rotation/Orientation:","p":["SET_SF_ROTATION=*: Sets surfaceflinger hardware rotation property to the value passed","SET_OVERRIDE_FORCED_ORIENT=*: Override forced orientation (true/false)","SET_SYS_APP_ROTATION=*: Forces system app rotation, and has three cases:","1.force_land: always show with landscape, if a portrait apk, system will scale up it","2.middle_port: if a portrait apk, will show in the middle of the screen, left and right will show black","3.original: original orientation, if a portrait apk, will rotate 270 degree"]},{"i":"misc","l":"Misc:"},{"i":"battery-stats","l":"Battery Stats:","p":["androidboot.fake_battery=true: AOSP implementation of fake battery status","(Available through Android-Generic Add-On & add-ons for Bass builds)","SET_FAKE_BATTERY_LEVEL: Let us fake the total battery percentage Options: (0-100)","SET_FAKE_CHARGING_STATUS: Allow forcing battery charging status Options: (0|1)"]},{"i":"package-management","l":"Package Management:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","With our package management features, we have the ability to also enable/disable various packages included in the system by default using the kernel cmdline.","Example: HIDE_APPS=com.termux,com.android.dialer,com.android.documentsui"]},{"i":"hideunhide-default-apps","l":"Hide/Unhide Default Apps:","p":["HIDE_APPS: Hides the apps via passed comma separated list","RESTORE_APPS: Restores the apps via passed comma separated list"]},{"i":"usb-mode-functions","l":"USB Mode Functions:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","Allows switching default USB/ADB functions via cmdline","FORCE_USE_ADB_CLIENT_MODE: Forces USB into ADB Client mode (0=off, 1=on, 2=ADB enabled but not touching USB options)","FORCE_USE_ADB_MASS_STORAGE: Force enable ADB Mass Storage mode ofver USB (0=off, 1=on)"]},{"i":"iio-options-configuration","l":"IIO Options Configuration:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","This allows us to set ro.iio.* propertied through the following flags:","SET_IIO_ORDER: Sets ro.iio.accel.order property","SET_IIO_ACCEL_QUIRKS: Sets ro.iio.accel.quirks ptoperty","SET_IIO_ACCEL_X_OPT_SCALE: Sets ro.iio.accel.x.opt_scale property","SET_IIO_ACCEL_Y_OPT_SCALE: Sets ro.iio.accel.y.opt_scale property","SET_IIO_ANGLVEL_QUIRKS: Sets ro.iio.anglvel.quirks property","SET_IGNORE_ATKBD: Sets ro.ignore_atkbd property","SENSORS_FORCE_KBDSENSOR: Option to force kbd sensor","SET_IIO_MAGN_QUIRKS: Option to force magn quirks. Example: SET_IIO_MAGN_QUIRKS=no-trig,no-event"]},{"i":"set-timezone","l":"Set Timezone:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","To use this change, pass the grub/cmdline value for your timezone using the SET_TZ_LOCATION flag. Timezone reference can be found here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones","Example:"]},{"l":"Serial IO","p":["(Available through Android-Generic Add-On & add-ons for Bass)","SET_USB_BUS_PORTS: Sets permissions for tty ports (chmod 666) for /dev/bus/usb/*. Example: SET_USB_BUS_PORTS=001/001,001/002,001/003,001/004","SET_TTY_PORT_PERMS: Set USB bus port permissions (chmod 666) for /dev/tty*. Example: SET_TTY_PORT_PERMS=ttyS*,ttyACM*"]},{"i":"network--radio-control-options","l":"Network & Radio Control Options:","p":["(Available through Android-Generic Add-On & add-ons for Bass)","Enable/Disable Wireless Devices (Change included only in specialized builds):","LOCKDOWN_WIRELESS_DEVICES: A kernel level switch to disable all wireless devices. options: 0,1","UNLOCKDOWN_WIRELESS_DEVICES: A kernel level switch to enable all disabled wireless devices. options: 0,1","Other Networking Options (Available in Bass builds):","FORCE_DISABLE_ALL_RADIOS: Set force disable all radios (only disables on boot, user can re-enable manually if given access). options: 0,1","FORCE_BLUETOOTH_SERVICE: Set force bluetooth service state. options: enable, disable"]}],[{"i":"gui-method-build-bliss-os-14x","l":"[GUI Method] Build Bliss OS 14.x"},{"l":"1. Setting up the environment","p":["This first part will go over the steps needed to sync and setup your Build Environment for Bliss OS 14.3 source. If you have done that already, you can skip to the next section. Setting up your build environment can also be done the easy way , and for that, we can use EZ-AOSP. For Ubuntu, use MikeCrigs' repo, or for MX-Linux, use My repo, and continue at “Grabbing the Source” when done. Otherwise, we have the manual steps below.","System Requirements","Installing Java 8","Grabbing Dependencies","If you plan on building the kernel with the NO_KERNEL_CROSS_COMPILE flag, you will need to also have gcc-10+ installed:","Setting up your credentials","The first thing you should do when you install Git is to set your user name and email address. This is important because every Git commit uses this information, and it’s immutably baked into the commits you start creating:","Grabbing the Source","(This is where EZ-AOSP leaves off)","We will need to create a folder for our project, then init the manifest, and sync the repo, and we do all that in a few simple terminal instructions:","Although we are doing our best to help you learn, it never hurts to become a bit more versed in building AOSP. so be sure to also check out: AOSP building instructions"]},{"i":"2-how-to-include-android-generic-project-into-your-project","l":"2. How to include Android-Generic Project into your Project:","p":["Now all we have to do is clone AGP into the vendor folder."]},{"l":"3. Using AGP with Bliss OS","p":["Now that AGP is cloned into the project, we start it up like so:","That's it! It will initially generate the menu items with what is available for modules on initial launch","Since Bliss OS is already setup as a project, we don’t really need to use any of the other “Project Setup” options (01-06), and we will normally go straight to option 10-build-options. Double click on that.","This will launch the main build menu, which contains all the options related to the build commands. From here, things pretty much match the main AGP instructions. Here’s a quick rundown of what they all do from here:"]},{"l":"Build Options","p":["(This segment uses content from Android-Generic Project documentation. Please refer to that for further details: https://android-generic-project.gitbook.io/documentation/android-generic-project-using-with-bliss-os-source)**** This menu will show the various build options for compiling your project through AG.","Based on what Product you selected prior to selecting this option, the script will compile the resources needed to include Rusty-Magisk into your build","Enable Rusty-Magisk","FOSS- Free & Open Source apps from Aurora Droid & Aurora Store (and microG client) (x86/x86_64/arm64) GMS- not implemented by default EMU-Gapps- Proprietary gapps extracted from Google's Emulator images. (x86_64 only) Vanilla- No added apps or services","Make Clean Before Build- Will add \"make clean\" to your build command and have it run every time you start the build. No Kernel Cross-Compile- Will add the override for NO_KERNEL_CROSS_COMPILE and allow you to build the kernel using GCC 10/11 from your installed system instead of using AOSP or your ROM's GCC","None- No changes to Native Bridge aside from what Android-x86 includes by default Intel's Houdini- Will pull the latest supported ChromeOS recovery image, and extract the Houdini & Widevine files from that and include in your build. Google's libndk-translation- Will need manual setup of vendor/google/emu-x86 before using. Follow readme from that project (we were unable to reproduce results of extracting super.img automatically)","Run Make Clean","Select Apps Type","Select Extra Options","Select Make Type","Select Native-Bridge Type","Select Product Type Selecting this will ask you what device type you plan on targeting (PC: android_x86 / android_x86_64)","Select Variant Type","Selecting this option will allow you to choose what kind of final image you would like.","Selecting this will ask you what build variant type you plan on targeting (user, userdebug, eng)","Selecting this will immediately run the \"make clean\" command on your project. Clearing the PRODUCT_OUT folder","Selecting this will present the options for included Apps type","Selecting this will present the options for Native-Bridge.","Standard .iso Image- generic .iso for MBR/EFI EFI .img file- Builds .iso for using in EFI devices RPM Linux Installer- Compiles as an .rpm installer for linux based systems and will install in a folder on the linux drive.","Start The Build","This command is dependent on all previous options and will also save/reload your last used build command (all the options selected in this section above), then run the build command in the terminal. From this point forward, any errors will need to be resolved manually.","This will contain only options that can be interchangeable (affected with only an export or build environment variable)"]}],[{"i":"#","p":["Instructions on how to build Bliss OS yourself"]},{"i":"build-bliss-os-11x","l":"Build Bliss OS 11.x"},{"l":"Introduction","p":["This is the official guide to build Bliss OS for PCs. In this guide, we will only cover building for x86 & x86_64 devices. We will also go over the details of using the patch system for testing and recompiling a build with a different kernel branch.","The golden rule to building is patience. If something breaks, pay attention to the console output or take logs of the issue and ask for guidance in our build support chat.","Let’s get started."]},{"l":"Preparation","p":["To get started, you need a computer with Ubuntu 18.04 (LTS), at least 200GB space of HDD, and at least 8GB RAM. A decent CPU (or CPUs if you have a server motherboard) is recommended. Other distros can work but is not officially supported in this guide.","Underpowered machines may crash during compilation. If that happens, you may try and restart the build as most crashes are caused by lack of memory. If your storage space has run out, then you will need to build on a different hard drive."]},{"l":"Install the JDK","p":["Install OpenJDK:"]},{"l":"Install build tools","p":["To install the required build tools, run the following command:"]},{"l":"Install source code tools","p":["Now we need to get the source code via a program named repo, made by Google. The primary function of repo is to read a manifest file located in Bliss OS's GitHub organization, and find what repositories you need to actually build Android.","Create a ~/bin directory for repo:","The -p flag instructs mkdir to only create the directory if it does not exist in the first place. Now download the repo tool into ~/bin:","Make repo executable:","And add it to PATH:","Scroll to the end of the file and type these lines:","Ctrl-O and enter to save, then Ctrl-X to exit nano. Now either logout and login again (or reboot), or source the file:","Which can be shortened to:"]},{"i":"what-is-source","l":"What is source?","p":["source is a bash command to read aliases, functions, and commands from the specified file. Typically, you'll supply bash with a configuration file such as .bashrc or .bash_profile, or an initialization file such as envsetup.sh. The difference is that while the configuration file lists configuration and user-defined aliases and functions, initialization files typically hold build commands such as breakfast, brunch, and lunch. Without those commands building would be significantly harder as you would have to memorize the long command to invoke a build manually!","But why do you need to run it after modifying a file? Well, bash cannot automatically detect changes in our files. To solve this, we either source it or log out and log back in, forcing bash to reload configuration files. Keep this in mind, because unlike configuration files, if you forget to source initialization files, build commands will not function!"]},{"i":"what-if-i-need-repo-globally","l":"What if I need repo globally?","p":["If you need the repo tool to be available anywhere, you will need to first download repo to your home directory, move it with sudo and give it executable permissions. The exact commands are as follows:","repo will now work anywhere, without any .bashrc modifications. However, these steps aren’t recommended as repo might become a security risk if a vulnerability is found.","Now we’re ready to download the source code."]},{"l":"Download","p":["Create a directory for the source:","Before we download, we need to tell repo and git who we are. Run the following commands, substituting your information:","Now, we’re ready to initialize. We need to tell repo which manifest to read:","-b is for the branch, and we’re on p9.0-x86, Android Pie. It’ll take a couple of seconds. You may need to type y for the color prompt.","Sync repo :","Problems syncing? :","-j is for threads. Typically, your CPU core count is your thread count, unless you’re using an older Intel CPU with hyperthreading. In that case, the thread count is double the count of your CPU cores. Newer CPUs have dropped hyperthreading unless you have the i9, so check how many threads you have. If you have four threads, you would run:","-c is for pulling in only the current branch, instead of the entire history. This is useful if you need the downloads fast and don’t want the entire history to be downloaded. This is used by default unless specified otherwise.","repo will start downloading all the code. That’s going to be slow, even on a fiber network. Expect downloads to take more than a couple hours.","To find out how many CPU threads you have, run nproc."]},{"l":"Easy build instructions","p":["This will build an x86 based .ISO for PCs.","Usage: $ bash build-x86.sh options buildVariants blissBranch extraOptions Options:","BuildVariants:","BlissBranch:","ExtraOptions:","To start, you must first use the -s (--sync) flag, then on following builds, it is not needed. Initial generation of the proprietary files from ChromeOS are also needed on the first build. We are able to use the -r (--proprietary) flag for that. This step needs to be on its own because the mounting process requires root permissions, so keep a look out for it asking for your root password.","First you must sync with the new manifest changes:","This will do initial patching. Some of the patches will show as already applied or conflict. This is normal behavior and will not effect the build process if you continue to the next step without addressing any of the conflicts.","The only times you should worry about the conflicts is when you are adding or changing patches in vendor/x86.","Next step is to download the proprietary files from ChromeOS:","After that, you can build your release file:"]},{"l":"Advanced build instructions","p":["Set up the build environment:","This is the initialization file we talked about earlier up top. This \"initializes\" the environment, and imports a bunch of useful build commands required to build your device. Again, you need to remember to source this file every time you log out and log back in, or launch a new bash/Terminal instance.","Define what device you’re going to build. For example, the Nexus 5X, has a codename of bullhead. You can check your specific device's codename on GitHub or on Google. Execute:","For 32 bit devices:","For 64 bit devices:","Let's break down the command. lunch initializes the proper environmental variables required for the build tools to build your specific device. Things like BLISS_DEVICE and other variables are set in this stage, and the changed variables will be shown as output. x86 or x86_64 is the specific device we are building. Finally, userdebug means that we will build a user-debuggable variant. This is usually what most ROMs use for publishing their builds. Manufacturers typically use user which disables most of the useful Android Logcats."]},{"i":"my-device-isnt-booting-and-userdebug-wont-print-any-adb-logcats-what-gives","l":"My device isn't booting, and userdebug won't print any adb logcats. What gives?","p":["There is a third build variant called eng, short for engineering builds. These builds will activate adb logcat during boot, and will show you exactly what is going wrong, where, and why. However, these builds are NOT recommended for normal usage as they are not securely hardened, have log spam that will slow down your device, and other unexpected problems like userspace utilities crashing during runtime. If you want to submit your device for mainline, do NOT submit an eng build!","If this is the first time you're running the build, you're going to want to run the proprietary build command first from the easy build instructions. Alternatively, you could also run those commands manually.","Then:","After that is complete, we can start the main building process. Run:","mka iso_img","And the build should start. The build process will take a long time. Prepare to wait a few hours, even on a decent machine."]},{"i":"why-mka-and-not-make","l":"Why mka and not make?","p":["make only runs with 1 thread. mka is properly aliased to use all of your threads by checking nproc.","If you want to customize your thread count (maybe you're building with a fan-screaming laptop in a quiet coffee shop), use make -j#, replacing the hash with the number of threads (example of make -j4)."]},{"l":"After building","p":["There are two outcomes to a build - either it fails and you get a red error message from make, or it succeeds and you see the Bliss logo in ASCII. If you encounter the former, you need to go back and fix whatever it's complaining about. Typically, 90% of the time the problem will be in your device tree. For the other 10%, submit a bug report to the ROM developers. Be sure to include the full log of your build to help diagnose the problem, and your device tree.","If you face the latter, congratulations! You've successfully built Bliss ROM for your device. Grab the artifacts for your device:","In here, you’ll find an .iso that goes along the lines of Bliss-v11.9--OFFICIAL-20190801-1619_x86_64_k-k4.9.153_m-18.3.5-pie-x86-llvm80_f-dev-kernel.org.iso."]},{"l":"Changing the target kernel branch","p":["Sometimes, you might be working on a device that requires a different kernel branch. In order to switch kernels effectively on Bliss OS, they need to be compiled with the OS at build time."]},{"l":"Switching the kernel branch","p":["Start off by entering the kernel folder","Then pull all the available kernel branched from your target repo. In this case, we are using the default BR-x86 repo","Then after that is finished, we need to checkout our target branch, and in this example we are choosing our k4.19.50-ax86-ga branch, which has added commits from the GalliumOS project for Chromebooks","Next step is to clean out any configs or generated files from the previously checked out kernel. To do this, run these commands","Once that is done, we can cd back to our main project folder","And run our build command again to generate the .iso with the target kernel we selected"]},{"l":"Using the patch system for testing","p":["We use a patching method we adapted for Bliss from Intel's Project Celadon & phh-treble. This patching system allows us to bring in a good number of commits to add to the OS, and test how they apply or if there are any conflicts.","Our intention was to make a system that can add all the needed x86/x86_64 commits to Bliss ROM, as well as other ROMs too.","The majority of this system is found in vendor/x86/utils.","From here, you simply generate the .patch files from your additions, and add them to the mix. In the following example, we are going to generate patches from packages/apps/Settings and add them to the proper folder for live testing.","From your Project folder:","And generate your .patch files. For this example, we've added four commits on top of what was there after sync","Then copy those files to the proper folder in vendor/x86. In this case, you will find it here:","After that is complete, you can make clean and run the patch system from your main project folder.","This should start patching all the source files. Once that is complete, you can rebuild."]},{"l":"Troubleshooting","p":["If your build failed, there are a couple things you can try.","Try a fresh repo sync to make your repository up to date. Sometimes, the Internet connection between you and GitHub can be flaky. In rare cases a commit merge might be ongoing, and you might've grabbed an incomplete merge. Mostly, this should fix the issue 70% of the time.","Make sure your dependencies are installed correctly. Error messages help out a lot here! Often it will say shared/linked library not found or something along those lines.","Make sure you sourced build/envsetup.sh. This is especially common and worth suspecting if none of the build commands like breakfast and lunch work. If you have repo sync ed do this again.","Make sure you’re at the root of the build tree. Again, to quickly jump there, use croot.","Make sure your computer itself isn’t faulty. HDDs usually die first, followed by RAM. SSDs rarely die but failure is not unheard of. In extremely rare cases, your CPU may have a defect. If you're unsure, run a stress test using a program like Prime95.","If something goes wrong and you've tried everything above, first use Google to look up your error! Most of the errors you encounter is due to misconfiguration and wrong commands entered. More often than not, Google will have the answer you are looking for. If you're still stuck and nothing fixes the problem, then ask us via our Telegram Build Support chat."]},{"l":"Conclusion","p":["Building a ROM is very hard and tedious and the results are very rewarding! If you managed to follow along, congratulations!","After you finish building, you can try out the Git Started guide. Make changes, commit, and send them off to our GitHub for Bliss OS repos & our Gerrit for review on Bliss ROM repos! Or better yet, download experimental commits not ready for the mainline repositories and review them! Again, ROM building is a fun project you can work with. I hope this guide was a lot of fun to run through!"]}],[{"i":"build-bliss-os-15x","l":"Build bliss os 15.x"},{"l":"BlissOS","p":["Download the BlissOS source code, based on AOSP& Android-x86","Please read the AOSP building instructions before proceeding."]},{"l":"What you need to build BlissOS"},{"l":"Grabbing Dependencies"},{"l":"Initializing Repository","p":["Repo initialization","Sync repo"]},{"l":"Options","p":["Note: Default BLISS_BUILD_VARIANT is VANILLA.","BLISS_SPECIAL_VARIANT - This can be custom set if you wanna build a version for a specific device for example -jupiter for Steam Deck or -surface for Microsoft Surface series"]},{"i":"setup-foss-apps-if-you-choose-to-build-foss","l":"Setup FOSS apps (if you choose to build FOSS)","p":["If you want to build with FOSS (this will include microG Services & some extra apps), go to vendor/foss and then type","And then choose 1 (x86/x86_64) to fetch all the apps. If you want to include Bromite Webview in, type this instead"]},{"l":"Building","p":["Adding build options","Before running lunch, you can add variables into the build to integrate more stuff into the image. Note that you can put different variables into the build.","To build with FOSS","To build with MindTheGapps","To add a custom label into a device-specific build","To build the special \"surface\" variant which include kernel with patches from linux-surface and the iptsd userspace touchscreen daemon","To build the special \"go\" variant for BlissOS Go","More build options will be in Extras part including proprietary native-bridge/widevine libraries"]},{"l":"Extras","p":["We do offer some extra libraries that can be compiled into the build. These include :","Prebuilt Widevine from Windows Subsystem for Android","https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt","Clone to vendor/google/proprietary/widevine-prebuilt, The variable to activate this is USE_WIDEVINE=true","Windows Subsystem for Android's libhoudini","https://github.com/supremegamers/vendor_intel_proprietary_houdini","Clone to vendor/intel/proprietary/houdini, The variable to activate this is ANDROID_USE_INTEL_HOUDINI=true"]},{"l":"Report build issues","p":["You can reach us via Telegram (Android™-Generic (x86 PC) Community Development)"]}],[{"i":"build-bliss-os-v14x","l":"Build Bliss OS (v14.x)"},{"l":"Starting Off","p":["We also offer Android-Generic Project 2.0 as an easy to learn method of building Android 11 for PC's. Checkout the project README.md for more info.","Download the BlissRoms source code, based on AOSP, phhusson& BlissRoms","Please read the AOSP building instructions before proceeding."]},{"l":"What you need to build BlissOS","p":["Installing Java 8"]},{"l":"Grabbing Dependencies","p":["If you plan on building the kernel with the NO_KERNEL_CROSS_COMPILE flag, you will need to also have gcc-10+ installed:"]},{"l":"Initializing Repository","p":["Repo initialization :","sync repo :"]},{"l":"Options","p":["Note: Default BLISS_BUILD_VARIANT is VANILLA.","BLISS_SPECIAL_VARIANT - This can be custom set if you wanna build a version for a specific device for example -jupiter for Steam Deck or -surface for Microsoft Surface series"]},{"l":"Setup FOSS apps or OpenGapps","p":["If you want to build with FOSS (this will include microG Services & some extra apps), go to vendor/foss and then type","And then choose 1 (x86/x86_64) to fetch all the apps. If you want to include Bromite Webview in, type this instead","If you want to build with OpenGapps, first make sure to get git-lfs(already listed in above). Once you got git-lfs, type this","To fetch the packages."]},{"l":"Building","p":["Adding build options","Before running make iso_img, you can adding variables into the build to integrate more stuff into the image. Note that you can put different variables into the build.","To build with FOSS","To build with OpenGapps","To build with proprietary libhoudini extracted from WSA","To add a custom label into a device-specific build","To build the special \"surface\" variant which include kernel with patches from linux-surface and the iptsd userspace touchscreen daemon","To build the special \"go\" variant for BlissOS Go","More build options will be in Extras part including proprietary native-bridge/widevine libraries"]},{"l":"Extras","p":["We do offer some extra libraries that can be compiled into the build. These include :","ChromeOS's libhoudini/Widevine DRM L3","https://github.com/supremegamers/android_vendor_google_chromeos-x86","Clone to vendor/google/chromeos-x86, go to the folder and open terminal./extract-files.sh","The variable to activate this is USE_CROS_HOUDINI_NB=true for libhoudini and USE_WIDEVINE=true for Widevine.","Prebuilt Widevine from Windows Subsystem for Android","https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt","Clone to vendor/google/proprietary/widevine-prebuilt, The variable to activate this is USE_WIDEVINE=true","Windows Subsystem for Android's libhoudini","https://github.com/supremegamers/vendor_intel_proprietary_houdini","Clone to vendor/intel/proprietary/houdini, The variable to activate this is ANDROID_USE_INTEL_HOUDINI=true"]},{"l":"Report build issues","p":["You can reach us via Telegram (Android™-Generic (x86 PC) Community Development)"]}],[{"l":"Contributing Documentation","p":["We are wide open to users submitting their documentation updates to our docs.blissroms.com site. Our repos for the docs site are here:","Documentation:","Knowledgebase:","Support Site:","Feel free to submit a pull request of your work and we'd be happy to include it \uD83D\uDE0A"]}],[{"l":"Development FAQ","p":["Much of what we are doing with Android source is lacking proper documentation as to what it does, and how. This document will try to answer a few of those questions.","What is bootable/newinstaller repo ? What is the purpose of it ? what does it contain ?","Bootable/newinstaller was initally created to handle the ramdisk.img, initrd.img and install.img creation, as well as packaging the final .iso/.img/,rpm file. This means it contains a set of scripts for the initrd image, a set of scripts for ths te installer image, and scripts to setup the filesystem and root environment.","How grub is handled in BlissOS ? How does it show first when normal AndroidOS boots straight to bootanimation ?","This is done by using the typical Linux method for booting with initrd.img, kernel, and system.img/ramdisk.img, where a grub menuentry is created that references the location of each img, and loads itlike normal linux would. The initrd.img and kernel load first, then after zygote loads, the init.sh file takes over and set's up the remaining hardware dynamically, and then initiallizes the graphics composer.","How does it recognize PC Bios on reboot ? as normally there is Bootloader in Android devices!","See above answers","What are the different Partitions that BlissOS Requires for running? This is in terms of Developer point of view nd not user! Does it have same partition table as that of any Android mobile ?","See above answers, with the addition of the install process creating a data.img or data folder on the install partiton, and that is detected by the initrd startup scripts and set as Internal Storage.","What type of kernels BlissOS supports or in general an Android-x86 support ? r there any specific one's ?","Linux/Google Android 11/12 LTS kernels, with about 20-30 patches added on top to support our filesystem and modularize all the drivers or options."]}],[{"l":"Maintaining Proper Authorship","p":["One of the most important things you need to keep in mind while working on open-source projects is maintaining correct authorship. In this article, we'll show you why maintaining proper authorship is important, give you a couple examples on correct and incorrect commits, and show you the overall procedure of correctly pulling in commits from others."]},{"i":"what-is-kanging","l":"What is \"kanging\"?","p":["[https://www.urbandictionary.com/define.php?term=kanged Kanging] is a term used in the Android development community for the action of passing off someone else's code as one's own, intentionally or unintentionally."]},{"i":"why-is-kanging-bad","l":"Why is kanging bad?","p":["Kanging is bad because the developers who worked hard on the commits do not get the recognition they deserve. Over time, this may cause the developer to quit releasing public source code or even retire from the Android development community. This has definitely happened before!"]},{"i":"kanging-examples-what-you-should-avoid-doing","l":"Kanging examples (what you should avoid doing)","p":["'''Example 1:''' You're trying to cherry-pick some commits from a different repository, but keep running into git merge issues. Out of frustration, you copy the code from the commit, and then just commit it using git commit -a. Satisfied, you push it up to GitHub.","'''Example 2:''' You bring up a bunch of commits, and squash them before pushing to GitHub.","'''Example 3:''' You intentionally want to pass off another developer's work as your own. You cherry-pick the commit, and then amend the commit to rewrite the author information.","Let's go over why this is wrong. Example 1 is an example of an unintentional kang. You didn't want to resolve the git merge issues, so decided to just copy the code and commit it as your own. This is bad because the author information does not get transferred over with your copy, which you have to specify manually.","Example 2 is more of an accident. If you squash multiple commits, all authorship information for the range of commits is lost. In addition, it becomes a real headache for other developers if something in the range of your commits is wrong. Because you cannot individually revert commits in a squash, squashing is very much discouraged and should ONLY be used when you have a lot of commits that you committed yourself and are small in nature.","Example 3 is an example of an intentional kang. We won't explain why because it should be fairly obvious."]},{"l":"How to maintain proper authorship","p":["The process is fairly simple yet important to understand.","If you are cherry-picking commits, the authorship information is transferred automatically. Provided that you are running git cherry-pick, the entire commit information, down to when the commit was created, is picked into your repository. You don't have to do anything in this case.","If you are committing someone else's code yourself, then you must manually specify who the author is. There are a lot of reasons why you would do this, from merge issues to incompatible code with the existing codebase. To manually specify an author, follow the [[#Manually specifying an author | Manually specifying an author section below]].","Finally, do NOT squash a range of commits that are not your own. This completely wipes authorship information from the range of commits and causes a massive headache for other developers."]},{"l":"Manually specifying an author","p":["You need to first determine the original author's name and email address.","GitHub no longer shows the author information when you mouse over the profile picture, which is quite unfortunate. However, there is an easy workaround.","Go to the commit that you want to pick. [https://github.com/BlissRoms/Documentation-release/commit/5ae1c6c4441786cd3ad5bd1773c831ba13cd86bc We'll use my commit as an example.]","Add the word .patch, with the period, to the end of the URL and press Enter to navigate to the raw patch.","In the patch, find the section that contains the author. It should be at the top of the page.","Now, it's time to commit with the correct author information. Make the necessary changes, and then commit using this command:","Following the example, I would write:","Once done, push to GitHub or Gerrit."]}],[{"l":"Porting Linux Drivers","p":["When it seems that there might be a missing driver or hardware support for your specific device, the best way to add support for that is o search online for a Linux kernel module for your target component.","Once you've tracked down or created Linux drivers for your device, you have to turn it into a Linux kernel module, and then add it to external/kernel-drivers for it to be included in the current kernel build. Examples of others we add are here https://github.com/BlissRoms-x86/external_kernel-drivers/tree/r11-r36","The examples only add one Android.mk file, and the one I use is generic for just about any kernel module that has a standard MAKEFILE, not a MAKEFILE.am file.","So you should really only need to add your kernel module folder to external/kernel-drivers/ and copy the Android.mk into it, then build source as normal. It'll get picked up as one of the last steps in building and packaging the kernel","Once you have it packaged up, it's best practice to compile the full source and test that it is functioning properly, and once confirmed, submit the change to https://github.com/BlissRoms-x86/external_kernel-drivers as a pull-request."]}],[{"i":"what-are-linux-drivers","l":"What are Linux Drivers?","p":["For those looking to help gain a better understanding of how Linux drivers work, here is a YouTube video that helps to explain things a bit https://youtu.be/juGNPLdjLH4"]}],[{"l":"Code of Conduct"},{"l":"Our Pledge","p":["We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.","We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community."]},{"l":"Our Standards","p":["Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience","Arguing over subjective preference, e.g. nationality, choice, religion, etc.","Being respectful of differing opinions, viewpoints, and experiences","Continued one-on-one communication after requests to cease","Demonstrating empathy and kindness toward other people","Encouraging a person to engage in self-harm","Examples of behavior that contributes to a positive environment for our community include:","Examples of unacceptable behavior include:","Focusing on what is best not just for us as individuals, but for the overall community","Giving and gracefully accepting constructive feedback","Other conduct which could reasonably be considered inappropriate in a professional setting","Public or private harassment","Publishing others' private information, such as a physical or email address, without their explicit permission","The use of sexualized language or imagery, and sexual attention or advances of any kind","Trolling, insulting or derogatory comments, and personal or political attacks","Unwelcome sexual or otherwise aggressive attention"]},{"l":"Enforcement Responsibilities","p":["Project maintainers are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.","Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate."]},{"l":"Scope","p":["This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers."]},{"l":"Enforcement","p":["Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the project maintainers responsible for enforcement at integrity@blissos.org. Participants warned to stop any harassing behavior are expected to comply immediately; failure to do so will result in an escalation of consequences. All complaints will be reviewed and investigated promptly and fairly.","All project maintainers are obligated to respect the privacy and security of the reporter of any incident."]},{"l":"Enforcement Guidelines","p":["Project maintainers will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:"]},{"l":"1. Correction","p":["Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.","Consequence: A private, written warning from project maintainers, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested."]},{"l":"2. Warning","p":["Community Impact: A violation through a single incident or series of actions.","Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban."]},{"l":"3. Temporary Ban","p":["Community Impact: A serious violation of community standards, including sustained inappropriate behavior.","Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban."]},{"l":"4. Permanent Ban","p":["Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.","Consequence: A permanent ban from any sort of public interaction within the community."]},{"l":"Attribution","p":["This Code of Conduct is adapted from the Contributor Covenant, version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html."]}]]
\ No newline at end of file
+[[{"l":"Welcome to BlissOS Documentation"},{"l":"Table of contents"},{"l":"Install Bliss OS","p":["Live boot Bliss OS","Install From Bootable USB","Install in a Virtual Machine","Install in VirtualBox","Install in Qemu","Advanced QEMU Config","Syslinux EFI Stub Installation","Updating Bliss OS/AG builds","Advanced Installation","Manual Install on Linux","Run from Docker","Install on Mac OS","Using Auto-Install","Using The Windows Installer"]},{"l":"Configuration","p":["Configuration through Command Line Parameters","Calibrate and configure IPTSD"]},{"l":"Development","p":["[GUI Method] Build Bliss OS 14.x","Build Bliss OS 11.x","Build Bliss OS 14.x","Development FAQ","Maintaining Proper Authorship","Contributing Documentation","What are Linux Drivers?","Porting Linux Drivers"]},{"l":"Knowledgebase","p":["FAQ - App Sandboxing","FAQ - Build Filenames","FAQ - Collecting Logs","FAQ - Desktop Mode","FAQ - General","FAQ - Hardware Compatibility","FAQ - Keyboard Shortcuts","FAQ - Vulkan Mode","Resource - Advanced Android-x86 Installer","Resource - Gearlock Recovery","Resource - Linux Installer","Troubleshooting - Boot","Troubleshooting - Graphics","Troubleshooting - Linux Boot","Troubleshooting - Mounting EXT on Boot","Troubleshooting - Remount as RW","Troubleshooting - Sound","Troubleshooting - Surface IPTS Package","Troubleshooting - WiFi","XDA Threads"]}],[{"i":"#","p":["Install Bliss OS in a Virtual Machine of your choice"]},{"l":"Install in a Virtual Machine","p":["This method is incomplete, a work-in-progress. Android in general do not run great in VMs, because they do not have the proper drivers. As such performance is greatly reduced if you use this method. Please only install Bliss OS in VMs for evaluation, and keep in mind that the performance exhibited by Bliss OS in such an environment is not a true representation of actual performance on bare metal. With that in mind, let's get started!","First, make sure your CPU is capable of running VMs. For Intel, it is usually Intel VT-x and VT-d. For AMD, it is usually AMD-V. You may also need IOMMU support, although it is probably not necessary since you won't be passing through GPUs.","Download the latest Bliss OS .iso from our website. Then, download the latest version of VirtualBox, and the latest VirtualBox extension pack. Install both executables.","Once inside VirtualBox, click on \"New.\" For the name, type \"Bliss OS.\" For the type, select Linux, and then Linux 2.6 / 3.x / 4.x (64-bit) for the version. Set memory size to 2048 MB (2 GB) or more. For the disk, accept the default options for the disk type. For the size, set it to 20 GB. VirtualBox should initialize a new virtual machine.","We need to tweak a couple more settings. Click on \"Settings\" on the top bar. Allocate more logical processors in System > Processor. Drag the slider to the right, keeping it inside the green bar, as you want to leave a couple of logical processors for the host operating system. For the display, try allocating all of the VRAM. (128 MB most likely) Enable 3D Acceleration. Click OK to save settings.","Now click on Start. VirtualBox will ask you for the CD image. Click on the folder with the green up arrow, and then select the ISO you downloaded earlier.","Select \"Installation - Install Bliss-OS to harddisk\" Press D to detect devices. Press C to create and modify partitions. If asked, select No for GPT. Select New, Primary, full size, and then make it bootable. Write to disk. Quit. Select the partition and then reformat to ext4. Select Yes to install GRUB. ( On Bliss OS 9.x - 11.x) Select Yes to make the /system directory writable.","[PLEASE NOTE]: Recent versions of Bliss OS require manually extracting the system.img from within the system.sfs, removing the system.sfs afterwards from the installed directory in order to allow the system to be mounted as R/W. Please follow further instructions here for that process: Remount System as Read-Write","At this point the installation should be complete. But when you reboot, you will notice that the screen is completely black with a cursor at the top-left. This is because there is no display drivers for the virtual machine. Reset the instance, edit the boot parameters, and add nomodeset to the end. Bliss OS should then boot fully.","Congratulations! You should have a fully working Bliss OS install in a VM, or at least something that works... even if it may be slow. Again, Android on VM is generally not a good idea and you will get a lot more performance if you install Bliss OS to the actual hardware."]}],[{"l":"Install in VirtualBox","p":["This article is a draft content to describe how to install Bliss OS on VirtualBox. It combines android-x86 VirtualBox howto and our old article:\"Install Bliss OS on a VM ( virtualbox)\"."]},{"l":"Create a new VM","p":["If you have not already created a VirtualBox virtual machine for Bliss OS yet, do so as follows:","Click the \"New\" button, and name your new virtual machine however you like. Set Type to Linux, and Version to Linux 2.6 / 3.x / 4.x. Note that you should choose the appropriate bit type for the version of Bliss OS that you downloaded.","Specify how much RAM will be allocated to your virtual machine when you run it. Android doesn't specify a bare-minimum requirement for memory, just keep in mind what apps you plan on running. 2GB (2048MB) is a good place to start, and you can change this later if you need to.","Create a new Hard disk image which will act as your machine's storage. The recommended starting size of 8GB is enough. Click through the rest of the options for creating your Hard disk.","Your virtual machine has now been created. It still needs to be initially installed at this point."]},{"l":"Settings","p":["Tested on VirtualBox 64-bit for Ubuntu 20.04 with Intel and AMD( Ryzen R7 4800H) processors, version 6.1. Bliss OS version v11.11, 64-bit.","Select your machine, then click the Settings button and refer to the below recommended configuration to make sure your settings match.","[System] Recommended: Processor(s) should be set above 1 if you have more than one virtual processor in your host system. Failure to do so means every single app (like Google Chrome) might crush if you try to use it.","[Display]:","2.1. Optional: Video Memory may be increased beyond the minimum selected automatically. The affects of this are unknown.","2.2 Mandatory: Unless guest additions are installed, change the default VMSVGA to VBoxVGA.","2.3 Optional: Enable 3D Acceleration may be checked. The Linux Guest Additions must ( VirtualBox v6.1+) / may ( VirtualBox v6.0 and below) need to be installed to get any benefit from this.","Failure to do so means you won't even be able to launch Bliss OS in the first place.","[Storage] Find the first \"Empty\" item (this should have an icon of a CD). In the Attributes, click on the CD icon with a small down arrow, and pick \"Choose Optical Virtual Disk File...\". Specify the Bliss OS ISO that you downloaded.","[Audio] Intel HD Audio seems to be natively supported in Bliss OS.","[Network] By default, your installation of Bliss OS will be able to automatically connect to the internet. If not, you can try to enable WiFi in \"Settings/Network & Internet\", and connect to showing VirtWifi. If you do not want to connect to the internet in VirtualBox, uncheck \"Enable Network Adapter\" under the Adapter 1 tab."]},{"l":"Install","p":["Now we can click the start on VirtualBox to start the VM.","When entering installation page, 1. select \"Installation - Install Bliss-OS to harddisk\". 2. Press D to detect devices. 3. Press C to create and modify partitions. If asked, select \"No\" for GPT. 4. Select \"New\", \"Primary\", \"full size\", and then make it bootable. 5. \"Write to disk\". 6. \"Quit\". 7. Select the partition and then reformat to ext4. 8. Select \"Yes\" to install GRUB. 9. Select \"Yes\" to make the /system directory writable.","After than, just closing the installing window, and restart this VM instance, and select \"Advanced Options\" and \"Boot from local device\" to select Bliss OS with different options to start.","To here, you should have a fully working Bliss OS install in a VM, or at least something that works... even if it may be slow. Again, Android on VM is generally not a good idea and you will get a lot more performance if you install Bliss OS to the actual hardware."]}],[{"l":"Advanced configuration for qemu cli","p":["Qemu is a very powerful tool that may be confusing for a lot of people. However when using it we can get some very detailed and custom setups, this page will document some more advanced features that folk may wish to utilize with qemu. The majority of this page will assume running on linux. Many of these will not be compatible with windows. While this guide is oriented towards Android. Many of the same concepts apply to general VM usage.","Many of the concepts on this page will not apply to all users, If you have been linked This document is a document and this warning is still present. Any questions or corrections can be asked and posted on the Bliss OS telegram, Matrix, and Discord groups. Ping @quackdoc@Quack Doc.","This guide is for for qemu's cli. while many concepts still apply, virt-manager/libvirt documentation is being worked on."]},{"l":"Evdev","p":["One of the more useful and easy to implement features of qemu is evdev passthrough. Doing this can enable low latency and a better by using hotkeys to globally toggle device passthrough.","There are two methods of doing this, we can use virtio-input-host and we can attach evdev to virtio-mouse and virtio-keyboard.Using virtio-input-host will give the guest exclusive access to the device, and will implicitly setup the proper device. This may cause bugs, and is likely not what all users would like, however this might be helpful for unique devices that don't fall under traditional inputs, and won't work with usb passthrough.","virtio-input-host is fairly easy to setup and simply add. It does however come at the detriment that you cannot use a hotkey to bind it back to the host without closing the VM. It accepts both eventx device files, as well as works with by-id paths. However the strength of it comes from being able to use any evdev device. This includes gamepads, some multi-touch screens and more.","The below to add a multi-touch device through to the VM.","A minimal example of this would be","The more common option would be attaching evdev devices to virtio-keyboard and virtio-mouse. This will allow us to toggle back and forth between the guest VM and the host OS. We need to attach the below output to qemu corresponding device ids.","A functional example of this would be","By default you can use left and right ctrl together to change whether the device is used by the host or the VM."]},{"l":"Flexible bash scripting","p":["Some people who add and remove options from qemu often may find that the current script setups are more of a hassle to use. However we can set up scripts using arrays instead this can allow users to comment out arguments from the script without breaking script. This is very useful for prototyping as this allows us to more efficiently test and comment out various arguments. This does however pose some issues which will be explained under the booting a physical install section."]},{"l":"VFIO","p":["You may wish to pass a physical PCIe through to the VM. This can be helpful for people looking to make a gaming setup using Bliss, or perhaps more unique setups. Qemu and Crosvm both allow doing this. With libvirt this is unbinding, and binding is handled mostly automatically. You still need to load the vfio module yourself (see below).","This article will assume you have prepared IOMMU for passthrough, there are many guides on how to find your IOMMU grouping. If you have a bad grouping it is typically possible to override them using ACS override. Be warned, this is a potential security risk and could be dangerous for host security. ACS will not be elaborated any further in this and it is totally an At your own risk solution.","First we need to prepare the device(s) we are going to passthrough, the command to achieve this is below. It requires root being done by root, not simply with root permissions. The easiest way to do this is to use su -c. but first we need the pcie function address and the pcie driver. To get this we can use lspci | grep -i vendor to find the function address. We can then use lspci -vvnn -s xx:xx.x to get the pci device driver too. It will be listed under kernel modules: pci_device_driver. After that we need to append the domain to it, for the majority of users it will be 0000:. Below is an example command line.","After we have unmounted the drive we need to bind to vfio. This is done in a similar manner with the command below, however we need to load the vfio module and use the vid:pid of the device. The VID and PID will be printed in lspci -nn xx:xx.x an example output would, in the case below where the vid and pid would be 8086 56a5 be;","Using the above output we would do the below command to bind the DG2 graphics card to VFIO.","If you have multiple GPUs with the same vendor and product IDs, you will need to use same GPU passthrough techniques. Arch wiki's PCI_passthrough page provides a number of possible scripts one can use to make this possible.","This needs to be done for all the devices in the IOMMU group until all of them are bound to VFIO.","You can instead add this to module autoload using your init system, this can be done various ways such as mkinitcpio and systemd, an example of a systemd setup would be;","After the card is loaded into VFIO we can then load it into qemu using the below argument. The second device is because we need to passthrough any additional function devices separately, this include audio and on some gpus USB controllers.","All devices in the iommu group should too be bound to the VM.","It may also be necessary to specify the pcie-root-port device. Below is a small example of this","It is a good idea to explicitly disable attaching any other displays to qemu by passing the arguments. This may or may not be needed."]},{"l":"Booting physical media","p":["Below is an example of booting a physical install where a second drive is mounted to nvme and bliss is installed in the folder called android. However there is a small issue, due to how arrays work under bash, this can complicate how variables and strings work, meaning that sometimes it is better to simply avoid using them in the array, thankfully that does not pose too much issues in the majority of cases."]},{"l":"USB passthrough","p":["In qemu, there are three main ways to achieve USB passthrough. Spice, VFIO and usb-host. When using usb-host we can passthrough either a hub device or a specific usb device. I have typically had poor experience using hub passthrough in the past so I would recommend preferring single device passthrough.","The most simple way to do this is typically the best, simply run lsusb and grab the VID:PID of the device you wish to passthrough, Then use -device usb-host to add it to the VM.","Instead of simply adding -usb we can add specific controllers instead, an example would be.","In some cases it might be more suitable to attach the device using it's address;","In other cases you can use the below command to passthrough via hostbus and host port, which is useful for passing through usb hubs. Finding the appropriate hub or device can be done using lsusb -t","It is always a good idea to append an appropriate ID to the device, in case of a keyboard, simply do id=keyboard in the case of a thumbdrive, you can do id=usb-drive. This is largely preference.","For using Spice,","It will be explained in more depth below, however in the spice client you will need to enable usb-passthrough and select the appropriate device there.","For VFIO,","Simply pass the appropriate USB controller through to the VM using vfio above. Using lsusb -t to locate the controller and lspci can be useful for determining what devices to passthrough.","USB devices can be hotplugged using the Qemu Human Monitor explained below."]},{"i":"low-latency-pipewirejack-audio","l":"Low latency PipeWire/Jack audio","p":["Using qemu, we can instead of using pulse audio backend, use jack. This is very useful since we can use jack for higher quality and lower latency audio, as well as a highly configurable two way audio. This is great because Bliss and other Android x86 operating systems have a quite high base latency.","Using jack you can manage to cut a round trip from 240ms to 200ms. It's important to remember that this is a Round Trip numbers, meaning the time it takes from audio to go from the host to the virtualized microphone, into Android, to the speakers, and back to the host. This is not the android -> host latency, currently this is not something tested. however it could be anywhere from 1/3 of this to 2/3 of this. This will assume using PipeWire since it is the easiest and most convenient option.","Using jack_lsp to list ports we can connect to the ports I am interested are","qemu uses regex to match, so here we want to choose a name that will match the devices we want, but not the extras","If you remove the out.connect-ports=Family,in.connect-ports=USB part of the command line, it will create an output not connected to anything. In this case you could either manually connect ports using helvum or PipeWire direcly, or you could setup a WirePlumber profile to handle automatic connections. however this is far out of scope","We can also do a bit more tuning by setting PIPEWIRE_LATENCY When we do this, we can actually ignore the output qemu tells us when it starts as if we check pw-top we can see that it is indeed running when we check pw-top","However jack is not the only options we have, we also have Alsa output. this is about as direct as you can get automatically outputs to headphones and microphone properly, and is still controlled via PipeWire. however audio quality of it can be greatly dependant on the host PC. so while not recommended you can try it by using -audiodev alsa,id=alsa0 instead of -audiodev jack,id=jack0...","Testing SDL audio output is fine, but is higher latency than Jack so it would be typically not recommended.","As for the emulated audio devices, AC97 is the lowest latency, but may suffer in audio quality. There are multiple other audio devices however at this time I do not have a method for testing latency in them. The recommendation for low latency audio is AC97 but for general use it is -device ich9-intel-hda -device hda-duplex.","This open the doors to advanced audio manipulation and high quality audio from Android. This can be useful for gaming as well as game recording since you could connect to a virtual device which could then be connected to both headphones and OBS.","This also opens the way for high fidelity audio though it is currently not recommended to go above 48000 hz on bliss at this time due to potential audio distorting."]},{"l":"EGL-headless for remote VMs","p":["Egl headless is useful for remote VMs. A remote VM being a virtual machine hosted on a separate machine that the user is connecting from. Much like -display sdl,gl=on or -display spice,gl=on this provides 3D acceleration. However unlike the two previous, this does not open a window on the server. This means you can use spice-app to connect to the VM over a network. It may also have lower preformance then the alternative.","You can use rendernode= to specify the GPU, this can be helpful to select a secondary GPU, or perhaps if you have many VMs running at the same time to spread the load across multiple GPUs.","Note: you can not at the current time use multiple -display arguments, so you will need either spice server, or some other remote graphics solution. (IE. scrcpy)"]},{"l":"Spice","p":["Spice is a method of interacting with VMs that can work both locally and over a network. It supports relatively advanced features such as usb redirection, video compression, and more. There are two ways to add spice to the VM, one for local machine, and one for remote machine. Below is an example of a local machine.","And below this is an example of a remote machine. It's important to remember to setup firewall and/or port forwarding to allow remote connections.","To setup usb redirection you can copy the below block into your config. For each device you want to be able to redirect, you need to add a chardev device and a usb-redir slot. These will let you dynamically change what devices you want to passthrough.","https://www.spice-space.org/spice-user-manual.html"]},{"l":"Human Monitor","p":["Instead of connecting tty to the terminal, we can also connect Qemu Human Monitor to the terminal. This is an interface that allows us to send commands to a running VM in order to interact with it. We can send shutdown and reset signals, add and remove usb and storage devices. As well as more advanced features like resize disks, dump the framebuffer (a sort of over glorified screenshot) and create VM snapshots. It is a very powerful tool and only some of the more common uses will be outlined here.","First thing is to add it to the VM. While with bliss it might be common to use -serial stdio, that will conflict with using qemu human monitor, what we instead want to use is -monitor stdio. If you need both, we can use -serial mon:stdio which will multiplex the serial connection and the qemu human monitor. You can swap between the two using CTRL + a then press c. That will swap between the serial and the human monitor.","When using spice, the human monitor will already be attached to it, so do not add commands to attach human monitor to qemu itself.","The other option you have is to connect either the serial connection or the monitor connection to a socket, then interfacing with it over said socket. However most people will likely not use this route. It is therefore recommended to simply use;","However a short list of examples alternatives are below, there are more options.","Now that we have the human monitor attached to the VM, we can get to some of the commands we can do with it. Below will be some commands with a brief writeup, to learn more about how to use the command read the link below;","https://qemu-project.gitlab.io/qemu/system/monitor.html"]},{"l":"Disk Optimization","p":["There is a LOT we can do for disk optimization! This section will be as condensed as possible while still giving you a good idea at what these features are doing. Because of this do not expect this section to be as clear as the other sections.Because there is a lot we need to cover here.","NOTE: If you want to run many VMs off of a single drive, or an array, your considerations may be very different and some of these will not apply for you! This section is written based on the assumption that one, or maybe a couple VMs are being run on the computer."]},{"l":"Qcow2 vs raw image","p":["When it comes to whether or not you should use qcow2 vs raw image, this really comes down to what you as a user want out of the images. First talking about performance. Raw vs Qcow2, under normal circumstances, should typically have similar performance. However, Qcow2 can certainly be slow under the right (or perhaps better put wrong) circumstances.","If you want a simple answer to the question \"Which format will give me the best performance?'' The answer is a raw image. If you don't want any advanced features or configuration like compression or snapshots, you can skip the rest of the disk section."]},{"l":"Preallocation","p":["Preallocation is put simply, how the VM decides to assign storage blocks when no data is actually inside of them. with preallocation=none no data is pre assigned. this means that the disk image is very small, and will grow as more data gets written to it. when you choose metadata it pre allocates space for metadata, this means an empty VM disk will take up more space then one with none.","In most cases, the user will probably just want metadata. as it gives the best performance to space and features. falloc and full preallocation will cause the VM to use up more space. however in accordance with the chart below, performance goes up when you go down the chain. But you do start to lose some features, as full will cause snapshots to no longer work."]},{"l":"Compression","p":["Using compression to save space on your image can be a very valuable tool. while there are multiple ways to do this, but the focus of this will be on using qemu-img's qcow2 compression, you can simply run qemu-img create -f qcow2 -o compression_type=zstd disk.qcow2 10G and this will create a zstd compressed disk image for you to use."]},{"l":"Cache Modes","p":["Qemu supports a variety of disk write cache modes. These cache modes can be changed to tweak I/O speed below are the ones qemu support, See the link below for an explanation on these. Using none will essentially be the best performance option.","https://documentation.suse.com/sles/12-SP4/html/SLES-all/cha-cachemodes.html"]},{"l":"Custom cache size","p":["With qemu we can set both cache size and l2 cache size","...disk.qcow2,cache-size=16M","...disk.qcow2,l2-cache-size=4M where 1M is good for 8Gb of random R/W. Areasize / (clustersize / 8) where default cluster size is 64kb. and area size is the total ammount of space you want cache to cover. 1/8th of 64kb is a nice 8kb.","In this example we can say we want 16gb of r/w headroom, we do 16gb / 8kb. An easier way to calculate this by hand would be scientific notation. This would be 32x10^9 / 8x10^3 = 4x10^6 = 4mb","Try increasing cluster size instead qemu-img create -f qcow2 -o cluster_size=2M.","Try mixing 2m cluster and metadata for a good blend of preformance!"]},{"l":"Backups and snapshots","p":["Utilizing snapshots is a key feature in doing development, as well as making sure that any downtime is minimal. This is particularly useful for preventing a corruption inside of the machine from causing a re-install.","There are two main ways of doing this, you can create a full backup of the drive. This is as simple as doing rclone. This does however waste a lot of space. What we can do instead is use qemu-snapshot.","Qemu-snapshot redirects the writes to a new image, so that you can save space. say you have disk.qcow2 you can run the command qemu-img create -f qcow2 -b disk.qcow2 disk-snap1.qcow2 and that will create a new image. Now you modify qemu to use disk-snap1.qcow2 it will read from disk.qcow2 but will never write to it. All modifications made are made in disk-snap1.qcow2. and to revert the snapshot, you can simply delete the disk-snap1.qcow2.","Another use of this is to do qemu-img create -f qcow2 -b base.qcow2 vm1.qcow2&& qemu-img create -f qcow2 -b base.qcow2 vm2.qcow2. by making two separate snapshots, we can now run multiple VMs each with their own unique writable disk, that is based on the base.qcow2. this is great for running multiple VMs without needing to waste space and setup time. REMEMBER writing to the base disk will corrupt the snapshots. It's a wise idea to change the permissions of the base disk to read only, this prevents user error. Even professionals with many hours can slip up and accidentally make an error. Remember to practice safe VM handling.","The above paragraph is about creating external snapshots which is great for when the VM is off, and should be done when you wish to create a new VM. However qemu also supports internal snapshots and live snapshots. The snapshots work internally in the single qcow2 (or qed) image. It may not be as flexible, however it is bother faster, and for many people more convenient and nice to use internal snapshots.","Using the human monitor above it is shown the commands savevm loadvm info snapshots these can be used to save, load and view the current snapshots available. Live snapshots save the entire state of the cpu, devices, Ram, as well as the entire disk contents, so the live snapshots can be a good amount larger. It is very akin to using an emulator \"save state\".","Removable devices can sometimes cause issues, so it's preferred to disconnect any before taking a snapshot and before loading one. However as long as all the devices are there when the snapshot is made and loaded it will be fine."]},{"l":"full device passthrough","p":["For passing storage devices to qemu there are multiple ways of doing so. To pass a sata controller, the most typical way of doing this will be via pci passthrough. You can accomplish this with the vfio instructions listed previously.","As for Nvme devices, you can actually do something similar, you can use vfio, however a better way of doing it would be to actually use qemu's built in functionality for this listed below","You can also passthrough raw block devices or better known as partition passthrough. you can pass it through a lot like you could with a standard file, an example is given below"]},{"l":"IoThread","p":["IO threads can help both raw and qcow2 when using virtio drives"]},{"i":"erofs-to-sfs-and-the-other-way-around","l":"EroFS to SFS and the other way around.","p":["Bliss is currently shipping with SquashFS or EroFS. EroFS has the best raw read speed of the supported read only filesystems. however it has a significant compromise in being the compression. EroFS only supports LZMA and LZ4 compression. LZMA is quite slow, and LZ4 doesn't offer great compression ratios.","So there are two reasons why you would want to recompress system.img using SquashFS or EroFS. The first one being wanting to simply shrink the the size of system.img.","if you have an eroFS image and want to compress it further, you may want to convert it to an SquashFS image. Likewise, if you have an SFS image, you might be better suited to convert it to EroFS if you want better performance if you are willing to sacrifice a bit of storage space.","If you wanted to keep using EroFS but use the slower but best in class compression LZMA, you could use the below sample."]},{"i":"qa-about-qemus-drives","l":"Q&A about qemu's drives","p":["https://events19.lfasiallc.com/wp-content/uploads/2017/11/Storage-Performance-Tuning-for-FAST-Virtual-Machines_Fam-Zheng.pdf"]},{"l":"Finishing Notes","p":["Handling multiple VMs efficiently can be a complicated topic, and is largely out of scope for this guide. This bit is just a few tips to make running more than a couple VMs a better experience. This would be a stopgap between a more professional solution such as proxmox or a libvirt. This is just a rough guideline, and may not apply across the board or when you scale up.","When installing Bliss, It might be a good idea to break up the Disks, you only need one system disks for the VMs if it's read only. This can save many gigabytes of data storage, and increase storage performance across the storage of any potentially affected drives.","Another good idea is to consider what VMs need persistent memory and which ones don't. If you are running many VMs at once, whether it be for a cloud solution or a more tailored setup, you may find that you don't want many, or even any of the VMs to retain any modifications to them.","It is highly recommend reading the free redhat docs on setting up and tuning VMs if you need more than what this guide offers. It will be a lot of reading. It will however be more valuable than most resources you can freely find on the internet. It should be the first stop for anyone wanting to actually learn more and implement these kinds of setups for yourself.","The next freely accessible resource is the oVirt forums, documentation, and most importantly Mailing list. oVirt is an enterprise grade solution built upon libvirt so many of the solutions and concepts will directly apply when using libvirt, and can be used to gain a further understanding of VM infrastructure in general.","https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_tuning_and_optimization_guide/index"]}],[{"l":"Install with Qemu Script","p":["This article is a guide to install Android Generic builds on Qemu. Bliss 14 at the current moment does not work. Gearlock causes resizefs errors that do not occur in the current Project Sakura build. There is a version of Bliss 11.13 that does have a working Gearlock in the BLISS OS telegram group.","Also tested is AOSP 12. with AOSP 12 you may need to boot with hwcomposer.drm to get it to work properly when using virgl graphics. currently default boot does not work, and while using gbm mesa, the android UI crashes when a mouse is drawn. so while a keyboard works. no mouse control even with a real mouse passed through to the VM. this is not an issue when using hwcomposer.drm. I recommend duplicating or editing the hwcompser.drm entry, remove 'DEBUG=2' from it. as it will allow usage as normal."]},{"l":"Background","p":["Qemu while simple in use, can be complicated to understand for beginners. This is because Qemu has a LOT of options for customization, many of which are useful, but more so that are not.","Qemu on windows as of time of writing this will NOT work on bliss 14. but may work on bliss 11. this is due to lack of software rendering on bliss 14. assuming Gearlock issues get fixed. in the mean time, use Project Sakura OS.","If you wish to use this guide on windows 10 or above, It may be possible to use WSL, however to get Qemu KVM support on WSL you will need a custom kernel. Another possible method is to use an unofficial patch from the qemu-3dfx project to get virgl working on windows. but at this current time. it has not been tested with any android generic project."]},{"i":"make-the-image","l":"Make the image.","p":["When you have Qemu installed be it on Linux or windows, you will have installed a plethora of Qemu related tools. the tool we need for this is qemu-img, Navigate to the folder you want your image installed in and run the following command.","qemu-img create -f qcow2 Bliss14.qcow2 20G","Breaking this down a little bit running qemu-img create is used to tell the program we want to create.","-f qcow2 is used to tell it we want to create the image using qcow2 format. qemu-img supports many formats so we want to specify this one.","Bliss14.qcow2 is the name of the image","20G is the image size."]},{"i":"make-a-script-to-run-the-vm","l":"Make a script to run the VM.","p":["Below is a sample bash script used to run Bliss14 in a Qemu VM","If you don't want an in-depth explanation, you can skip the next section, Just make sure to replace -drive and -cdrom with the proper disk image, and cdrom image for your use."]},{"l":"Explanation","p":["-audiodev pa,id=snd0 -device AC97,audiodev=snd0 this is needed to add audio to the VM. --audiodev pa,id=snd0 is used to create a pulseaudio backend with the id of snd0. this is important as we then use -device AC97,audiodev=snd0 to create an emulated AC97 audio device and attach it to the audiodev we created just before.","-bios /usr/share/ovmf/x64/OVMF.fd \\ is needed to tell Qemu to boot using UEFI, which is necessary as right now there is a bug that prevents android-generic based roms from being installed when in legacy mode. It is important to note that the location of this can vary depending on the host OS.","-cdrom images/Bliss-v11.iso \\ Just mount the iso for bliss, while we could use virtio driver for this, there is no real need to, because it's only use is installing the OS, this can be removed when the VM is installed","-cpu host This tells Qemu what CPU it should be trying telling the guest it is. Generally it is the preferred option. However in case you start to get instability -cpu qemu64 may be the option you need as it presents a very bare bones cpu to the VM. see qemu-cpu-models of the Qemu docs to learn more.","-device qemu-xhci,id=xhci tells Qemu what USB version to use, no need to change this","-device virtio-keyboard is for keyboard, no need to change anything here, usb-kbd also exists for using emulated keyboard instead.","-device virtio-tablet is one of two options for mouse capture the other being -device virtio-mouse using Tablet will allow you to use Qemu as if it were any other app, using virtio-mouse on the other hand will capture the mouse, and lock it to the VM. and to free it you will need to click ctrl+alt to free it. You may use usb-mouse or usb-tablet to use a emulated mouse and tablet instead of the paravirtualized ones. which incurs a very minor preformance hit. but also a measurable latency one.","-device virtio-vga-gl this is needed for graphics acceleration, and while you can add a plethora of arguments, none are really beneficial at this time.","-display sdl,gl=on This is used for the display, there are three main options here -display sdl,gl=on display gtk.sdl-on and -display spice-app,gl=on The difference between these are some features. each one has pros and cons, feel free to experiment. Though do take note that even if you close the VM's window with -display spice-app,gl=on the VM will still be running, you will need to kill it from the terminal.","-drive file=disks/bliss14-k54-gapps.qcow2,if=virtio \\ is how we mount the disk. Using this method instead of -hda lets us use virtio driver instead of emulated driver, giving us greater performance in the VM.","-enable-kvm tells Qemu to use KVM hypervisor, this is how we get near native CPU performance from our VM","-m 4096 -smp 4 tells Qemu How much ram to use, and how many cores to add the the VM","-M q35 This tells Qemu what Machine type to run as, we need to specify this as i440fx will not work it is simple too old.","-machine vmport=off \\ this option turns of vmware I/O emulation. this has caused me some bugs in the past, so I leave it off.","-net nic,model=virtio-net-pci -net user,hostfwd=tcp::4444-:5555 This really long command is the network command, -net nic,model=virtio-net-pci is what is used to add the network device to the guest in which case we are using virtio drivers again for best performance. -net user tells Qemu how to pass the network through and the argument hostfwd=tcp::4444-:5555 forwards port 4444 and port 5555 together, meaning if we open another terminal and type adb connect localhost:4444 we can get an adb connection to the VM.","-usb is used to tell Qemu to add a USB controller, no real need to give it any additional arguments","qemu-system-x86_64 is used to launch the program, there are various other commands that can launch different versions of Qemu, but this is the one we want in the majority of cases.","While this looks a little complicated, when we break this down we can see that it isn't. we are just telling Qemu what we want our virtual machine to have attached to it. if you don"]},{"l":"Install","p":["The rest of the installation is the same as real hardware. You should be able to proceed as normal."]},{"l":"Known Issues","p":["Currently we cannot properly set resolution using qemu and virgl. Because of this we need to manually edit the grub file in the VM to do so. There are a plethora of ways to do this. However the easiest is to use qemu-nbd to manually edit the grub entry and use video=1920x1080 to manually set resoltuon to 1080p. Change this value to a resolution that suits your needs.","Qemu does not currently support vulkan acceleration. While there was a work in progress patch that had support. It has not made it into qemu yet, nor does it seem like it will anytime soon. You may use physical gpu passthrough to get around this issue.","Qemu does not currently support video decode/encode acceleration. There is no news when this might be availible in qemu. You may use physical gpu passthrough to get around this issue."]},{"l":"Additional customizations","p":["Qemu is an incredibly powerful tool. this quick guide barely scratches the surface of some of the advanced customizations that are possible. if you are looking for more advanced features to step up your VM. To make it closer to a hardware install. Here are some potential further customizations that are possible with Qemu.","USB passthrough","EVDEV usb+mouse passthrough for easy switching","PCIe passthrough","egl-headless for remote VM's with graphics acceleration","emulate USB storage device","It may also be possible to use multiple virtual monitors, though this has not yet been tested.","This is all possible using virt-manager, or any other libvirt solution given they too support it. no guide has been written up for it yet."]}],[{"l":"Advanced Installation","p":["This is only for advanced users. For regular users, please visit our main Installation Guide found here."]},{"i":"custom-install---bliss-os-8x10x11x-uefiesp-64-bit","l":"Custom Install - Bliss OS 8.x/10.x/11.x UEFI/ESP (64-bit)","p":["Just as a reminder, Team Bliss is NOT responsible for any damage caused by this guide. By continuing, you automatically agree to these terms."]},{"i":"part-1---mounting-your-uefiesp-partition","l":"Part 1 - Mounting Your UEFI/ESP Partition","p":["You will want to make sure you can view hidden and system files in Explorer options. Once you do that, hit the start menu, and type in cmd. Once \"Command Prompt\" shows up, right click on it and choose \"Open as administrator\"."]},{"i":"cmd-is-not-showing-up-what-should-i-do","l":"cmd is not showing up, what should I do?","p":["Press the Windows key and the R key to bring up the \"Run...\" dialog. Type in cmd, and then press Ctrl-Shift-Enter. Press \"Yes\" on the UAC popup.","Run the following:","Then check to see if it is mounted already. Run \"Task Manager\" by either","Pressing Ctrl-Alt-Del and then clicking on \"Task Manager\", or","Pressing Ctrl-Shift-Esc","Click on \"File\", \"Run new task\", \"Browse\", \"This computer\", and SYSTEM (X or type in X: in the filepath bar. If you cannot access X:, then that could mean one of three things.","You have an ESP setup (follow the installation method below)","You have a legacy MBR setup","Your setup has a custom boot sequence"]},{"i":"part-1-alternate---esp-setup","l":"Part 1 (alternate) - ESP setup","p":["Windows 10 sometimes has an EFI partition already mounted under drive letter Z:, hidden. A very quick and easy way to access the ESP (EFI System Partition) in Windows 10 without using the command line is to start \"Task Manager\" (check above if you forgot the steps), and then click on \"File\", \"Run new task\", \"Browse\", \"This computer\", and SYSTEM (Z or type in Z: in the filepath bar).","Now go to boot/grub/grub.cfg and edit it accordingly with Notepad++ or another text editor. Save the file and your're ready to go!"]},{"i":"part-1-alternate---killing-the-explorerexe","l":"Part 1 (alternate) - Killing the explorer.exe","p":["Run cmd as admin and enter the following command:","This will kill the explorer.exe process - don't be surprised if it shows a warning. This step is sometimes required, because by default explorer.exe is ran by the currently logged in user, and it has to be run by the \"Administrator\" in order to view the mounted system drive. The \"Administrator\" account is not the same as an account with administrative privileges.","This will mount the system partition that usually consists of UEFI related files. X: is the letter of the drive - you can use whatever letter you want, but it has to be free for assignment. Then type:","This will run explorer as \"Administrator\" and will allow you to browse the mounted system partition.","The above may not work for all devices, as some handle UEFI differently."]},{"i":"part-2---uefi-installation","l":"Part 2 - UEFI installation","p":["Let's start by downloading the required files. Here is a customized UEFI boot for 32/64-bit machines.","Please note that if you came from our Nougat builds to our Bliss OS 8.x builds, you will have to edit the grub.cfg.","If you are using Bliss OS 8.x/10.x, please use the grub entry below as a guide:","If you are installing on ext3/ ext4, due to a bug in the install you will have to use the following grub entry setup:","Now that we have the partition mounted, we can copy that BOOT directory to your UEFI partition using explorer as the Administrator or by using the \"New Task\" dialog from Task Manager. (See above if you forgot the steps!) Once it is copied, go back to the Administrator cmd prompt and type:","or if you used Z:, type:","This will dismount the UEFI/ESP volume for safe reboot. We then suggest you use EasyUEFI here to create the UEFI boot entry. Open the app, and create a new entry. Select your UEFI partition, and in the \"File\" Path, click \"Browse\" and use the file manager window to browse to your BOOT/grub/grubx64.efi file. Click OK, and then choose the new grub entry and move it to the top. Make sure Secure Boot is turned off or else it likely will just boot back to Windows."]},{"i":"part-4---the-manual-blissification-of-your-pc","l":"Part 4 - The Manual Blissification of Your PC","p":["To do a manual \"Wubi like\" install of Bliss OS after you install the UEFI entry, you will need to open the Bliss OS .iso/.img with 7zip, and then drag all the .img& .sfs files to C:/android-x86 or whatever your target drive is (make sure your grub entries match where you are putting these). Then create your data.img. We suggest using a tool like RMXtools (use version 1.7) from XDA to create it. Check the tool's thread for detailed instructions. You will want to create your data.img inside that android-x86 folder.","You can now reboot if you have installed the custom UEFI entry right and selected it using EasyUEFI. You should boot right to the Android-x86 grub theme. There, you can use up and down to select, and return to boot that entry. You can also hit e to edit the selected entry. You will want to pay attention to which entry you select, since there will be one for Bliss-x86(32bit) and one or Bliss-x86_64(64bit)."]}],[{"l":"Collecting bug reports"},{"l":"Collecting Bug Reports","p":["This process is mostly the same as Android-x86 builds, but with a few additions that help things along. If you need to collect logs in order to submit a bug report, then the first thing you will want to do is reboot your Bliss OS install using debug mode. We do this through Grub with the command:","Once your device starts to boot, you will be presented with a root console, just before the Android systems init process starts. From here, you can use root commands to remount as read/write, or do basic filesystem and kernel debugging. In order to proceed to Android, you will need to type 'exit' followed by Return twice in the console, and the system will continue to boot.","While in debug mode, there are logs and dmesg found in both /tmp/ as well as /data/. You will need those logs to submit a bug report."]}],[{"i":"#","p":["Install Bliss OS from bootable USB Installer"]},{"l":"Install Legacy From Bootable USB"},{"l":"Introduction","p":["This is the current recommended method for beginners!","We recommend beginners to use this method as it is the least error-prone and non-destructive. The following instructions were adapted from the Android-x86 project, so some of the images are from them. To look at Android-x86's original installation guide, click here."]},{"l":"Download Bliss OS","p":["You can download a stable Bliss OS build from the website here."]},{"l":"Install Bliss OS","p":["If you are looking for a GUI based installer for Windows, we do include one in some of the .ISO's we produce, and we also support the Supreme-Gamers Advanced Android-x86 Installer. We also have a second option for Windows install that can be found on our repo here: Android-x86 UEFI Installer","When booting into the installer, choose \"Installation - Install Android-x86 to harddisk\":","Booting into the installer","Once the installer boots, you will be asked to select the target drive. Choose the NTFS drive that houses your current Windows install. You do not need a separate partition, as the installer will create an image on your Windows partition.","Choose partition","Choose \"Do not re-format\" on the next screen. It is important that you choose \"Do not re-format\", as any other option will cause the installer to continue with the \"Bootable installation method\", which will result in permanent data loss, including your Windows partition!","Do not reformat","Choose \"Yes\" when prompted about the GRUB bootloader:","Install GRUB","The installer will ask whether or not you want to make the system partition read/write-able. If you want to root your installation, you will choose \"Yes\" here. Otherwise, choose \"No.\"","Root installation","The installer will begin to write the changes to the disk. This will take some time. Go grab a coffee!","Grab a coffee","Then the installer will ask you how much space you want to allocate for the data image. Most users choose 8 GB, 16 GB, or 32 GB.","Congratulations! You should now have a functional dual-boot with Bliss OS!"]},{"l":"Install EFI From Bootable USB"},{"i":"download-bliss-os-1","l":"Download Bliss OS","p":["You can download a stable Bliss OS build by clicking on the link here, non-stable builds can be found here."]},{"i":"install-bliss-os-1","l":"Install Bliss OS","p":["And just like with legacy, The installer will begin to write the changes to the disk. This will take some time. Go grab another coffee!","Booting into the uefi installer","Congratulations! You should now have a functional UEFI-boot with Bliss OS!","Create a [new ] partition","First create the EFI partition, this is the partition that is used to install the bootloader.","for \"Size in Sectors\" all we need to do is enter +512M","Format Drive p1 Format Drive p2","Grab a coffee","If you are looking for a GUI based installer for Windows, we do include one in some of the .ISO's we produce, and we also support the Supreme-Gamers Advanced Android-x86 Installer. We also have a second option for Windows install that can be found on our repo here: Android-x86 UEFI Installer","In the next screen, we need to make two partiitons for this to work, as Bliss needs to install a bootloader to boot to. if you have a pre-existing install of linux, this step may be unnecessary.","Install Grub","Lastly we click [WRITE ] and [QUIT ]","leave First Sector default (Just press enter)","Next we need to make the second partition this is the partition that the bulk of android will be installed to.","Now that we have the drives partitioned, we can start to install android. Select the ANDROID partition that we have made before, and format it as ext4. this is the recomended format unless windows compatibility is need, in that case select NTFS. and click < Yes > on the next screen","Once the installer boots, you will be asked to select the target drive. You will need to choose what drive to install it too, this could be a pre-existing install of something, or a new drive, shown will be a new drive. you will need to select \"Create/Modify partitions\"","Partitioned","Partitioning p1","Partitioning p2","press down until the largest chunk of free space is slected, and click [NEW ]","Root installation","Set type as ef00","The installer will ask whether or not you want to make the system partition read/write-able. If you want to root your installation, you will choose \"Yes\" here. Otherwise, choose \"No.\"","The installer will procede to format and install android, you will then be prompted to install EFI GRUB2. we need to accept that, unless you have a pre-existing grub or other bootloader install","WARNING THIS WILL DELETE ANY DATA ON THE DRIVE","We can leave everything default. Although a name is not necesary we can call it ANDROID.","We don't necessairly need to name this partition, but it is best practice to name it EFI","When booting into the installer, choose \"Android-x86 ... Installation\":"]}],[{"l":"Install on Mac OS"},{"i":"triple-boot-macos-windows-and-bliss-os","l":"Triple boot macOS, Windows and Bliss OS","p":["(Thanks to @lconstantin for this guide)","Also, because you chose to install GRUB, rEFInd will get replaced with GRUB as the default boot manager on the EFI partition at this stage. You can choose not to install GRUB during installation and manually create a boot entry for Bliss in rEFInd which will not be explained in this guide.","Alternative: It should be possible to skip the Windows installation. Read at the end.","Alternative: It should be possible to skip the Windows installation. You can boot into macOS recovery and use the Disk Utility from there to resize the macOS partition and create a new partition for BlissOS formatted as FAT32 (macOS does not support many filesystems natively). You can then create the BlissOS bootable stick from macOS using UNetbootin instead of Rufus and also make sure you download rEFInd, unpack it and copy its directory to the stick. Then boot into recovery again, install rEFInd, boot into rEFInd to start the BlissOS installation. You can reformat the FAT32 partition as NTFS during the BlissOS installation and then follow all the steps. Install Grub. Go into recovery again, install rEFInd again and you're done.","At this stage if you reboot your system you will only see GRUB and you will only be able to boot into the Bliss OS installation. You need to reinstall rEFInd to restore booting into macOS and Windows. (In reality rEFInd is still there on the EFI partition, but not the default option anymore). Luckily you still have the rEFInd directory on your BlissOS bootable stick, so repeat the instructions from step 9 again to boot into macOS recovery, open terminal, navigate to the USB stick and run the ./refind-install script again. This will restore rEFInd as the default boot manager with all the options it had (the previous configuration doesn't get replaced.)","BACKUP ALL DATA with TimeMachine","Boot into Windows and download a) the latest version of Bliss OS, b) the latest version of the rEFInd boot manager and c) Rufus, a program for creating bootable USB sticks.","cd / cd Volumes cd BLISS-xx (the name of the USB stick) cd refind-xx (the name of the refind directory on the stick) ./refind-install","Choose the install option and go through the normal process ( detailed here). Select either the Windows partition or the new partition you created for Bliss (my case). Do not reformat. Choose YES when asked to install GRUB (this will replace rEFInd temporarily). Create the BlissOS data image with the size you want.","Disable FileVault (disk encryption in macOS). This can take a long time (hours) if you already have it turned on and sometimes it can result in a locked state where the filesystem is not fully decrypted and the option to turn FileVault on or off is greyed out. Recovering from this state might require wiping the entire SSD from macOS recovery. This happened to me and I couldn't find a solution. Apparently it's a fairly common problem as I found many reports online.","Download the Windows 10 installation ISO from Microsoft's website. It’s freely available.","However, note that rEFInd does not install an NTFS driver by default and does not install an ext3/4 driver either unless a Linux installation is present on the disk when rEFInd is installed. There are ways to fix this and include drivers (see rEFInd documentation on drivers), but it's easier to just use rEFInd to start GRUB which will boot Bliss regardless of whether it's on an NTFS or ext4 partition.","Install Rufus and create a bootable stick for Bliss OS using the ISO you downloaded earlier.","Launch Boot Camp Assistant and follow the instructions to install Windows using the downloaded ISO. The process will allow you to resize the macOS partition and will create the Windows partition called BOOTCAMP for you. When you choose the size of the BOOTCAMP partition please account for the extra space you will need for Bliss OS including its data. I wanted 32GB for the Bliss OS data image so I accounted for 50GB extra for BlissOS when choosing the size of the BOOTCAMP partition.","Note: I have not tried this multiboot process with FileVault enabled because I read FileVault does not play nicely with multiboot so I just decided to disable FileVault. I don't know if it might actually work with FileVault on, but probably not.","Note: Once Boot Camp is done installing Windows you will be able to boot into it and select it as boot option when the Mac starts up. At this point the system will still use Apple's bootloader, which by design is capable of booting Windows too.","Notes: If you created a separate NTFS partition, you could choose to format it as ext3/4 during the Bliss OS installation. If you choose this option the installer will no longer ask you to create a data image.","OPTIONAL: You have the option to either install Bliss OS on the same partition as Windows or you can resize the Windows partition using the Disk Manager in Windows and create a new partition for Bliss OS. I chose to resize and create a new partition of 50GB for Bliss OS and I formatted this new partition as NTFS.","Reboot and now you will see the rEFInd boot screen with multiple options for booting into macOS and Windows that will be automatically detected. Note: For macOS Big Sur and later the option that works is the one that says \"Boot macOS from Preboot.\" You can hide the other option by selecting it and pressing the - (minus) key. For Windows it’s the Boot with EFI option. You can hide the rest. You can test that booting into both systems works at this stage before continuing.","Reboot the Mac and keep COMMAND + R pressed during the booting process. This will boot into macOS recovery. Go to Applications > Utilities in the top bar and choose Terminal. This will open a terminal shell. Type:","rEFInd will also provide you with an option to boot into the Bliss OS stick if it’s plugged in. This will launch the GRUB bootloader that comes with Bliss OS and will show you multiple options: to start Bliss OS Live which can be used to test if Bliss works on your system or to install the OS to disk.","Remove the USB stick and reboot your system. You will now see the rEFInd screen again with options to boot into macOS, Windows and multiple options for BlissOS, which will be detected with a Linux icon. Choose the option that says Boot with /EFI/Android/grubx64 and you can hide the rest. This will launch the familiar GRUB screen with all the normal BlissOS boot options.","This will launch the rEFInd installation script and will install the boot manager.","Unpack the rEFInd zip and copy its directory to the Bliss OS bootable stick. DON’T SKIP."]}],[{"i":"#","p":["Try out Bliss OS before installation via live boot"]},{"l":"Live boot Bliss OS"},{"l":"Downloading Rufus","p":["Giving our Android builds a try on your PC is pretty simple and straight forward. To start out, let's head over to https://rufus.ie and download the latest version of Rufus (I use the portable version)","Download Rufus"]},{"l":"Using Rufus to flash your USB drive","p":["Once downloaded, plug in your USB drive, and launch Rufus and give it permissions to make changes to your device. Then press the \" Select\" button to browse for the .iso or .img file.","Using Rufus to flash the USB","Select the .iso by pressing the \" Open\" button on that dialog:","Selecting the iso","Once selected, keep all the rest of the settings as default and click the Start button:","Start flashing the USB using Rufus","It will then show an ISOHybrid dialog, we will want to select .iso mode:","Select ISO mode","There might also be a notice about Syslinux, asking to download something. Select \" Yes\" and it will then continue.","Notice, select yes","Once that is done, it may ask you to \" OK\" the cleaning of your USB drive. Please select \" OK\"","Clean USB, select OK","Rufus will then start to write the USB drive with what is on the Android .iso you downloaded. This process may take some time."]},{"l":"Rebooting from windows into your USB drive","p":["From Windows, hit the Start Button > Settings > Update & Security > Recovery and select the Restart Now button under Advanced Startup.","Advanced startup","This will start to restart your PC, and show a Blue screen (Metro bootloader) where you will want to select \"Use a Device\" Then on the next screen, your USB Drive should show up as either Bliss OS, Android OS or something to that effect. Select that, and it will reboot to grub and let you select the boot options to Live Boot Android from there."]}],[{"l":"Manual Install on Linux"},{"l":"Installation","p":["Create a directory at / as /blissos","Extract initrd.img, ramdisk.img, kernel and system.* from your desired blissOS ISO into the /blissos directory. ramdisk.img can be ignored for Android 10 and newer as it is already merged into the system (system-as-root).","Make a directory called /blissos/data. This will only work for ext4 filesystems, for NTFS and other filesystems or if you are having bootloop you need data.img, can be created with make_ext4fs.","Create a new grub entry with this the following code:"]},{"i":"example-for-making-a-8gb-image","l":"Example for making a 8gb image:","p":["Alternatively, one can use truncate","Here are some additional tips for installing BlissOS on Linux:","Do not try to install Bliss OS on exotic linux filesystems such ZFS, XFS, BtrFS, currently not every filesystem has built-in support in the Bliss OS kernel, ext4 is supported. If you install it on an unsupported filesystem, it will be stuck at Detecting Android-x86.... You will probably have to compile your own kernel and use a modified initrd.img to boot from other filesystems.","If you want read-write /system or being able to make changes to the system, simply extract system.img from system.img using a tool that support Zstandard compressed squashFS images. It can also be mounted.","For data.img, it would be good to repair/check filesystem regularly using command e2fsck -f data.img.","!!ATTENTION!! Bliss OS 14.3 and below versions also support Jaxparrow's Android-x86 Installer for Linux. Source can be found here: https://github.com/jaxparrow07/Androidx86-Installer-Linux"]}],[{"l":"Run from Docker","p":["We have gained support for running our images from Docker thanks to @sickcodes and his Dock-Droid project.","Our stable Android 9 based images are default, but you can load up a specific image as well (helpful for testing in a development environment)"]},{"i":"exerpt-below-taken-from-httpsgithubcomsickcodesdock-droid","l":"Exerpt below taken from: https://github.com/sickcodes/dock-droid"},{"l":"Initial setup","p":["Before you do anything else, you will need to turn on hardware virtualization in your BIOS. Precisely how will depend on your particular machine (and BIOS), but it should be straightforward.","Then, you'll need QEMU and some other dependencies on your host:","Then, enable libvirt and load the KVM kernel module:"]},{"l":"Quick Start"},{"i":"run-bliss-os-11x-image-httpsimgshieldsiodockerimage-sizesickcodesdock-droidlatestlabelsickcodes2fdock-droid3alatest","l":"Run Bliss OS 11.x Image https://img.shields.io/docker/image-size/sickcodes/dock-droid/latest?label=sickcodes%2Fdock-droid%3Alatest","p":["Increase RAM by adding this line: -e RAM=4 \\","Want to use your WebCam and Audio too?","v4l2-ctl --list-devices","lsusb to get the hostbus and hostaddr","Would be -device usb-host,hostbus=3,hostaddr=3","Want to use SwiftShader acceleration?","In development by BlissOS team: mesa graphics card + OpenGL3.2."]},{"i":"use-your-own-imagenaked-version","l":"Use your own image/naked version","p":["Use any generic ISO or use your own Android AOSP raw image or qcow2","Where, ${PWD}/disk.qcow2 is your image in the host system."]},{"l":"Custom Build"},{"l":"How to connect using ADB","p":["In the Android terminal emulator:","Edit /default.prop","Change ro.adb.secure=1 to ro.adb.secure=0","E.g.","In the Android terminal emulator, run adbd","Then from the host, you can can connect using either: adb connect localhost:5555","adb connect 172.17.0.2:5555","For further information, and even information. on a dockerized build environment for Bliss OS, please visit: https://github.com/sickcodes/dock-droid"]}],[{"l":"Syslinux EFI Stub Installation"},{"i":"use-syslinux-efi-to-run-bliss-os-7x10x11x12x14x","l":"Use syslinux EFI to run Bliss OS 7.x/10.x/11.x/12.x/14.x","p":["Thanks to @IcedCube for the original post! This method is NOT recommended as it is fairly bleeding-edge and experimental, but it should help booting on Chinese tablets that do not want to run grub.","Use a Linux installation for the following procedure."]},{"i":"part-1---grab-the-required-tools","l":"Part 1 - Grab the required tools","p":["Install unsquashfs(part of squashfs-tools)."]},{"i":"part-2---get-bliss-os","l":"Part 2 - Get Bliss OS","p":["Grab the latest build of Bliss OS 7.x/10.x/11.x/12.x/14.x"]},{"i":"part-3---get-the-syslinux-efi-bootstrap","l":"Part 3 - Get the syslinux EFI bootstrap","p":["Grab the .zip file from @IcedCube's original post, and extract it to the root of the USB drive. This will bootstrap syslinux EFI onto it.","Then, make a folder called android.","Now, open up the .iso in an archive program. Extract the following files form the root directory of the .iso image to the USB drive's android folder ( ramdisk.img is not used in Android 10+ ):","initrd.img","ramdisk.img","kernel","Extract system.sfs to a folder somewhere, such as /tmp.","Open a terminal and change directory (using cd) to /tmp. Run ls and confirm that system.sfs is shown in the file list. If there is no output, start over as the file is misplaced.","Run the following:","unsquashfs ./system.sfs","This will make a new directory called squashfs_root."]},{"i":"part-4---version-specific","l":"Part 4 - Version specific"},{"i":"if-you-are-using-bliss-7x","l":"If you are using Bliss 7.x","p":["Change directory to squashfs_root and run ls. There should only be one file - a system.img inside the directory. Copy the file to the USB's android folder."]},{"i":"if-you-are-using-bliss-10x11x12x14x","l":"If you are using Bliss 10.x/11.x/12.x/14.x","p":["Change directory to squashfs_root. The structure is a complete Android root filesystem. To install Bliss OS, the files will need to be in a system image. The following steps will guide you through creating a 2 GB system.img file, formatting it, mounting it, and copying the contents of squashfs_root into the new disk image.","Execute:","The sync command might take some time.","Now copy the /tmp/system.img file to your USB's Android folder."]},{"i":"part-5---creating-the-data-image","l":"Part 5 - Creating the data image","p":["First, find where your USB drive is mounted. It is usually in /mnt or /media(ex. /media/USB).","cd into the android folder.","We will create a 3 GB data image file. You can attempt to create a 4 GB image but FAT32 maxes out at 4 GB per file. If your system supports exFAT or NTFS, you may try and use it.","This will be an completely empty ext4 disk image, but will be enough to run Bliss.","Finally, check to ensure everything is in structured like so:","Need to add some kernel parameters? Open syslinux.cfg and add them before the initrd=/android/initrd.img statement.","Unmount the USB from your computer. Plug it into your device and use the BIOS to boot from your UEFI USB Drive, partition 1. If all goes well, you will get a black screen with small white text saying \"Booting Android...\" followed by loading files. You should get the Linux kernel text, then see the Bliss boot animation play after a couple minutes depending on your USB drive read/write speed."]}],[{"i":"updating-bliss-osag-builds","l":"Updating Bliss OS/AG builds","p":["Somethmes you might want to update your Bliss OS/AG install when a new release is pushed out. Doing this is simple, as long as you used our documented methods to install.","Bootable USB Method:","This process is exactly the same as when you installed, except now it will ask if you want to update and existing install instead.","Windows Installer Method:","Use 7-Zip to open the new .iso, and simply drag the kernel, initrd.img (and ramdisk.img if on Pie) to the install folder, overwriting the old ones, then in 7-Zip, double click on the system.sfs file and drag the system.img inside over to replace your existing system.img. If you only have a system.sfs file, replace that with the system.img, and delete the old .sfs file. Then reboot and boot into your newly updated release"]}],[{"i":"#","p":["For those that want to use the auto-install feature, there are a few things you should know first."]},{"l":"Using Auto-Install","p":["Android-x86's bootable USB Auto-Install feature will only work for Android 9 and below. and it requires a MBR or Legacy boot setup and not EFI.","It sets a fixed size for the data image and does not allow for proper root as well. So if you still require the use of Auto Install, please note that we do not support this method as it is outdated."]}],[{"l":"Using the windows installer"},{"l":"Using the Windows Installer","p":["We maintain an installer for Windows, but we still recommend using the standard EFI install method from our bootable USB in order to take advantage of the stability, security and updatability of Bliss OS builds."]},{"l":"Downloading the installer","p":["Start off by heading to the github repo for the installer and downloading the latest .exe usually found in the /bin/make_installer folder of that repo. https://github.com/BlissRoms-x86/Androidx86-Installer-for-Windows/tree/2.9.0.1/bin/make_installer","There is an .exe file in there named Androidx86-Installv29.0000.exe. That is the one you will need to grab. Save it to your Computer along with the latest Bliss OS/Bass .iso you wish to install along side Windows."]},{"l":"Installing Android","p":["When you launch the application, the UI is mostly self explanitory, but just in case, we will run through the steps here with you.","alt text","If you have a pervious install attempt that did not work for Bliss, Remix OS, Prime OS, etc. We recommend that you use the Cleanup option first before installing. This will help avoid any configuration or installation issues. This step will ask for verification, and confirm with a dialog when complete.","alt text alt text","From here, we can relaunch the installer or continue using it, and select the .iso by clicking the icon to the right of the Android OS Image field. This will open a Windows File Explorer window and let you navigate to your download and select the .iso.","From here, we can select the Target Drive, and then drag the Data Size slider to the space we want to use for our data.img (Android Data partition).","(!!PLEASE NOTE!!): The Extract option is only useful for users that want to be able to remount the system as RW. We provide an immutable root method (KernelSU) in all recent Bliss builds, so this option can be ignored.","When you are done setting up the build, go ahead and click the Install button. The process of the install will display at the lower lefthand side of the app window.","When complete, the installer will popup a dialog stating so."]},{"l":"Rebooting into Android","p":["In order to reboot into Android, we start off by entering Settings, and navigating to the System tab on the left, and scroll down, selecting Recovery on the right.","alt text","In the Recovery tab, you want to find the Advanced startup option, and click the Restart now button.","This will restart your PC into the Advanced Startup menu. You want to select the Use a device option","Followed by the Android OS option","From here, your PC should reboot into Grub, and display the Grub menu for the .iso you installed"]}],[{"l":"BlissEthernetManager"},{"l":"Setting Up Ethernet Interfaces","p":["If your version of BlissBass comes with the Eternet Manager, then you are able to setup multiple ethernet interfaces and configure them.","alt_text","Clicking on the Interfaces item allows you to select the target Ethernet interface to view/edit. You may need to click the refresh button at the top for changes to be reflected.","From there, you can set the interface as Up/Down, Unassigned/DHCP/Static, and depending on selection, you can set the interface IP, Gateway and DNS.","IP and Subnet mask are handled in the IP Address field (< IP Address>/< Subnet Mask>)","Gateway Address is handled through the Gateway Address field","DNS is handled through the DNS Addresses field"]},{"i":"bliss-ethernet-manager-aidl-interface","l":"Bliss Ethernet Manager AIDL Interface:","p":["The source package for BlissEthernet Manager contains the framework and system libs for the AIDL interface.","Gradle:","Java:","AIDLs:","alt_text"]},{"i":"bliss-ethernet-manager-adb-interface","l":"Bliss Ethernet Manager ADB Interface:","p":["We also supply a simple interface using the service framework provided by Android that allows you to set IP, DNS, and Gateway.","ADB Interface:"," is the method number in aidl","1: getAvaliableInterfaces","2: isAvaliable","3: Etc…","Examples:","getAvaliableInterfaces:","x86_64:/ # service call blissethernet 1 s16 eth0 Result: Parcel( 0x00000000: 00000000 00000002 00000004 00740065 '............e.t.' 0x00000010: 00300068 00000000 00000004 00740065 'h.0.........e.t.' 0x00000020: 00310068 00000000 'h.1..... ')","isAvaliable:","x86_64:/ # service call blissethernet 2 s16 eth0 Result: Parcel(00000000 00000001 '........')"]}],[{"l":"Setting Up Bliss Kiosk Launcher","p":["If your BlissBass builds comes with Bliss Kiosk Launcher, then you have the ability to restrict it’s access to various packages on the device, as well as set specific packages to auto-launch when booting the device into Lockdown mode (Intel Default), or locking the device while in Admin mode (Other Options > Intel - Admin)."]},{"i":"lockdown-mode","l":"Lockdown Mode:","p":["alt_text","In Lockdown mode, navigation bar, gesture handle and status bar are all disabled. The app drawer will only display allowed packages. Example:","While in Lockdown mode, you can access the Kiosk Launcher Settings by clicking the Exit button, and inputting the maintenance password set (default is: 123):"]},{"i":"admin-mode","l":"Admin Mode:","p":["This mode shows a sprocket next to the exit icon, and depending on boot mode, will also display the navigation handle and statusbar.","alt_text","Along with the app drawer containing all packages:"]},{"i":"configuration","l":"Configuration:","p":["Clicking on the sprocket from the home screen will launch the Kiosk Launcher Settings screen:","alt_text","From the settings screen, you can manage the Maintenance Password, Change whitelisted apps, and set which package you want to Auto Launch when Kiosk Launcher starts in Lockdown mode.","You can also test the Kiosk Launcher while within Admin mode to ensure functionality before rebooting to Lockdown mode."]}],[{"l":"Power management aidl"},{"i":"bliss-power-management-aidl-interface","l":"Bliss Power Management AIDL Interface:","p":["copy paste “ system_libs/bliss-power-framework.jar” from sample app","gradle:","java:"]},{"i":"adb-interface","l":"ADB Interface:","p":[" is the method number in aidl","1: reboot","2: shutdown","3: sleep"]}],[{"l":"XDA Threads","p":["We usually release our builds on XDA, so here are the running threads we are currently maintaining:"]},{"l":"Bliss OS","p":["Bliss OS 11.x - https://forum.xda-developers.com/bliss-roms/bliss-roms-development/bliss-os-pie-beta-preview-t3855917","Bliss OS 12.x/14.x - https://forum.xda-developers.com/android/software/bliss-os-x86-pc-s-12-x-development-t4004419"]},{"l":"Android-Generic Project","p":["AGP 1.x/2.x - https://forum.xda-developers.com/t/android-generic-project-pc-gsi-build-automation-toolkit.4132031/"]}],[{"l":"Build Filenames","p":["_k-xxxxx :- Kernel Branch - ex: k-kernel-5.4","_m-xxxxx :- Mesa Branch - ex: m-r-x86 (r/r-x86 means stock Mesa branch in current manifest)","App Services:","BlissOS-( Version)-( Device Type)-( Build Date)_k-( Kernel)_m-( Mesa)_( App Services)_( Extras).iso","Build Date:","Device Type:","Extras:","foss/gms/emugapps :- Apps Type","houdini/libvndk :- Native-Bridge Type","Kernel & Mesa:","Our Native-Bridge variations are also added to this section.","Sometimes we will include extras into the builds, and that identifier will show in the last section.","Stock - Normally barebones, minimal apps added. Perfect for product testing FOSS - Includes Free and Open Source app store solutions Gapps/GMS - Includes Google Play Services","The filenames we use contain some important information about what all is included in the builds.","This will be Bliss OS 11.x or 14.x, depending on what version of Android we are compiling.","This will be the julian date-time from when the compile started.","Version:","x86/x86_64 :- Device Type 32bit/64bit"]}],[{"l":"Desktop Mode","p":["We have a number of requests on how to use the included Desktop Mode.","Ways to enable Desktop UI:","enable Taskbar from the Quick Settings tile in the notification drawer.","Settings > Apps > Defaults > Home. And set Taskbar as Home. Then adjust Taskbar Settings through that app in its app drawer.","Launch the Desktop Mode app from any other launchers App Drawer to enable the Desktop UI experience separately from your current launcher"]}],[{"i":"#","p":["Frequently asked questions about Bliss OS"]},{"i":"faq","l":"F.A.Q."},{"i":"why-is-there-no-keymapper-included-in-bliss-os","l":"Why is there no keymapper included in Bliss OS?","p":["Q: Many users ask why is there no keymapper included in Bliss OS? A: We have not found any open source keymappers, so we won't put our users data in jeopardy just for that.","We are slowly starting to work with a small group of developers interested in creating an open-source on-screen keymapper for keyboard/mouse and gampads, so please spread the word about that and help us gain some interest.","For those lost as to why we want to ensure security there, a gaming keymapper will redirect any input from the users device, and can even run when a game is not loaded. So it has the potential to grab passwords, banking info, etc. We don't trust anything we can't sift through the source of enough these days, so this is why we haven't included one as of yet","Q: What is Android-Generic Project? A: Android-Generic Project is a collection of scripts, manifests & patches that allow for rapid prototyping of Android projects based off AOSP to produce generic images for Linux PC hardware as well as others. For a more in-depth description of the goals and progressions leading up to this project, please read This Blog Post","More Info:","Website - https://android-generic.github.io/","Documentation - https://android-generic-project.gitbook.io/documentation/"]}],[{"l":"Hardware Compatibility","p":["A Series - Mostly Supported (Needs SSE4.2) (Kernel 5.10+ recommended)","AMD Desktop GPUs - mostly supported + Vulkan","AMD:","Athlon Series - Mostly Supported (Needs SSE4.2) (Kernel 5.10+ recommended)","Core2Duo - Not Fully Supported (Needs SSE4.2) (May require 32bit builds)","houdini- Includes Intel's Houdini (Works with most Intel CPU's and some recent AMD CPU's)","How to identify Native-Bridge Types in ISO file ?","Intel / AMD iGPU - all supported + Vulkan (Iris requires Mesa 21.1.3+)","Intel Atom - Mostly Supported (Kernel 5.10+ recommended)","Intel Celeron M - Fully Supported (Kernel 5.4+ recommended)","Intel i Series (i3/5/7/9) - Fully Supported","Intel:","libndk- Includes Google's libndk-translation (Works on all CPU's, but not as efficient as Houdini)","Native-Bridge is an ARM translation layer for android x86 developed by Intel and Google to run ARM apps on x86 architecture.","Native-Bridge:","Nvidia Desktop GPUs - poor support - no vulkan (Uses Nouveau drivers)","Repo: https://github.com/BlissRoms-x86/CompatibilityList","Ryzen Series (1k-7k) - Fully Supported (Kernel 5.10+ recommended)","Supported CPU's:(as of 2022 Q4)","Supported GPU's:","We have updated our hardware support tracking and moved it to a repo of it's own along with a web frontend at: https://tested.blissos.org/"]}],[{"l":"How to Log","p":["For grabbing manual logs of issues in Android-x86/Bliss OS, we need to use the alt-f1 console or built in terminal and we need to know the storage location we want to save in. For the examples below, we have our external storage mounted at sdcard/.","For Bliss 15.x & 16.x: Use KernelSU app to grant su permissions to Termux, then open the built in Termux app, then enter:","su logcat sdcard/log.txt","Or, boot into the OS using DEBUG=2 from Grub, and the logs will be saved in /data after boot, or /tmp/log during early boot stages","For Bliss 14.x: Open the built in terminal app, then enter:","For Bliss 12.x: Use the alt-f1/f7 console, then enter:","logcat sdcard/log.txt","For Bliss 11: Use the alt-f1/f7 console, then enter:","After that is done, you can close the terminal app or use alt-f7 to get back to Android if you are using the Console, and use the File Manager to access your log and share it where needed."]}],[{"l":"Keyboard Shortcuts"},{"i":"bliss-os-keyboard-shortcuts","l":"Bliss OS Keyboard Shortcuts:","p":["A: Reply-all to current message (works only while inside the message)","Alt + Del: Delete an entire line","Alt + Esc: Back","Alt + Spacebar: Insert a special character","Alt + Tab: Switch to last app in stack (Holding Alt, and repeatedly pressing tab will scroll through recent apps)","Alt + Trackball-Down: Jump to bottom of inbox","Alt + Trackball-Down: Move cursor to bottom of page","Alt + Trackball-Left: Move cursor to beginning of line","Alt + Trackball-Right: Move cursor to end of line","Alt + Trackball-Up: Jump to top of inbox","Alt + Trackball-Up: Move cursor to top of page","Apps","Browsing","Ctrl + A: Select all text in the current field","Ctrl + Alt + Del: Open up Power Menu","Ctrl + B: Open bookmarks","Ctrl + C: Compose new e-mail","Ctrl + C: Copy text to clipboard (will copy all text on-screen unless specific characters are highlighted)","Ctrl + F: Find on page","Ctrl + H: View browsing history","Ctrl + I: Zoom in","Ctrl + J: Go back a page","Ctrl + K: Go forward a page","Ctrl + O: Zoom out","Ctrl + R: Refresh current page","Ctrl + S: Open browser settings","Ctrl + S: Open social network sharing menu","Ctrl + U: Refresh inbox","Ctrl + V: Paste text from clipboard","Ctrl + X: Cut text (will cut all text on-screen unless specific characters are highlighted)","Enter: Open an e-mail (from the main inbox list)","F: Forward current message (works only while inside the message)","Gmail","Prtsc: Create Screenshot","R: Reply to current message (works only while inside the message)","Scrolling","Shift + Del: Delete the character to the right of the cursor","Shift + Shift (press it twice): Activate caps-lock; press shift once more to exit","Shift + Spacebar: Page up in any Web page/document view","Shift + Trackball-Left/Right: Highlight text for cutting or copying","Spacebar: Page down in any Web page/document view","System","Typing","Win + B: Open browser","Win + C: Open contacts","Win + E: Open e-mail","Win + G: Open Gmail","Win + I: Open calendar","Win + M: Open maps","Win + P: Open music","Win + S: Open text messaging","Win + Y: Open YouTube","Win: Home key","Y: Archive message (works from within message or while on main inbox list)"]}],[{"l":"Sandboxing Apps","p":["Sometimes we have apps that check the system for root. In these cases, they will all fail their check unless you are running the app in a sandboxed environment. There are a couple aps we use to get around this."]},{"l":"Island","p":["https://play.google.com/store/apps/details?id=com.oasisfeng.island"]},{"l":"Shelter","p":["https://play.google.com/store/apps/details?id=net.typeblog.shelter"]}],[{"l":"Vulkan Mode","p":["In our Android 9+ versions, we include the ability to use a Grub command for enabling Vulkan mode on supported graphics hardware. However, from Bliss OS 14.10, you don't have to to worry about triggering this value as we removed VULKAN=1 from the OS."]},{"i":"to-initially-test","l":"To initially test:","p":["When your PC reboots, it's initially shows a grub menu. tap \"e\" to edit the current selection and add the VULKAN=1 to the end of the line that starts with \"kernel\", then follow the on-screen prompts to boot with those edits.","If it works, then edit Grub from your main OS, and add the flag there."]},{"i":"here-is-an-example-grub-menuentry-bliss-os-158x","l":"Here is an example Grub menuentry (Bliss OS 15.8.x):","p":["menuentry 'Bliss-x86 Test-Vulkan' --class bliss { search --file --no-floppy --set=root /AndroidOS/android.boot linux /AndroidOS/kernel root=/dev/ram0 SRC=/AndroidOS androidboot.selinux=permissive GRALLOC=minigbm HWC=drm_minigbm quiet DATA= VULKAN=1 initrd /AndroidOS/initrd.img }"]}],[{"l":"BlissOS for Surface devices","p":["This version is designed specifically for the Microsoft Surface devices. The kernel use almost the same LTS kernel but with extra patches from the linux-surface project to ensure the most compatibility.","While this build indicate that this is for Surface devices, not all devices need to use it. To know if your device need to install this build or not, go to this section of linux-surface wiki:","https://github.com/linux-surface/linux-surface/wiki/Supported-Devices-and-Features","If you see your device has the number that said Requires linux-surface kernel or Requires linux-surface kernel =x.x.x then this is the build you are looking for.","The Surface build of BlissOS also include iptsd, an userspace touch processing daemon for Microsoft Surface devices using Intel Precise Touch technology made by linux-surface team. If you have any issue with the touchscreen, try to Calibrate or tweak the daemon. Go to Calibrate and configure iptsd to know how."]}],[{"l":"BlissOS Go","p":["This variant is designed specifically for the low-end hardware that meet the minimum requirement to run BlissOS. While using the same LTS kernel as the Generic variant, we've added a few tweaks to the internal Android parts to make sure you can have a good experience even if your hardware is limited."]}],[{"l":"BlissOS Zenith","p":["BlissOS Zenith is the new flagship build of BlissOS. Zenith is a BlissOS variant that is intended for \"chasing the latest\". We will build this variant weekly with only the latest version of BlissOS that is available, combine with latest Stable kernel. BlissOS is intended for people who are having a new hardware that LTS kernel can't support, or people who just want to get latest stable kernel to run on their builds."]}],[{"l":"Advanced Android-x86 Installer","p":["Axon from Supreme-Gamers put together a great installer that works with MBR/EFI and installs on NTFS or EXT4. Advanced Android-x86 Installer","Notice Due to Advanced Android-x86 Installer using Grub2Win, we can not currently recommend using it. Grub2Win is a GPLv3 licensed project that has made the decission to limit its userbase by blocking specific regional installs. This action goes against GPLv3 and we will not support the actions the developer has chosen."]}],[{"l":"Gearlock"},{"l":"Gearlock Info","p":["Gearlock Developer Documentation: https://supreme-gamers.com/gearlock/","Gearlock-dev-kit git link (for cloning): https://github.com/axonasif/gearlock-dev-kit","Gearlock-kernel-pkg: https://github.com/axonasif/gearlock-kernel-pkg","Gearlock (main repo for the new vendor/gearlock used in Bliss OS 11/14/AG 11 builds): https://github.com/axonasif/gearlock"]},{"l":"Supported Gearlock Extensions","p":["Bliss OS devs do occasionally create Gearlock Extensions also, and those can be found here: https://sourceforge.net/projects/blissos-dev/files/Android-Generic/PC/gearlock_extensions/","You can also find more extensions on the https://supreme-gamers.com/r/ site. Not all of those are compatible with our versions of Android, so please read carefully."]},{"l":"Gearlock Kernel Commands","p":["(these are passed through Grub CLI)","Gearlock kernel command lines:","NOSC=0 Disables supercharging","NOGFX=0 Skips loading Gearlock GPU drivers at recovery-mode (needed for vulkan and old-modprobe modes)","NORECOVERY=0 Disables recovery countdown","ALWAYSRECOVERY=0 Enters Recovery by default","To disable bootsound you have to use gearlock > more > settings > bootsound Or you can also use your own by editing /[data] [system] /ghome/.gearlockrc"]}],[{"l":"Linux Android-x86 Installer","p":["Advanced and easy to use Advanced Android x86 installer for Linux.","Developed with Python for linux.","User Xtr has also created a solution for recent versions of Bliss OS/Android-Generic Project. That can be found on aur: https://aur.archlinux.org/packages/android-x86-installer-tauri-bin","Source: https://github.com/jaxparrow07/Androidx86-Installer-Linux"]}],[{"l":"Debug Booting","p":["There are a few ways to debug booting and we will run through a few of them here.","First is to hit \"e\" when the grub selection screen shows up, and try and boot by removing the \"quiet\" from your grub entry.","The second option would be to boot in debug mode by adding DEBUG=1 or DEBUG=2 , both represent a lower level of logging. See Example below:","You will need to enter \"exit\" once or twice when using debug mode to procede to the following steps of the boot process.","If the animation never starts, add \"nomodeset\" to the grub command to force software rendering and hardware compatibility mode. See Example below:","Once you are able to get things to boot, use the alt-f1 /f7 console or the local Terminal app and the Logcat command to log things, su logcat sdcard/log_name.txt","When done, copy and paste the entire log either to Hastebin or Pastebin"]},{"i":"if-init-starts-but-never-boots-to-installer","l":"If init starts, but never boots to installer:","p":["This typically happens on newer CPU's and requires you to install ising either our Windows based installer:","Android-x86 Installer for Windows","or using a Linux based installer:","Android-x86 installer for Linux","If you are trying to install within VMWare or VirtualBox, we don't suggest doing so as it will not be hardware accellerated. Please use QEMU based emulator,like:","qemu-windows","For more advanced debugging information:","Please follow the advanced debugging procedures found on Android-x86 documentation https://www.android-x86.org/documentation/debug.html"]}],[{"l":"Debug Graphics","p":["When booting into Bliss for the first time, some users may see a blinking cursor, scrambled graphics, or black screen. These are all signs that your device requires some configuration to get things to run.","Android-x86, AG & Bliss OS builds all come with a configurable graphics stack that can be used through Grub CLI."]},{"i":"the-main-options-for-configuration-are-as-follows","l":"The main options for configuration are as follows,"},{"i":"gralloc","l":"Gralloc:","p":["GRALLOC=gbm - Uses GBM interface (Vulkan mode default)","GRALLOC=minigbm - Uses Minigbm interface","GRALLOC=intel - Uses Intel minigbm interface","GRALLOC=none - Force no Gralloc interface"]},{"i":"hw-composer","l":"HW-Composer:","p":["HWC=drm - Standard for versions <= Android 9","HWC=drmfb - Use drm-framebuffer insead","HWC=intel - Used Intel IA HWC","HWC=none - Force no hwcomposer definition"]},{"i":"grub-examples","l":"Grub Examples:"}],[{"l":"How to edit grub from your Bliss OS install","p":["Follow these steps to edit EFI from rooted Bliss OS"]},{"i":"step-1","l":"Step 1:","p":["Boot into Bliss OS and select \"DEBUG mode\" from the grub menu. Once boot completes, press enter"]},{"i":"step-2","l":"Step 2:","p":["To list devices:","blkid","Assuming device is /dev/sda, Identify EFI partition number (should have boot flag):","parted /dev/sda print","if you have nvme disk your EFI partition should be like this:","/dev/nvme0n1p1","You must use this partition for bottom commands.","Mount your EFI partition (usually first partition in disk):","mount /dev/sda1 /mnt"]},{"i":"step-3","l":"Step 3:","p":["Change directory to /mnt/efi/boot:","cd /mnt/efi/boot"]},{"i":"step-4","l":"Step 4:","p":["Edit the android.cfg using vi editor:","vi android.cfg"]},{"i":"step-5","l":"Step 5:","p":["Use Vi Editor to add your changes and save- Press insert to enter edit mode- Press Esc, type :w, and press Enter to save.- Press Esc, type :q, and press Enter to exit.","Also you can combine save & exit with :wq"]},{"i":"step-6","l":"Step 6:","p":["Now you can umount efi partition and reboot to see your changes:"]}],[{"l":"How to mount ext partition on boot","p":["User cjeu100 put together a script that works well from our Android 9 builds. Follow the link below to head to that post.","How to mount partition on boot:","https://forum.xda-developers.com/bliss-roms/bliss-roms-development/bliss-os-pie-beta-preview-t3855917/post83243055"]}],[{"l":"How to mount internal NTFS partition on boot"},{"l":"Method 1","p":["It is possible to automatically mount disks at boot. There may be other ways to do this, but one way to do it is:","1) Write the commands for creating a folder and mounting the disk in a text file which will be a bash script file.","`#!/system/bin/sh","mkdir /mnt/folder_name mount.ntfs /dev/block/partition_name /mnt/folder_name`","Here 'partition_name' could be any of the disk you want to mount like for example sda1 devb1 etc. and 'folder_name' is the folder where you want to mount the disk.","2) Place the script file under /system/etc/init.d. You can name the file anything you want, but it should not have any extension i.e. .txt or any other extension must be removed.","3) Reboot and enjoy ! Use a file manager like Mixplorer which can bookmark the mounted locations for easy access. The disks should now be mounted automatically at every boot."]},{"l":"Method 2","p":["Mount all NTFS Partitions on boot (mostly automated script)","Steps:","1) Open Terminal 2) create a \"mountfs\" file with the conetents below and place it under /system/bin 3) Then from a terminal: su chmod 777 /system/bin/mountfs 4) Then type mountfs 5) Done"]}],[{"l":"Microsoft Surface IPTS Gearlock Package","p":["If you have a Microsoft Surface device and touchscreen support is not enabled by default, this likely means that your device requires a special kernel for support.","Getting the Kernel:","You should use the latest Generic i3/5/7/9 ISO (11.13/14.3) which comes with Gearlock, then download the surface kernel from SupremeGamers resource site ( https://supreme-gamers.com/t/android-x86-kernel-for-microsoft-surface-based-on-linux-surface-patches.389/). and install it after initial boot from Gearlock Recovery mode.","If you need to reset your IPTS touchscreen while the system is running:","Open the alt-f1/f7 console, or built in terminal, and type:","su rmmod ipts_surface rmmod intel_ipts modprobe intel_ipts modprobe ipts_surface"]}],[{"l":"Not booting after install on Linux","p":["For Linux users that are able to boot our Android 10/11 builds in Live mode, but things fail to boot once installed, this is caused by a bug in our data detection scripts. try to remove the data/ folder from the install location, and replace it with an ext4 data.img","Example for making a 8gb image:","dd if=/dev/zero of=data.img bs=1 count=0 seek=$[1G*8]"]}],[{"i":"remount-system-as-readwrite","l":"Remount system as Read/Write","p":["(Credits go to Knoxville and others from Telegram for this method)","For remounting, we need to use the alt-f1 console or built in terminal.","For Bliss 15.x: Boot with DEBUG=1, and mount remount the install partition:","or if you want to backup original system image","Now we sync the filesystem and reboot:","Upon reboot, you will have R/W on system","Once we have a system.img and no system.sfs, we need to use the built in terminal app (with su permissions granted), and type:","Then look for the /dev/loop# where we see mounted at \"/\", likely followed by \"ext4 ro....\". Note that as we will need to use that for the next command. Now type:","Or for older Bliss versions ( 14.x, 11.x) use:","Then you can edit the system files you need. When you are done, you can remount as RO:","Then test to verify changes stick","Video Walkthrough Watch this video for detailed instructions.","https://youtu.be/hA1SjE3kTfQ"]}],[{"l":"Sound Issues","p":["0 [HDMI ]: HDA-Intel - HDA Intel HDMI HDA Intel HDMI at 0xb0610000 irq 46 1 [PCH ]: HDA-Intel - HDA Intel PCH HDA Intel PCH at 0xb0614000 irq 44","For some users, the simple sound fixes don't work. This means we will need to go into experimental mode on the issue. This method was provided by cjeu100 From XDA-Developers threads.","Go to Home, open the Volume Boost app and boost it to 15%-25% and test","In this example, the we picked the top one, (pcmC0D7). If that doesn't work, repeat these steps and choose a different card.","Install \"Volume Booster GOODEV\" or any other sound booster app","now you see your sound devices","On Bliss OS builds < 15.8.8:","On Bliss OS builds <= 15.8.8, we have different drivers we can try (1/2). We use the snd-intel-dspcfg.dsp_driver=# cmdline option to switch between those drivers on boot:","Open Play Store","Open the AudioFX app if installed and turn it off","Option 1","Option 2","Option 3","Option 4 - (Advanced)","Option 5 - snd-intel-dspcfg.dsp_driver","Start by using the alt-f1 console (use alt-f7 to get back) or the Terminal app (may require you to run Remount System as Read/Write first) and type following commands:","The initial way we should troubleshoot is to first see if it is a volume issue. Typically, you can install an app like Goodev Volume Booster, and that will add gain to the main sound channels.","There is also tools added to Gearlock Recovery that can help with most sound issues. Read the details about that here.","This will list all the devices that have been detected on the device. Search the output for anything sound related. If you see multiple audio or sound drivers loaded, refer to Option 1 to boost gain, otherwise you can reload the modules:","This will restart the audio server and hopefully result in sound working with the right output. Use alt-f7 to get back to the Android UI and test.","This will solve most sound issues.","Using the alt-f1/f7 console from Android 9 or a terminal app from Android 11/12, we can run:","When running our builds on real hardware, sometimes the sound is not detected properly. We can troubleshoot this issue a number of ways."]}],[{"l":"Touch orientation"},{"l":"Touch Orientation"},{"i":"requirements","l":"Requirements:","p":["System mounted as RW","Booted into Debug mode (or using root and terminal)","Knowledge on how to use common linux commands like cat, ls, etc."]},{"i":"process","l":"Process:","p":["First, you are going to want to get your device uevent from /sys/class/dmi/id/uevent:","Then find a good string to look for from it, like we do here","Your device may also require a couple accel opt_scale options too. Example:","Once done, save the file and reboot. If it works, please submit the changes as a PR to our device_generic_common repo"]}],[{"l":"Wifi Issues","p":["For many users, wifi is not detected right on boot. If you are using a build that is pre Kernel-5.x, you can try and add the grub option \"AUTO_LOAD=old\". If you are using a newer kernel (5.0+), make sure your device has native support included in the kernel. Some devices may also require the grub option \"VULKAN=1\" or \"GRALLOC=gbm\" too.","If it's not working, you can provide your wifi card info to us for help, or you can submit a pull request to our kernel-drivers repo with the proper Linux driver modules for your device ( https://github.com/BlissRoms-x86/external_kernel-drivers). If you don't know the card name you can try to provide lspci or lsusb (for usb cards) output for us by typing the command into the Terminal (with root)","su lsusb sdcard/lsusb.txt"]}],[{"l":"Calibrate and configure iptsd","p":["After you did that, you can restart iptsd and try out your new calibration.","Also check out this iptsd.conf sample if you want reference for manual tweaking.","AspectMax: 2.323","AspectMax(Default: 2.5)","AspectMin: 1.021","AspectMin(Default: 1.0)","Create a file /data/vendor/ipts/90-calibration.conf with a text editor of your choice, and enter the above values like this:","If you have issues with iptsd not detecting a particular gesture or contact, you should repeat this process and only do the gesture that iptsd has problems with. Then compare the reported values with the ones from your earlier run and adjust them accordingly.","In this case the new values would be:","NOTE: During the calibration, palm rejection is not active! So dont put your palm on the display. If you can, detach the display from the keyboard.","Once that is done you can run the calibration tool.","SizeMax: 0.859 cm","SizeMax(Default: 2.0 cm)","SizeMin: 0.425 cm","SizeMin(Default: 0.2 cm)","The first thing you need to do is stop iptsd. Grant Termux root permission using KernelSU Manager and then :","The palm rejection of iptsd relies on measuring the size and aspect ratio of every contact and then comparing these values to a reference to determine whether the contact is valid or not. The default values will try to cover the finger size of most people, but it is possible (and recommended) to tune these values to better match your fingers. This by extension will also improve palm rejection.","The values that are interesting for calibration are:","The values will update as soon as you touch the display and iptsd registers a contact. You can now start the actual calibration process. Touch the screen with each of your fingers, one time pressing hard and one time pressing lightly. Then put all your fingers on the display at the same time. You should also do some common gestures like pinch-to-zoom or swiping across the display with three or four fingers, since gestures tend to deform the contact. If you only press your fingers straight on the display, iptsd will detect touches fine but will fail to detect gestures.","There is no need for extensively long contacts. Keeping the finger on the display for a long time won't improve calibration accuracy, since you only need a minimal and a maximal value. But it has the potential to introduce noise into the calibration process which will distort the Min/Max values. 3000 to 4000 samples should be plenty.","This section is a copy of linux-surface iptsd wiki with a few edit for BlissOS's iptsd. If you have any trouble with configuring iptsd, please file a bug report here for BlissOS 14 & 15 and here for BlissOS 16+. You can also file a bug report at the main iptsd repo.","To calibrate iptsd, you need to measure the size of your own fingers and then input those values into the configuration file of the daemon. But before you go away and grab a ruler (or just go away), wait! To make this easier, iptsd includes a tool that will do these measurements for you: iptsd-calibrate.","When you are done with the calibration, you should see something like this in the terminal:","You will see something like this:"]}],[{"l":"Configuration Through Command Line Parameters","p":["Bliss OS (and the Bass builds) utilizes an expanded configuration layer, our Broad Apparatus Support System (Bass for short) allows one generic .iso to be configured through kernel command line parameters on a per-device basis. This allows end users to fine tune the performance of the OS to the capabilities of the device."]},{"l":"Intro to Kernel Command Line Parameters","p":["We use Grub, Refind, or other Linux bootloaders to boot the device once installed. The menu entry is how we also pass many of our parameters for configuring the device as well. Here is an example of a typical menu entry for Grub for Bliss OS 15.8.x:","The line we are targeting for our configuration is the one that starts with “ linux /AndroidOS/kernel”. Here are some of the explanations for the configs we support.","If your Grub menu entry looks a little different, and has some of the commands at the top, you can also edit there to add your configuration preferences."]},{"i":"supported-parameters","l":"Supported Parameters:","p":["Warning: Note that not all of the configs listed here are available in the open-source Bliss OS source, but are available through licensing the Android-Generic Project add-on for that feature, or licensing the use of our Bass builds or Bass source (which comes with most available AG add-on's) for your organization","Here are a few of the supported parameters that we support, organized by stack."]},{"i":"debugging","l":"Debugging:","p":["This will enable logging or low level debugging console before the system starts to boot Android.","This is a root console, and can be used for testing or troubleshooting. Pressing exit, twice will continue with the Android boot process.","Command:","DEBUG=*","Options:","1: high-level debugging console (logs to /tmp/log)","2: low-level debugging console (logs to /data/log.txt & /tmp/log)","You will also need to enable the console if you wish to use alt-f1/f7 virtual consoles:","Example:"]},{"i":"graphics-stack","l":"Graphics Stack:","p":["This includes a number pf parameters that we can use to customize the stack to our hardware's capabilities."]},{"i":"hardware-composer","l":"Hardware Composer:","p":["This allows us to include multiple hardware-composer options, and select the ones we want to target per-device.","By default, if you set HWC without anything like HWC=, Bliss will use drmfb-composer","Command:","HWC=*","Options:","drm: Use drm_hwcomposer","drm_celadon: Use Project Celadon's fork of drm_hwcomposer","drm_minigbm: Use drm_hwcomposer with minigbm support","drm_minigbm_celadon: Use Project Celadon's fork of drm_hwcomposer with minigbm support","Example:"]},{"i":"gralloc","l":"Gralloc:","p":["We pair up our Gralloc options to work with certain HWC options.","Command:","GRALLOC=*","Options:","gbm: This is gbm_gralloc and it's compatible with drm & drm_celadon","gbm_hack: This is gbm_gralloc but with a HACK commit to fix some issue with iris or nouveau. It's compatible with drm & drm_celadon","minigbm: This is minigbm and it's compatible with drm_minigbm, drm_minigbm_celadon","minigbm_arcvm: This is minigbm but made specifically for virgl by Google, compatible with drm_minigbm, drm_minigbm_celadon","minigbm_gbm_mesa: This is minigbm made by rsglobal which he tried to port gbm_gralloc philosophy to minigbm. Compatible with drm_minigbm, drm_minigbm_celadon","Example:"]},{"i":"gralloc4-configurations","l":"Gralloc4 Configurations:","p":["In some cases, we are working with hardware that requires Gralloc4 specs. We can force minigbm to use Gralloc4 by using:","GRALLOC4_MINIGBM: Force using gralloc4 with minigbm (only compatible with drm_minigbm_celadon)"]},{"i":"angle--software-rendering","l":"ANGLE & software rendering","p":["ANGLE is available in BlissOS 14.10 and above, if you have a device that can use Vulkan, you can try ANGLE with Vulkan backend using ANGLE=1.","Alternatively, you can also use SwiftShader Vulkan with ANGLE as a software rendering solution if you are running it inside something like a virtual machine by setting nomodeset ANGLE=1 or HWACCEL=0 ANGLE=1","There's one more option for software rendering, which is the legacy SwiftShader EGL, simply set nomodeset or HWACCEL=0 to use it.","For some virtualized methods uses, you may have a blinking cursor artifact that shows on screen. To remove this artifact, include the following boot flag: vt.global_cursor_default=0","NOTE: You may want to turn on Color Inversion when using software rendering because the color might be inverted"]},{"i":"media-stack","l":"Media Stack:"},{"i":"video-encodersdecoders","l":"Video Encoders/Decoders:","p":["By default, BlissOS will use AOSP's codec2 software decoder. We also offer a few various options that allow you to select different video decoders stack options:","CODEC2_LEVEL: This will set the C2 level (default value is 4, you can disable codeec2 completely with '0').","FFMPEG_OMX_CODEC: This will enable OMX version of FFMPEG codecs (disable codec2 with CODEC2_LEVEL=0 to use this codecs).","FFMPEG_CODEC2_PREFER: This will force Bliss to use codec2 version of FFMPEG codecs by default.","FFMPEG_HWACCEL_DISABLE: This will disable hardware accelleration for the FFMPEG codecs.","FFMPEG_CODEC_LOG: This will show more log of FFMPEG codecs, enable if you want to debug it","FFMPEG_CODEC2_DEINTERLACE& FFMPEG_CODEC2_DEINTERLACE_VAAPI: configuring deinterlacing option for FFMPEG codec2, you can find the options in this commit made by Micheal Goffioul","OMX_NO_YUV420: This will force the system to not use YUV420 color format on OMX codec (fixes some black or glitchy screens, use it with CODEC2_LEVEL=0)","FFMPEG_CODEC2_DRM: turn on/off DRM prime handle on ffmpeg codecs, 0 is the default because not any Gralloc supporting it."]},{"i":"networking","l":"Networking:","p":["We include the ability to have Ethernet appear as WiFi as some appli/cations will not work without a WiFi or Cell connection present. In order to enable this mode, we use the VIRT_WIFI boot flag: VIRT_WIFI=1"]},{"i":"disk-access","l":"Disk Access:","p":["(Available on Bliss OS 14.1x, 15.8.x, & 16.x) For use cases where you are dual booting or sharing system resources with multiple drives, you might want to enable automatic mounting of all disks within Android: INTERNAL_MOUNT=1: Allows device to mount other internal drives on boot."]},{"i":"usbpci","l":"USB/PCI:"},{"i":"usb","l":"USB:"},{"i":"usb-modes","l":"USB Modes:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","Switch USB mode (ADB/Storage) !! Requires kernel configs !!:","FORCE_USE_ADB_CLIENT_MODE: Forces client mode adb settings","FORCE_USE_ADB_MASS_STORAGE: Forces USB mass_storage mode"]},{"i":"power--memory","l":"Power & Memory:"},{"i":"power","l":"Power:"},{"i":"default-sleep-mode-options","l":"Default Sleep Mode Options:","p":["deep: This option will choose the deepest sleep state supported by the hardware.","Example:","mem: This option will choose the memory state.","nonvs: This option will not save non-volatile storage (NVS) to disk before entering S4 sleep.","off: This option will choose the off state.","old_ordering: This option will use the old ACPI sleep state ordering.","s2idle: This option will choose the S2 idle state.","s3_bios: This option will use the BIOS-provided S3 sleep state.","s3_mode: This option will use the kernel's own S3 sleep state.","s3bios: This option will choose the S3 BIOS state.","s3standby: This option will choose the S3 standby state.","s4_nohwsig: This option will disable the ACPI hardware wake signal for S4 sleep.","sci_force_enable: This option will force the ACPI SCI interrupt to be enabled.","shallow: This option will choose the shallowest sleep state supported by the hardware.","The default value for acpi_sleep is s3_bios, and the suggested value for most devices is s3_mode.","The default value for mem_sleep_default is deep, and the suggested value for most devices is shallow","The following are the options for acpi_sleep(suggested values are in bold):","The following are the options for mem_sleep_default(suggested values are in bold):"]},{"l":"Other Sleep Mode Options","p":["There are a number of other Linux kernel command line options that can be used to configure sleep mode settings. Some of these options include:","acpi_sleep_default: This option specifies the default sleep mode for the system. The possible values are:","s3: Standby mode","s4: Hibernate mode","s5: Off mode","Example:","suspend_console: This option specifies whether to suspend the console when the system enters sleep mode. The possible values are:","on: The console will be suspended.","off: The console will not be suspended.","no_console_suspend: This option specifies that the console should not be suspended when the system enters sleep mode. This option overrides the value of the suspend_console option.","SUSPEND_TYPE: Set suspend type. options: mem, disk, freeze mem, freeze disk","PWR_OFF_DBLCLK: Set power off double click. options: true,false","SLEEP_STATE: Override default sleep.state property for the device"]},{"i":"intel-power-options","l":"Intel Power Options:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","INTEL_PSTATE_CPU_MIN_PERF_PCT/INTEL_PSTATE_CPU_MAX_PERF_PCT: Allow for adjusting intel_pstate max/min freq on boot by setting the min/max pref percent","Example:","CPU_ENERGY_PERFORMANCE_PREF: Allow for adjusting cpu energy performance Normal options: default, performance, balance_performance, balance_power, power","INTEL_PSTATE_STATUS: Set cpu scaling at boot (ie set pstate status to active/passive at boot)"]},{"i":"generic-power-options","l":"Generic Power Options:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","SET_SCREEN_OFF_TIMEOUT: Set screen off timeout. options: integer in milliseconds","SET_SLEEP_TIMEOUT: Set screen sleep timeout. options: integer in milliseconds","SET_POWER_ALWAYS_ON: Set power always on. options: true or false","SET_STAY_ON_WHILE_PLUGGED_IN: Set stay on while plugged in. options: true or false"]},{"i":"generic-performance-options","l":"Generic Performance Options:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","FORCE_POWER_PROFILE: Sets the power_profile value. Options: ondemand, hotplug, interactive, performance","FORCE_IO_PROFILE: Sets the io_profile value. Options: ondemand, hotplug, interactive, performance","FORCE_CPU_GOV: Sets the cpu_governor value. Options: ondemand, hotplug, interactive, performance","FORCE_CPU_SCALING_GOV: Sets the cpu_scaling_governor value. Options: ondemand, hotplug, interactive, performance","FORCE_GPU_SCALING_GOV: Sets the gpu_scaling_governor value. Options: ondemand, hotplug, interactive, performance","FORCE_THERMAL_THROTTLE_ENABLE: Sets the thermal_throttle_enable value. Options: (true|false)","FORCE_HW_TIMEOUT_MULTIPLIER: Force hw timeout multiplier, # X 5s. Options: (integer)"]},{"i":"memory","l":"Memory:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","Example value: \"100\"","Example value: \"1024\"","Example value: \"1024M\"","Example value: \"128\"","Example value: \"16\"","Example value: \"256\"","Example value: \"32\"","Example value: \"512\"","Example value: \"512M\"","Example value: \"64\"","FORCE_ENFORCE_MIN_FREE_MB: Sets the enforce_min_free_mb value","FORCE_MAX_FREE_MEMORY: Sets the max free ram limit","FORCE_MEMORY_TRIM_ENABLE: Sets the memory_trim_enable value Options: (true|false)","FORCE_MIN_FREE_MEMORY: Sets the minimum free ram limit","FORCE_OOM_SCORE_ADJ: Sets the oom_score_adj value","FORCE_SCHED_MIN_ACTIVE_PAGES: Sets the sched_min_active_pages value","FORCE_SCHED_MIN_DIRTY_PAGES: Sets the sched_min_dirty_pages value","FORCE_SCHED_MIN_FREE_PAGES: Sets the sched_min_free_pages value","FORCE_SCHED_MIN_INACTIVE_PAGES: Sets the sched_min_inactive_pages value","FORCE_SCHED_MIN_RECLAIMABLE_PAGES: Sets the sched_min_reclaimable_pages value","FORCE_SCHED_MIN_UNRECLAIMABLE_PAGES: Sets the sched_min_unreclaimable_pages value","FORCE_SCHED_MIN_WRITEBACK_PAGES: Sets the sched_min_writeback_pages value"]},{"i":"lmkd","l":"LMKD:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","Default for low-RAM devices = 10, for high-end devices = 20","Default for low-RAM devices = 30, for high-end devices = 100","FORCE_KILL_HEAVIEST_TASK: Kill heaviest eligible task (best decision) vs. any eligible task (fast decision). Default = false","FORCE_LMK_CRITICAL: The possible values of oom_adj range from -17 to +15 (Default=0).","FORCE_LMK_ENABLE: Force enable LMK Daemon Default = false (unless device is detected to have less than 2GB RAM)","FORCE_LOW_MEM: Forces the low_mem mode in Android to the specific true/false value Default = false (unless device is detected to have less than 2GB RAM)","FORCE_MINFREE_LEVELS: Use free memory and file cache thresholds for making decisions when to kill. This mode works the same way kernel lowmemorykiller driver used to work. AOSP Default = false, Our default = true","FORCE_PSI_COMPLETE_STALL_THRESHOLD: The complete PSI stall threshold, in milliseconds, for triggering critical memory notifications. If the device receives critical memory pressure notifications too late, decrease this value to trigger earlier notifications. If critical memory pressure notifications trigger unnecessarily, increase this value to make the device less sensitive to noise.","FORCE_PSI_PARTIAL_STALL_THRESHOLD: The partial PSI stall threshold, in milliseconds, for triggering low memory notification. If the device receives memory pressure notifications too late, decrease this value to trigger earlier notifications. If memory pressure notifications trigger unnecessarily, increase this value to make the device less sensitive to noise.","FORCE_SWAP_FREE_LOW_PERCENTAGE: Level of free swap as a percentage of the total swap space used as a threshold to consider the system as swap space starved.","FORCE_SWAP_UTIL_MAX: The max amount of swapped memory as a percentage of the total swappable memory. When swapped memory grows over this limit, it means that the system swapped most of its swappable memory and is still under pressure. This can happen when non-swappable allocations are generating memory pressure which can not be relieved by swapping because most of the swappable memory is already swapped out. The default value is 100, which effectively disables this check. If the performance of the device is affected during memory pressure while swap utilization is high and the free swap level is not dropping to Sets the swap_free_low_percentage, decrease the value to limit swap utilization.","FORCE_THRASHING_LIMIT_DECAY: The thrashing threshold decay expressed as a percentage of the original threshold used to lower the threshold when the system doesn’t recover, even after a kill. If continuous thrashing produces unnecessary kills, decrease the value. If the response to continuous thrashing after a kill is too slow, increase the value.","FORCE_THRASHING_LIMIT: Number of working set defaults as a percentage of the file-backed pagecache size used as a threshold to consider system thrashing its pagecache.","High end: 10 Low end: 50","High end: 100 Low end: 100","High end: 70 Low end: 200","Other options available for specialized builds:","Recommended: 700","The higher the score, more likely the associated process is to be killed by OOM-killer. If oom_adj is set to -17, the process is not considered for OOM-killing."]},{"i":"logginglogd","l":"Logging/Logd:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","SET_MAX_LOGD: Sets the maximum logd value","Options: 1 = on, 0 = off","SET_LOGCAT_DEBUG: Enables logcat debugging","Options: true, false"]},{"i":"ota-updates","l":"OTA Updates:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","SET_CUSTOM_OTA_URI: Sets the custom URL for OTA updates","Example:","SET_CUSTOM_OTA_URI=https://192.168.1.1/updates/update.json"]},{"i":"features","l":"Features:"},{"i":"kiosk-mode","l":"Kiosk Mode:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)",": This will add or remove the specified quick settings tile.","0: Disables the recent apps menu.","1: Displays up to 1 app in the recent apps menu.","2: Displays up to 2 apps in the recent apps menu.","3: Displays up to 3 apps in the recent apps menu.","4: Displays up to 4 apps in the recent apps menu.","5: Displays up to 5 apps in the recent apps menu.","all: This will restore all default quick settings tiles.","FORCE_DEFAULT_QS_TILES: Sets the config_defaultQsTiles value Options:","FORCE_DISABLE_NAV_HANDLE: Force disable gesture navigation handle. Options: (true|false)","FORCE_DISABLE_NAV_TASKBAR: Force disable navigation taskbar. Options: (true|false)","FORCE_DISABLE_NAVIGATION: Force disable navigation bar. Options: (true|false)","FORCE_DISABLE_RECENTS: Force disable SystemUI recents. Options: (true|false)","FORCE_DISABLE_STATUSBAR: Force disable statusbar. Options: (true|false)","FORCE_ENABLE_CLEAR_ALL_RECENTS: Sets the config_enableClearAllRecents value Options: (true|false)","FORCE_HIDE_NAVBAR_WINDOW: Force hide navigation bar window. Options: 0, 1","FORCE_SET_MAX_RECENTS: Sets the config_maxRecents value Options:","none: This will remove all default quick settings tiles.","Other options available for specialized builds:"]},{"i":"launcher-options","l":"Launcher Options:","p":["USE_LAUNCHER3: Forces Launcher3 to be set instead of secondary launcher in build","SET_SMARTDOCK_DEFAULT: Set's SmartDock as default launcher when booting into Desktop specific builds (requires a build with SmartDock included by default)","ENABLE_QUICKSTEP_TASKBAR: Set quickstep taskbar features to enabled (requires dev-options to be enabled & Launcher3 to also be enabled). options: true,false","FORCE_DESKTOP_ON_EXTERNAL: Enable desktop mode on external display (required for MultiDisplay Input). options: 0,1"]},{"i":"rotationorientation","l":"Rotation/Orientation:","p":["SET_SF_ROTATION=*: Sets surfaceflinger hardware rotation property to the value passed","SET_OVERRIDE_FORCED_ORIENT=*: Override forced orientation (true/false)","SET_SYS_APP_ROTATION=*: Forces system app rotation, and has three cases:","1.force_land: always show with landscape, if a portrait apk, system will scale up it","2.middle_port: if a portrait apk, will show in the middle of the screen, left and right will show black","3.original: original orientation, if a portrait apk, will rotate 270 degree"]},{"i":"misc","l":"Misc:"},{"i":"battery-stats","l":"Battery Stats:","p":["androidboot.fake_battery=true: AOSP implementation of fake battery status","(Available through Android-Generic Add-On & add-ons for Bass builds)","SET_FAKE_BATTERY_LEVEL: Let us fake the total battery percentage Options: (0-100)","SET_FAKE_CHARGING_STATUS: Allow forcing battery charging status Options: (0|1)"]},{"i":"package-management","l":"Package Management:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","With our package management features, we have the ability to also enable/disable various packages included in the system by default using the kernel cmdline.","Example: HIDE_APPS=com.termux,com.android.dialer,com.android.documentsui"]},{"i":"hideunhide-default-apps","l":"Hide/Unhide Default Apps:","p":["HIDE_APPS: Hides the apps via passed comma separated list","RESTORE_APPS: Restores the apps via passed comma separated list"]},{"i":"usb-mode-functions","l":"USB Mode Functions:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","Allows switching default USB/ADB functions via cmdline","FORCE_USE_ADB_CLIENT_MODE: Forces USB into ADB Client mode (0=off, 1=on, 2=ADB enabled but not touching USB options)","FORCE_USE_ADB_MASS_STORAGE: Force enable ADB Mass Storage mode ofver USB (0=off, 1=on)"]},{"i":"iio-options-configuration","l":"IIO Options Configuration:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","This allows us to set ro.iio.* propertied through the following flags:","SET_IIO_ORDER: Sets ro.iio.accel.order property","SET_IIO_ACCEL_QUIRKS: Sets ro.iio.accel.quirks ptoperty","SET_IIO_ACCEL_X_OPT_SCALE: Sets ro.iio.accel.x.opt_scale property","SET_IIO_ACCEL_Y_OPT_SCALE: Sets ro.iio.accel.y.opt_scale property","SET_IIO_ANGLVEL_QUIRKS: Sets ro.iio.anglvel.quirks property","SET_IGNORE_ATKBD: Sets ro.ignore_atkbd property","SENSORS_FORCE_KBDSENSOR: Option to force kbd sensor","SET_IIO_MAGN_QUIRKS: Option to force magn quirks. Example: SET_IIO_MAGN_QUIRKS=no-trig,no-event"]},{"i":"set-timezone","l":"Set Timezone:","p":["(Available through Android-Generic Add-On & add-ons for Bass builds)","To use this change, pass the grub/cmdline value for your timezone using the SET_TZ_LOCATION flag. Timezone reference can be found here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones","Example:"]},{"l":"Serial IO","p":["(Available through Android-Generic Add-On & add-ons for Bass)","SET_USB_BUS_PORTS: Sets permissions for tty ports (chmod 666) for /dev/bus/usb/*. Example: SET_USB_BUS_PORTS=001/001,001/002,001/003,001/004","SET_TTY_PORT_PERMS: Set USB bus port permissions (chmod 666) for /dev/tty*. Example: SET_TTY_PORT_PERMS=ttyS*,ttyACM*"]},{"i":"network--radio-control-options","l":"Network & Radio Control Options:","p":["(Available through Android-Generic Add-On & add-ons for Bass)","Enable/Disable Wireless Devices (Change included only in specialized builds):","LOCKDOWN_WIRELESS_DEVICES: A kernel level switch to disable all wireless devices. options: 0,1","UNLOCKDOWN_WIRELESS_DEVICES: A kernel level switch to enable all disabled wireless devices. options: 0,1","Other Networking Options (Available in Bass builds):","FORCE_DISABLE_ALL_RADIOS: Set force disable all radios (only disables on boot, user can re-enable manually if given access). options: 0,1","FORCE_BLUETOOTH_SERVICE: Set force bluetooth service state. options: enable, disable"]}],[{"i":"gui-method-build-bliss-os-14x","l":"[GUI Method] Build Bliss OS 14.x"},{"l":"1. Setting up the environment","p":["This first part will go over the steps needed to sync and setup your Build Environment for Bliss OS 14.3 source. If you have done that already, you can skip to the next section. Setting up your build environment can also be done the easy way , and for that, we can use EZ-AOSP. For Ubuntu, use MikeCrigs' repo, or for MX-Linux, use My repo, and continue at “Grabbing the Source” when done. Otherwise, we have the manual steps below.","System Requirements","Installing Java 8","Grabbing Dependencies","If you plan on building the kernel with the NO_KERNEL_CROSS_COMPILE flag, you will need to also have gcc-10+ installed:","Setting up your credentials","The first thing you should do when you install Git is to set your user name and email address. This is important because every Git commit uses this information, and it’s immutably baked into the commits you start creating:","Grabbing the Source","(This is where EZ-AOSP leaves off)","We will need to create a folder for our project, then init the manifest, and sync the repo, and we do all that in a few simple terminal instructions:","Although we are doing our best to help you learn, it never hurts to become a bit more versed in building AOSP. so be sure to also check out: AOSP building instructions"]},{"i":"2-how-to-include-android-generic-project-into-your-project","l":"2. How to include Android-Generic Project into your Project:","p":["Now all we have to do is clone AGP into the vendor folder."]},{"l":"3. Using AGP with Bliss OS","p":["Now that AGP is cloned into the project, we start it up like so:","That's it! It will initially generate the menu items with what is available for modules on initial launch","Since Bliss OS is already setup as a project, we don’t really need to use any of the other “Project Setup” options (01-06), and we will normally go straight to option 10-build-options. Double click on that.","This will launch the main build menu, which contains all the options related to the build commands. From here, things pretty much match the main AGP instructions. Here’s a quick rundown of what they all do from here:"]},{"l":"Build Options","p":["(This segment uses content from Android-Generic Project documentation. Please refer to that for further details: https://android-generic-project.gitbook.io/documentation/android-generic-project-using-with-bliss-os-source)**** This menu will show the various build options for compiling your project through AG.","Based on what Product you selected prior to selecting this option, the script will compile the resources needed to include Rusty-Magisk into your build","Enable Rusty-Magisk","FOSS- Free & Open Source apps from Aurora Droid & Aurora Store (and microG client) (x86/x86_64/arm64) GMS- not implemented by default EMU-Gapps- Proprietary gapps extracted from Google's Emulator images. (x86_64 only) Vanilla- No added apps or services","Make Clean Before Build- Will add \"make clean\" to your build command and have it run every time you start the build. No Kernel Cross-Compile- Will add the override for NO_KERNEL_CROSS_COMPILE and allow you to build the kernel using GCC 10/11 from your installed system instead of using AOSP or your ROM's GCC","None- No changes to Native Bridge aside from what Android-x86 includes by default Intel's Houdini- Will pull the latest supported ChromeOS recovery image, and extract the Houdini & Widevine files from that and include in your build. Google's libndk-translation- Will need manual setup of vendor/google/emu-x86 before using. Follow readme from that project (we were unable to reproduce results of extracting super.img automatically)","Run Make Clean","Select Apps Type","Select Extra Options","Select Make Type","Select Native-Bridge Type","Select Product Type Selecting this will ask you what device type you plan on targeting (PC: android_x86 / android_x86_64)","Select Variant Type","Selecting this option will allow you to choose what kind of final image you would like.","Selecting this will ask you what build variant type you plan on targeting (user, userdebug, eng)","Selecting this will immediately run the \"make clean\" command on your project. Clearing the PRODUCT_OUT folder","Selecting this will present the options for included Apps type","Selecting this will present the options for Native-Bridge.","Standard .iso Image- generic .iso for MBR/EFI EFI .img file- Builds .iso for using in EFI devices RPM Linux Installer- Compiles as an .rpm installer for linux based systems and will install in a folder on the linux drive.","Start The Build","This command is dependent on all previous options and will also save/reload your last used build command (all the options selected in this section above), then run the build command in the terminal. From this point forward, any errors will need to be resolved manually.","This will contain only options that can be interchangeable (affected with only an export or build environment variable)"]}],[{"i":"#","p":["Instructions on how to build Bliss OS yourself"]},{"i":"build-bliss-os-11x","l":"Build Bliss OS 11.x"},{"l":"Introduction","p":["This is the official guide to build Bliss OS for PCs. In this guide, we will only cover building for x86 & x86_64 devices. We will also go over the details of using the patch system for testing and recompiling a build with a different kernel branch.","The golden rule to building is patience. If something breaks, pay attention to the console output or take logs of the issue and ask for guidance in our build support chat.","Let’s get started."]},{"l":"Preparation","p":["To get started, you need a computer with Ubuntu 18.04 (LTS), at least 200GB space of HDD, and at least 8GB RAM. A decent CPU (or CPUs if you have a server motherboard) is recommended. Other distros can work but is not officially supported in this guide.","Underpowered machines may crash during compilation. If that happens, you may try and restart the build as most crashes are caused by lack of memory. If your storage space has run out, then you will need to build on a different hard drive."]},{"l":"Install the JDK","p":["Install OpenJDK:"]},{"l":"Install build tools","p":["To install the required build tools, run the following command:"]},{"l":"Install source code tools","p":["Now we need to get the source code via a program named repo, made by Google. The primary function of repo is to read a manifest file located in Bliss OS's GitHub organization, and find what repositories you need to actually build Android.","Create a ~/bin directory for repo:","The -p flag instructs mkdir to only create the directory if it does not exist in the first place. Now download the repo tool into ~/bin:","Make repo executable:","And add it to PATH:","Scroll to the end of the file and type these lines:","Ctrl-O and enter to save, then Ctrl-X to exit nano. Now either logout and login again (or reboot), or source the file:","Which can be shortened to:"]},{"i":"what-is-source","l":"What is source?","p":["source is a bash command to read aliases, functions, and commands from the specified file. Typically, you'll supply bash with a configuration file such as .bashrc or .bash_profile, or an initialization file such as envsetup.sh. The difference is that while the configuration file lists configuration and user-defined aliases and functions, initialization files typically hold build commands such as breakfast, brunch, and lunch. Without those commands building would be significantly harder as you would have to memorize the long command to invoke a build manually!","But why do you need to run it after modifying a file? Well, bash cannot automatically detect changes in our files. To solve this, we either source it or log out and log back in, forcing bash to reload configuration files. Keep this in mind, because unlike configuration files, if you forget to source initialization files, build commands will not function!"]},{"i":"what-if-i-need-repo-globally","l":"What if I need repo globally?","p":["If you need the repo tool to be available anywhere, you will need to first download repo to your home directory, move it with sudo and give it executable permissions. The exact commands are as follows:","repo will now work anywhere, without any .bashrc modifications. However, these steps aren’t recommended as repo might become a security risk if a vulnerability is found.","Now we’re ready to download the source code."]},{"l":"Download","p":["Create a directory for the source:","Before we download, we need to tell repo and git who we are. Run the following commands, substituting your information:","Now, we’re ready to initialize. We need to tell repo which manifest to read:","-b is for the branch, and we’re on p9.0-x86, Android Pie. It’ll take a couple of seconds. You may need to type y for the color prompt.","Sync repo :","Problems syncing? :","-j is for threads. Typically, your CPU core count is your thread count, unless you’re using an older Intel CPU with hyperthreading. In that case, the thread count is double the count of your CPU cores. Newer CPUs have dropped hyperthreading unless you have the i9, so check how many threads you have. If you have four threads, you would run:","-c is for pulling in only the current branch, instead of the entire history. This is useful if you need the downloads fast and don’t want the entire history to be downloaded. This is used by default unless specified otherwise.","repo will start downloading all the code. That’s going to be slow, even on a fiber network. Expect downloads to take more than a couple hours.","To find out how many CPU threads you have, run nproc."]},{"l":"Easy build instructions","p":["This will build an x86 based .ISO for PCs.","Usage: $ bash build-x86.sh options buildVariants blissBranch extraOptions Options:","BuildVariants:","BlissBranch:","ExtraOptions:","To start, you must first use the -s (--sync) flag, then on following builds, it is not needed. Initial generation of the proprietary files from ChromeOS are also needed on the first build. We are able to use the -r (--proprietary) flag for that. This step needs to be on its own because the mounting process requires root permissions, so keep a look out for it asking for your root password.","First you must sync with the new manifest changes:","This will do initial patching. Some of the patches will show as already applied or conflict. This is normal behavior and will not effect the build process if you continue to the next step without addressing any of the conflicts.","The only times you should worry about the conflicts is when you are adding or changing patches in vendor/x86.","Next step is to download the proprietary files from ChromeOS:","After that, you can build your release file:"]},{"l":"Advanced build instructions","p":["Set up the build environment:","This is the initialization file we talked about earlier up top. This \"initializes\" the environment, and imports a bunch of useful build commands required to build your device. Again, you need to remember to source this file every time you log out and log back in, or launch a new bash/Terminal instance.","Define what device you’re going to build. For example, the Nexus 5X, has a codename of bullhead. You can check your specific device's codename on GitHub or on Google. Execute:","For 32 bit devices:","For 64 bit devices:","Let's break down the command. lunch initializes the proper environmental variables required for the build tools to build your specific device. Things like BLISS_DEVICE and other variables are set in this stage, and the changed variables will be shown as output. x86 or x86_64 is the specific device we are building. Finally, userdebug means that we will build a user-debuggable variant. This is usually what most ROMs use for publishing their builds. Manufacturers typically use user which disables most of the useful Android Logcats."]},{"i":"my-device-isnt-booting-and-userdebug-wont-print-any-adb-logcats-what-gives","l":"My device isn't booting, and userdebug won't print any adb logcats. What gives?","p":["There is a third build variant called eng, short for engineering builds. These builds will activate adb logcat during boot, and will show you exactly what is going wrong, where, and why. However, these builds are NOT recommended for normal usage as they are not securely hardened, have log spam that will slow down your device, and other unexpected problems like userspace utilities crashing during runtime. If you want to submit your device for mainline, do NOT submit an eng build!","If this is the first time you're running the build, you're going to want to run the proprietary build command first from the easy build instructions. Alternatively, you could also run those commands manually.","Then:","After that is complete, we can start the main building process. Run:","mka iso_img","And the build should start. The build process will take a long time. Prepare to wait a few hours, even on a decent machine."]},{"i":"why-mka-and-not-make","l":"Why mka and not make?","p":["make only runs with 1 thread. mka is properly aliased to use all of your threads by checking nproc.","If you want to customize your thread count (maybe you're building with a fan-screaming laptop in a quiet coffee shop), use make -j#, replacing the hash with the number of threads (example of make -j4)."]},{"l":"After building","p":["There are two outcomes to a build - either it fails and you get a red error message from make, or it succeeds and you see the Bliss logo in ASCII. If you encounter the former, you need to go back and fix whatever it's complaining about. Typically, 90% of the time the problem will be in your device tree. For the other 10%, submit a bug report to the ROM developers. Be sure to include the full log of your build to help diagnose the problem, and your device tree.","If you face the latter, congratulations! You've successfully built Bliss ROM for your device. Grab the artifacts for your device:","In here, you’ll find an .iso that goes along the lines of Bliss-v11.9--OFFICIAL-20190801-1619_x86_64_k-k4.9.153_m-18.3.5-pie-x86-llvm80_f-dev-kernel.org.iso."]},{"l":"Changing the target kernel branch","p":["Sometimes, you might be working on a device that requires a different kernel branch. In order to switch kernels effectively on Bliss OS, they need to be compiled with the OS at build time."]},{"l":"Switching the kernel branch","p":["Start off by entering the kernel folder","Then pull all the available kernel branched from your target repo. In this case, we are using the default BR-x86 repo","Then after that is finished, we need to checkout our target branch, and in this example we are choosing our k4.19.50-ax86-ga branch, which has added commits from the GalliumOS project for Chromebooks","Next step is to clean out any configs or generated files from the previously checked out kernel. To do this, run these commands","Once that is done, we can cd back to our main project folder","And run our build command again to generate the .iso with the target kernel we selected"]},{"l":"Using the patch system for testing","p":["We use a patching method we adapted for Bliss from Intel's Project Celadon & phh-treble. This patching system allows us to bring in a good number of commits to add to the OS, and test how they apply or if there are any conflicts.","Our intention was to make a system that can add all the needed x86/x86_64 commits to Bliss ROM, as well as other ROMs too.","The majority of this system is found in vendor/x86/utils.","From here, you simply generate the .patch files from your additions, and add them to the mix. In the following example, we are going to generate patches from packages/apps/Settings and add them to the proper folder for live testing.","From your Project folder:","And generate your .patch files. For this example, we've added four commits on top of what was there after sync","Then copy those files to the proper folder in vendor/x86. In this case, you will find it here:","After that is complete, you can make clean and run the patch system from your main project folder.","This should start patching all the source files. Once that is complete, you can rebuild."]},{"l":"Troubleshooting","p":["If your build failed, there are a couple things you can try.","Try a fresh repo sync to make your repository up to date. Sometimes, the Internet connection between you and GitHub can be flaky. In rare cases a commit merge might be ongoing, and you might've grabbed an incomplete merge. Mostly, this should fix the issue 70% of the time.","Make sure your dependencies are installed correctly. Error messages help out a lot here! Often it will say shared/linked library not found or something along those lines.","Make sure you sourced build/envsetup.sh. This is especially common and worth suspecting if none of the build commands like breakfast and lunch work. If you have repo sync ed do this again.","Make sure you’re at the root of the build tree. Again, to quickly jump there, use croot.","Make sure your computer itself isn’t faulty. HDDs usually die first, followed by RAM. SSDs rarely die but failure is not unheard of. In extremely rare cases, your CPU may have a defect. If you're unsure, run a stress test using a program like Prime95.","If something goes wrong and you've tried everything above, first use Google to look up your error! Most of the errors you encounter is due to misconfiguration and wrong commands entered. More often than not, Google will have the answer you are looking for. If you're still stuck and nothing fixes the problem, then ask us via our Telegram Build Support chat."]},{"l":"Conclusion","p":["Building a ROM is very hard and tedious and the results are very rewarding! If you managed to follow along, congratulations!","After you finish building, you can try out the Git Started guide. Make changes, commit, and send them off to our GitHub for Bliss OS repos & our Gerrit for review on Bliss ROM repos! Or better yet, download experimental commits not ready for the mainline repositories and review them! Again, ROM building is a fun project you can work with. I hope this guide was a lot of fun to run through!"]}],[{"i":"build-bliss-os-15x","l":"Build bliss os 15.x"},{"l":"BlissOS","p":["Download the BlissOS source code, based on AOSP& Android-x86","Please read the AOSP building instructions before proceeding."]},{"l":"What you need to build BlissOS"},{"l":"Grabbing Dependencies"},{"l":"Initializing Repository","p":["Repo initialization","Sync repo"]},{"l":"Options","p":["Note: Default BLISS_BUILD_VARIANT is VANILLA.","BLISS_SPECIAL_VARIANT - This can be custom set if you wanna build a version for a specific device for example -jupiter for Steam Deck or -surface for Microsoft Surface series"]},{"i":"setup-foss-apps-if-you-choose-to-build-foss","l":"Setup FOSS apps (if you choose to build FOSS)","p":["If you want to build with FOSS (this will include microG Services & some extra apps), go to vendor/foss and then type","And then choose 1 (x86/x86_64) to fetch all the apps. If you want to include Bromite Webview in, type this instead"]},{"l":"Building","p":["Adding build options","Before running lunch, you can add variables into the build to integrate more stuff into the image. Note that you can put different variables into the build.","To build with FOSS","To build with MindTheGapps","To add a custom label into a device-specific build","To build the special \"surface\" variant which include kernel with patches from linux-surface and the iptsd userspace touchscreen daemon","To build the special \"go\" variant for BlissOS Go","More build options will be in Extras part including proprietary native-bridge/widevine libraries"]},{"l":"Extras","p":["We do offer some extra libraries that can be compiled into the build. These include :","Prebuilt Widevine from Windows Subsystem for Android","https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt","Clone to vendor/google/proprietary/widevine-prebuilt, The variable to activate this is USE_WIDEVINE=true","Windows Subsystem for Android's libhoudini","https://github.com/supremegamers/vendor_intel_proprietary_houdini","Clone to vendor/intel/proprietary/houdini, The variable to activate this is ANDROID_USE_INTEL_HOUDINI=true"]},{"l":"Report build issues","p":["You can reach us via Telegram (Android™-Generic (x86 PC) Community Development)"]}],[{"i":"build-bliss-os-v14x","l":"Build Bliss OS (v14.x)"},{"l":"Starting Off","p":["We also offer Android-Generic Project 2.0 as an easy to learn method of building Android 11 for PC's. Checkout the project README.md for more info.","Download the BlissRoms source code, based on AOSP, phhusson& BlissRoms","Please read the AOSP building instructions before proceeding."]},{"l":"What you need to build BlissOS","p":["Installing Java 8"]},{"l":"Grabbing Dependencies","p":["If you plan on building the kernel with the NO_KERNEL_CROSS_COMPILE flag, you will need to also have gcc-10+ installed:"]},{"l":"Initializing Repository","p":["Repo initialization :","sync repo :"]},{"l":"Options","p":["Note: Default BLISS_BUILD_VARIANT is VANILLA.","BLISS_SPECIAL_VARIANT - This can be custom set if you wanna build a version for a specific device for example -jupiter for Steam Deck or -surface for Microsoft Surface series"]},{"l":"Setup FOSS apps or OpenGapps","p":["If you want to build with FOSS (this will include microG Services & some extra apps), go to vendor/foss and then type","And then choose 1 (x86/x86_64) to fetch all the apps. If you want to include Bromite Webview in, type this instead","If you want to build with OpenGapps, first make sure to get git-lfs(already listed in above). Once you got git-lfs, type this","To fetch the packages."]},{"l":"Building","p":["Adding build options","Before running make iso_img, you can adding variables into the build to integrate more stuff into the image. Note that you can put different variables into the build.","To build with FOSS","To build with OpenGapps","To build with proprietary libhoudini extracted from WSA","To add a custom label into a device-specific build","To build the special \"surface\" variant which include kernel with patches from linux-surface and the iptsd userspace touchscreen daemon","To build the special \"go\" variant for BlissOS Go","More build options will be in Extras part including proprietary native-bridge/widevine libraries"]},{"l":"Extras","p":["We do offer some extra libraries that can be compiled into the build. These include :","ChromeOS's libhoudini/Widevine DRM L3","https://github.com/supremegamers/android_vendor_google_chromeos-x86","Clone to vendor/google/chromeos-x86, go to the folder and open terminal./extract-files.sh","The variable to activate this is USE_CROS_HOUDINI_NB=true for libhoudini and USE_WIDEVINE=true for Widevine.","Prebuilt Widevine from Windows Subsystem for Android","https://github.com/supremegamers/vendor_google_proprietary_widevine-prebuilt","Clone to vendor/google/proprietary/widevine-prebuilt, The variable to activate this is USE_WIDEVINE=true","Windows Subsystem for Android's libhoudini","https://github.com/supremegamers/vendor_intel_proprietary_houdini","Clone to vendor/intel/proprietary/houdini, The variable to activate this is ANDROID_USE_INTEL_HOUDINI=true"]},{"l":"Report build issues","p":["You can reach us via Telegram (Android™-Generic (x86 PC) Community Development)"]}],[{"l":"Contributing Documentation","p":["We are wide open to users submitting their documentation updates to our docs.blissroms.com site. Our repos for the docs site are here:","Documentation:","Knowledgebase:","Support Site:","Feel free to submit a pull request of your work and we'd be happy to include it \uD83D\uDE0A"]}],[{"l":"Development FAQ","p":["Much of what we are doing with Android source is lacking proper documentation as to what it does, and how. This document will try to answer a few of those questions.","What is bootable/newinstaller repo ? What is the purpose of it ? what does it contain ?","Bootable/newinstaller was initally created to handle the ramdisk.img, initrd.img and install.img creation, as well as packaging the final .iso/.img/,rpm file. This means it contains a set of scripts for the initrd image, a set of scripts for ths te installer image, and scripts to setup the filesystem and root environment.","How grub is handled in BlissOS ? How does it show first when normal AndroidOS boots straight to bootanimation ?","This is done by using the typical Linux method for booting with initrd.img, kernel, and system.img/ramdisk.img, where a grub menuentry is created that references the location of each img, and loads itlike normal linux would. The initrd.img and kernel load first, then after zygote loads, the init.sh file takes over and set's up the remaining hardware dynamically, and then initiallizes the graphics composer.","How does it recognize PC Bios on reboot ? as normally there is Bootloader in Android devices!","See above answers","What are the different Partitions that BlissOS Requires for running? This is in terms of Developer point of view nd not user! Does it have same partition table as that of any Android mobile ?","See above answers, with the addition of the install process creating a data.img or data folder on the install partiton, and that is detected by the initrd startup scripts and set as Internal Storage.","What type of kernels BlissOS supports or in general an Android-x86 support ? r there any specific one's ?","Linux/Google Android 11/12 LTS kernels, with about 20-30 patches added on top to support our filesystem and modularize all the drivers or options."]}],[{"l":"Maintaining Proper Authorship","p":["One of the most important things you need to keep in mind while working on open-source projects is maintaining correct authorship. In this article, we'll show you why maintaining proper authorship is important, give you a couple examples on correct and incorrect commits, and show you the overall procedure of correctly pulling in commits from others."]},{"i":"what-is-kanging","l":"What is \"kanging\"?","p":["[https://www.urbandictionary.com/define.php?term=kanged Kanging] is a term used in the Android development community for the action of passing off someone else's code as one's own, intentionally or unintentionally."]},{"i":"why-is-kanging-bad","l":"Why is kanging bad?","p":["Kanging is bad because the developers who worked hard on the commits do not get the recognition they deserve. Over time, this may cause the developer to quit releasing public source code or even retire from the Android development community. This has definitely happened before!"]},{"i":"kanging-examples-what-you-should-avoid-doing","l":"Kanging examples (what you should avoid doing)","p":["'''Example 1:''' You're trying to cherry-pick some commits from a different repository, but keep running into git merge issues. Out of frustration, you copy the code from the commit, and then just commit it using git commit -a. Satisfied, you push it up to GitHub.","'''Example 2:''' You bring up a bunch of commits, and squash them before pushing to GitHub.","'''Example 3:''' You intentionally want to pass off another developer's work as your own. You cherry-pick the commit, and then amend the commit to rewrite the author information.","Let's go over why this is wrong. Example 1 is an example of an unintentional kang. You didn't want to resolve the git merge issues, so decided to just copy the code and commit it as your own. This is bad because the author information does not get transferred over with your copy, which you have to specify manually.","Example 2 is more of an accident. If you squash multiple commits, all authorship information for the range of commits is lost. In addition, it becomes a real headache for other developers if something in the range of your commits is wrong. Because you cannot individually revert commits in a squash, squashing is very much discouraged and should ONLY be used when you have a lot of commits that you committed yourself and are small in nature.","Example 3 is an example of an intentional kang. We won't explain why because it should be fairly obvious."]},{"l":"How to maintain proper authorship","p":["The process is fairly simple yet important to understand.","If you are cherry-picking commits, the authorship information is transferred automatically. Provided that you are running git cherry-pick, the entire commit information, down to when the commit was created, is picked into your repository. You don't have to do anything in this case.","If you are committing someone else's code yourself, then you must manually specify who the author is. There are a lot of reasons why you would do this, from merge issues to incompatible code with the existing codebase. To manually specify an author, follow the [[#Manually specifying an author | Manually specifying an author section below]].","Finally, do NOT squash a range of commits that are not your own. This completely wipes authorship information from the range of commits and causes a massive headache for other developers."]},{"l":"Manually specifying an author","p":["You need to first determine the original author's name and email address.","GitHub no longer shows the author information when you mouse over the profile picture, which is quite unfortunate. However, there is an easy workaround.","Go to the commit that you want to pick. [https://github.com/BlissRoms/Documentation-release/commit/5ae1c6c4441786cd3ad5bd1773c831ba13cd86bc We'll use my commit as an example.]","Add the word .patch, with the period, to the end of the URL and press Enter to navigate to the raw patch.","In the patch, find the section that contains the author. It should be at the top of the page.","Now, it's time to commit with the correct author information. Make the necessary changes, and then commit using this command:","Following the example, I would write:","Once done, push to GitHub or Gerrit."]}],[{"l":"Porting Linux Drivers","p":["When it seems that there might be a missing driver or hardware support for your specific device, the best way to add support for that is o search online for a Linux kernel module for your target component.","Once you've tracked down or created Linux drivers for your device, you have to turn it into a Linux kernel module, and then add it to external/kernel-drivers for it to be included in the current kernel build. Examples of others we add are here https://github.com/BlissRoms-x86/external_kernel-drivers/tree/r11-r36","The examples only add one Android.mk file, and the one I use is generic for just about any kernel module that has a standard MAKEFILE, not a MAKEFILE.am file.","So you should really only need to add your kernel module folder to external/kernel-drivers/ and copy the Android.mk into it, then build source as normal. It'll get picked up as one of the last steps in building and packaging the kernel","Once you have it packaged up, it's best practice to compile the full source and test that it is functioning properly, and once confirmed, submit the change to https://github.com/BlissRoms-x86/external_kernel-drivers as a pull-request."]}],[{"i":"what-are-linux-drivers","l":"What are Linux Drivers?","p":["For those looking to help gain a better understanding of how Linux drivers work, here is a YouTube video that helps to explain things a bit https://youtu.be/juGNPLdjLH4"]}],[{"l":"Code of Conduct"},{"l":"Our Pledge","p":["We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.","We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community."]},{"l":"Our Standards","p":["Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience","Arguing over subjective preference, e.g. nationality, choice, religion, etc.","Being respectful of differing opinions, viewpoints, and experiences","Continued one-on-one communication after requests to cease","Demonstrating empathy and kindness toward other people","Encouraging a person to engage in self-harm","Examples of behavior that contributes to a positive environment for our community include:","Examples of unacceptable behavior include:","Focusing on what is best not just for us as individuals, but for the overall community","Giving and gracefully accepting constructive feedback","Other conduct which could reasonably be considered inappropriate in a professional setting","Public or private harassment","Publishing others' private information, such as a physical or email address, without their explicit permission","The use of sexualized language or imagery, and sexual attention or advances of any kind","Trolling, insulting or derogatory comments, and personal or political attacks","Unwelcome sexual or otherwise aggressive attention"]},{"l":"Enforcement Responsibilities","p":["Project maintainers are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.","Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate."]},{"l":"Scope","p":["This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers."]},{"l":"Enforcement","p":["Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the project maintainers responsible for enforcement at integrity@blissos.org. Participants warned to stop any harassing behavior are expected to comply immediately; failure to do so will result in an escalation of consequences. All complaints will be reviewed and investigated promptly and fairly.","All project maintainers are obligated to respect the privacy and security of the reporter of any incident."]},{"l":"Enforcement Guidelines","p":["Project maintainers will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:"]},{"l":"1. Correction","p":["Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.","Consequence: A private, written warning from project maintainers, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested."]},{"l":"2. Warning","p":["Community Impact: A violation through a single incident or series of actions.","Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban."]},{"l":"3. Temporary Ban","p":["Community Impact: A serious violation of community standards, including sustained inappropriate behavior.","Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban."]},{"l":"4. Permanent Ban","p":["Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.","Consequence: A permanent ban from any sort of public interaction within the community."]},{"l":"Attribution","p":["This Code of Conduct is adapted from the Contributor Covenant, version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html."]}]]
\ No newline at end of file
diff --git a/sitemap.xml.gz b/sitemap.xml.gz
index bb3cbed0..6a23dae6 100644
Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ