This explains how to create my own Steam OS
Install Arch linux + KDE DE.(We recommand using manjaro minimal version)
https://manjaro.org/download/



Create the downloaded ISO file into a USB disk by DD mode
We recommend the rufus program

Secure space for installation in Windows

After connecting the Linux installation USB to the PC, use the Del key or F2 key (different for each device) to enter BIOS and select the installation USB

When you boot, you will see the Manjaro Linux installation screen as shown below

Run Install Manjaro Linux to start the installer
When installing, be sure to set the language to English

Select region, then select keyboard
Now comes the most important part: deciding where to install it
If you make a mistake here, the existing Windows may be destroyed, so be careful

Select the disk to install from number 1
If you want to install by reducing the size of the existing partition without dividing the partition, select “Install alongside” from number 2, select the partition you want to install, and then adjust the size
If you previously secured a partition to install on, just select “Replace a partition” in number 3 and then select the partition you want to install on
You are an expert, I know a lot about partitions, and if you want to control things in more detail..
After selecting number 4, you can manually specify partitions
(For number 4, you must mount the / and /boot/efi partitions. Others are optional.)
Additionally, it is recommended that the file system be EXT4
In the case of BTRFS, the file system is often damaged during use, and even the slightest damage makes it unrecoverable
Set up a user account

The name must be deck
Please enter your password appropriately
And be sure to uncheck “Log in automatically without asking for the passwd”
If you choose that, you will run into some problems because the files that handle that option are different during installation and when configuring KDE
It briefly shows the information to be installed

When you're ready, click Install to begin installation
manjaro asking again

Click Install now

Installation takes approximately 5-10 minutes

When finished, reboot
After re-entering BIOS..

Select Manjaro Linux and boot

When you enter the password you set during installation, Manjaro Linux will welcome you

The basic installation is now complete

# Configure Linux
Linux is now installed
Before installing Steam OS, you need to set up some basic settings
Run System Settings

Select Startup and Shutdown..

Select Behavior
Set the deck to automatically log in
Then select Open KDE Wallet Setting

Select Change Password, enter nothing for the password and press Ok
If you set a password here, you will be repeatedly asked for the password later

When you click Apply, you will be asked for a password. Enter the password you entered during installation

Click on the DOS window at the bottom to run konsole
Linux starts and ends with the console, so you should always be familiar with the console

If you are a Korean/Chinese/Japanese user, install the font by sudo pacman -S noto-fonts-cjk
When you first run the command, a warning (?) is displayed. Just ignore it and enter the password you entered during installation
Please note that the password input is not visible, so do not assume that it cannot be entered
An error occurs saying that the package information has not been updated
Type sudo pacman -Sy as described above
When it's all over..
Type sudo pacman -S noto-fonts-cjk again

This time... trying to update the Linux key
Press Y or just Enter

Now install the font
Just press Y or Enter

Now let's install discover
(Manjaro has its own package installer, but Steam OS and KDE mainly use discover.)
In the console, run sudo pacman -S discover.

If you go to Start -> System, you will see Discover
To commemorate the installation(?), let's run it

It runs well
For reference, if you right-click on the taskbar and select Pin to Task Manager, an icon will appear on the taskbar for convenient use later

Come back to the konsole..
sudo pacman -S cpupower ark bc onboard gcc jq to install
cpupower is a program that can set up the CPU, and ark is a program that processes compressed files
bc is a program that allows calculation(?) on the command line, and onboard is an on-screen (touch) keyboard
gcc is a compiler, and jq is a program needed to install decky-loader, which will be installed later

Now let's try updating the entire system
Just type sudo pacman -Syu

They seem to be installing quite a lot..
Just press y or enter to start installation
After installation is complete, reboot and you will have the latest version of Linux
When the screen lock is enabled on a UMPC without a keyboard, it is difficult to enter the password..
Try unlocking the screen

Launch Settings and select Workspace Behaviors

Unlock as above
Now try turning off Search (if it's on, it can find things in the background and use a lot of CPU)
If you disable it, a warning is displayed
Just ignore it and click Apply

Now let's install Chrome
Personally, I think Chrome is better than Firefox, which is installed by default
(People using Firefox can skip this.)
Chrome will be installed through flapak, so install it with sudo pacman -S flatpak in the konsole

Now run Discover and type chrome to search for Chrome
Just click install

If Chrome does not appear, it may be because the flatpak settings are incorrect
Click on Discover's settings, add dl.flathub.org to the flatpak address, and try again.Click on Discover's settings, add dl.flathub.org to the flatpak address, and try again

Just find Chrome in the Start menu and run it
Please note that if it is not on startup, it will appear after rebooting
Try deleting “Welcome to Manjaro” that appears when you run Manjaro Linux

You can remove it by running sudo pacman -R manjaro-hello
Also, since you installed Chrome, you don't need firefox either
You can delete it with sudo pacman -R firefox
When you enter the sudo command, you will be asked for your password
If this bothers you, you can disable it using the method below

In the konsole, type kate /etc/sudoers.d/deck

deck ALL=(root) NOPASSWD:ALL
Just enter , click Save, and enter your password
Now, when you run sudo commands in the console, you will no longer be asked for an annoying password
The basic settings are now complete
You installed Linux, but if you want to boot into Linux, you have to go into the BIOS and select Linux every time
GPD Win 4 or Max 2, which have a keyboard, are fine, but for devices without a keyboard, you can only select the OS when the keyboard is connected through a USB hub
So let's try to solve it
Run the konsole

Go to the folder containing the kernel with cd /boot
Check which files exist with ls -l
The important files here are the kernel file starting with vmlinux and the initial RAM disk file starting with initramfs
In the case of Manjaro Linux, the version number is attached to the kernel
In my case..
linux 6.6 is vmlinuz-6.6-x86_64 / initramfs-6.6-x86_64.img
linux 6.7 is vmlinuz-6.7-x86_64 / initramfs-6.7-x86_64.img
Run sudo cat grub/grub.cfg.

A lot of content is printed..
If you move up with the mouse wheel..
You can see the file name in the /boot directory registered there
The important ones there are "/boot/vmlinuz-6.6-x86_64", "root=UUID=3b86ac23-ef58-4c54-b841-02d595eba78b", "/boot/initramfs-6.6-x86_64.img"
Also remember the UUID of the root volume, "a25f8b7d-c15a-4d9f-9d6a-4b6c98a4ecac"
Please note that UUID is a unique value given during installation, so they all have different values
Write down the three contents above in a notepad
The work on Linux is now complete
Boot into Windows
Download GameAssist
When you run the GameAssist, a rEFind tab that wasn't there before will appear
Modifying the bootloader may make your device unbootable
In other words, you must pay enough attention
However, the boot loader can be restored very easily, so if you have basic knowledge, there will be no major difficulties

First select the EFI partition
In most cases, there will be only one partition, so it will be selected automatically
Then click Refind Install to install
Refind will now be registered as a bootable item and you will be able to select it in BIOS

A gamepad driver is also installed so that it can be operated with a gamepad instead of keys. If necessary, ext2/3 drivers and ntfs drivers can also be installed
If you are not sure, you can leave it as default
Since most UMPCs have vertical LCDs, select the rotation portion appropriately and set it so that the OS selection screen appears correctly
If the screen is abnormal when booting, you can modify the resolution
The resolutions of 0, 1, 2, and 3 are different for each device, so you can set them after testing
The OS item detects the system and automatically creates Windows and Linux related items
For Windows, there is no need to configure anything differently, but for Linux, you need to enter the previous information to operate properly

The volume part is the file system delimiter where the kernel file is located
If you have only one Linux installed on your system, you can enter information such as the kernel name, loader
Write a name starting with vmlinuz in /boot
If you have installed more than one Linux, if the kernel name is the same, the correct file system cannot be found, so in that case, just write down the name or uuid of the partition
In my case, since I have 4 Linux installed on my system, I decided to use UUID
loader is where the kernel is located
Just enter the same information as in the volume section
initrd is the location of the initial ramdisk file
Just enter the file name starting with initramfs
options are options given to the kernel. Here, only root is required, others are optional
The GameAssist is created with the following contents
You can just roughly fix it there
options "root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw rd.udev.log_priority=3 vt.global_cursor_default=0 fbcon=rotate:0"
In my case..
options "root=UUID=3b86ac23-ef58-4c54-b841-02d595eba78b rw rd.udev.log_priority=3 vt.global_cursor_default=0 iomem=relaxed fbcon=rotate:0"
graphics on
fbcon=rotate:0 is the rotation direction of the kernel message when booting
It is not very important, but if it is a vertical screen, it is good to correct it by inserting numbers such as 1, 2, and 3
Additionally, “iomem=relaxed amd_pstate=disable” was added
It's not that important, but I added it because there are some functions that won't work without that option
Also added "initrd=/boot/amd-ucode.img"
It is not required, but is a patch file related to CPU security updates
Now reboot
If you go into the BIOS and look at the boot item settings, you will see rEFInd for GameAssist, which was not visible
Select this

Now, when you reboot...
you will see an item where you can select Windows and Linux
(Unlike other loaders, you can select with the gamepad. For reference, the A key is selected.)
Try booting into Linux
If it doesn't work, reboot into Windows and correct the Refind item in the GameAssist
If you want to boot into Linux without going through Refind, select Manjaro in the BIOS and it will boot as before

Now, let's set up the refind configuration file in Linux so that you can easily edit it
Run the konsole
Type kate /etc/fstab.

If /boot/efi's permissions are set to 0077, it cannot be opened
So change to defaults

Please note that whenever you modify a system-related file, you will be asked for a password
Try rebooting
Run the konsole again
Run kate /boot/efi/EFI/refind/game_assist.conf

You can see that the content you saw in the GameAssist is exactly the same
In other words, you can modify refind settings in Linux as well
Multi-booting is now complete!!
Basic Linux tasks are now complete
Let’s start by installing Steam OS-related files on Linux
First, install steam, gamescope, mangohud, etc. as explained in the overview
Run konson
Type sudo pacman -S steam gamescope-plus mangohud glfw-x11
Once installation is complete, Steam will be registered

Launch Steam

Working hard on downloading~~
Let sit until done

If it comes out like this, it is a success
Press X to exit
Now you just need to install the actual Steam OS.
After moving to the Documents folder(by cd ~/Documents) in the konsole.
Enter git clone https://github.com/TeslaKang/gamescope-session.git

Check the contents with ls -l

Install with ./install.sh
It's easy to install.

If you look at your desktop, you'll see a Steam icon and an icon for Game Mode
When you run Return to Gaming mode, you will be taken to Steam OS
If you don't go into game mode, it's because auto login is set to Plasma
After executing kate /etc/sddm.conf in konsole
Just delete all contents of [Autologin]
If you select automatic login during installation or set automatic login in the environment settings, the value will be registered and you will not be able to switch to game mode
Now run Return to Gaming mode and check if it works properly

Enter the language/time zone/account to enter Steam OS
Now it is the same as Steam Deck, so you can use it like Steam Deck

Try changing the desktop start icon to Steam Deck
Press Menu, select Power, and then select Desktop to switch to the desktop
Right-click on the Start icon and select "Configure Application Launcher..."
Click the icon and select “Choose”

There are so many icons that it is difficult to find them, so type "dis" and select the Steam Deck start icon

Changed to Steam Deck start icon

Now my device is a Steam Deck.
Just use it diligently.
The Steam OS is now installed
However, the UMPC custom key or power key does not work, making actual use a bit difficult
Let's solve this
Expert have already created a solution, so all you have to do is install it
The related program is HandyGCCS
However, after using HandyGCCS for a few months, it is fine for regular use, but when using it in hibernation mode, there is an issue where the controller stops working after hibernating 10-20 times
Also, it cannot handle cover events from devices with covers like GPD Win Max2 or GPD Win Mini
A thirsty person digs a well, so I created something called HandyGCCS++
The basic HandyGCCS source is in Python, and each function is made into a module, making it difficult to manage, so I made it into just one file in C++
After using it for about a month, there seemed to be no major problems, so we recommend that future users use HandyGCCS++
First, go to https://github.com/TeslaKang/HandyGCCS and take a look
If the device is not there, it is difficult to actually use it, so you can either wait for it to be added or download HandyGCCS++ and add it yourself
First, launch the konsole
Type cd Documents to move to the documents folder(It is convenient to use the tab key after entering only one or two characters, so get used to using the tab key~~)
git clone https://github.com/TeslaKang/HandyGCCS.git
Type cd HandyGCCS

Launch ./stop.sh to stop previously running services
For install sudo ./install.sh
For launch sudo ./start.sh

To know if it's currently running well
You can find out by running ./log.sh

If you want to change the settings for the key
After stopping the service with ./stop.sh
kate /etc/handygccs/handygccs.conf

Just restart the service with ./start.sh
Although Steam itself has a TDP or GPU clock setting function, it is tailored to the Steam deck, so it is lacking in other high-end UMPCs
Let's solve this using the Game Assistant for Steam OS
GameAssist for Steam OS was implemented through decky-loader
So, you need to install decky-loader first
First, go to https://github.com/SteamDeckHomebrew/decky-loader and take a look
Installation is "curl -L https://github.com/SteamDeckHomebrew/decky-installer/releases/latest/download/install_release.sh | sh"
Now run the konsole
In the konsole, type "curl -L https://github.com/SteamDeckHomebrew/decky-installer/releases/latest/download/install_release.sh | sh"

Ugh... I can't install it because I don't have JQ
Try installing JQ
Enter sudo pacman -S jq to install JQ
If JQ installation is successful, enter the decky loader installation command
For reference, you can use the previous command by pressing the up arrow key

It takes a little time, but it installs well
Now let's install GameAssist
In the konsole, navigate to the Documents folder with cd ~/Documents
git clone https://github.com/TeslaKang/GameAssistSteamOS
Go to the folder with cd GameAssistSteamOS
Check the contents with ls -l

It should come out like above
Just enter ./depoly.sh to install
Now select “Return to Gaming mode” on the desktop to switch to gaming mode
If you look at the QAM menu (if you don't have the QAM key, press Menu(Guide) + A), there is a plug icon that wasn't there before
If you click on it, you will see GameAssist

Select Setting/Manager Items

Please note that each item in the GameAssist can be edited/added/deleted by the user
In other words, you can configure it and use it as you wish

In the case of AyaNeo Air, if you want to make the TDP a little finer
Go to Item Management, select CPU Package Power, and then select Edit

Set the step value to 0.5 and select OK

Package power can be set in 0.5W increments

There is also a function to change the settings of HandyGCCS

GameAssist has tried to include the basic features found in the SteamDeck whenever possible
However, there may be bugs, and it was my first time using Python or React, the languages used in the decky loader plugin, so there was a lot of trial and error, and there may be many shortcomings
It would be much better if an expert refined this part later
Please note that GameAssist for Steam OS does not work on Steam Deck.
This is how to enable hibernation in Linux, which is necessary for the ultimate goal of running games between Windows and Steam OS without interruption
Run the konsole
Type cd /home
Enter sudo fallocate -l 16G swapfile(16G is your memory size. For users with 32G or more, 32G is too waste, so enter about 22G.)
sudo chmod 0600 swapfile
sudo mkswap swapfile
sudo swapon swapfile
Type kate /etc/fstab

/home/swapfile none swap defaults 0 0
Enter the above content at the end of the file and press Save
Then enter the password

Run sudo systemctl edit --full systemd-logind

Change the ProtectHome value to read-only about halfway through and press Ctrl+X to save and exit

Run kate /etc/mkinitcpio.conf in the console again
The original HOOKS had a # in front of them
Remove base and udev and add systemd
That is, it goes like this:
HOOKS="systemd autodetect modconf block keyboard keymap consolefont plymouth filesystems"
(Previously, it was processed by adding resume, but if you use systemd, resume is no longer needed)
Save

If you type sudo mkinitcpio -p linux in the konsole and then press the TAB key, the configuration file in the system will be automatically entered
(In the case of Manjaro Linux, it follows the rules of linux61, linux66, linux67, etc.)

You can see that it is well made as set up.
If you use HOOKS="systemd ..." described above and only one Linux is installed on the device
There is no need to input uuid and offset as described below
If you use the old method or more than one of Linux, you must enter uuid and offset in the kernel boot command as follows for it to work properly
Now it is time to find the uuid and offset of the swap file
Run sudo findmnt -no UUID -T /home/swapfile in the konsole
In my case "a25f8b7d-c15a-4d9f-9d6a-4b6c98a4ecac"

Run sudo filefrag -v /home/swapfile
Since a lot of content is output, move to the beginning with the mouse wheel and remember the red numbers
In my case 3055616

Now it is time to register in kernel options
Run kate /boot/efi/EFI/refind/game_assist.conf

In the Refind settings file of the previously registered GameAssis
Add resume=UUID=xxxxx resume_offset=yyyy
Please note that xxxxx and yyyy vary from person to person

Save it
Reboot
When you click the Start menu
Hibernation is now available
Just test to see if it works

There are some things to keep in mind when using hibernation mode
First, hibernation saves the current state of the OS to the SSD
So, after another OS accesses the disk saved in hibernation mode and writes files to it, when it wakes up from hibernation mode, the disk is logically broken because it is not aware of any changes to the disk
In the case of NTFS or EXT4, they are slightly damaged and can be recovered, but BTRFS becomes unrecoverable, so if you use hibernation, you should not use BTRFS
In other words, if possible, write operations should not be performed in areas used by each other
However, because MicroSD can be removed midway, it is safe to use in hibernation mode
In other words, the best way is to share all data through MicroSD if possible
Linux also has a function to determine whether Windows has exited hibernation mode
So, Windows goes into hibernation mode first, and when Linux boots, the Windows partition is mounted as read-only and cannot be written to, so it operates safely(?)
However, if Windows just shuts down and boots into Linux, Linux mounts the Windows partition as writable
In this state, exit Linux into hibernation mode, boot into Windows, and then exit Windows into hibernation mode again
When you wake up from hibernation with Linux, Linux cannot determine whether Windows has exited hibernation mode and is writable, so modifying files on the Windows partition will damage the Windows partition
Therefore, if you use hibernate mode, you should avoid writing to each other between the Windows and Linux partitions if possible
Please be careful!!