- Pacman quick reference
- Show System Info
- Bootsplash
- Fancontrol
- High refresh rate / Freesync
- Gaming hacks
- OBS Settings for recording with Radeon Cards
- OBS Settings for recording with CPU
- Devices
- Useful commands
sudo pacman -Syy # update package sources
sudo pacman -Syu # update system
sudo paccache -rk 1 # clean cache
sudo pacman -S package_name # install package
sudo pacman -Rs package_name # remove package
sudo pacman -Rns package_name # purge package
pacman -Qi package_name # info about installed package
pacman -Ss package_name # search package in repo
pacman -Qent # manually installed packages
pacman -Qm # manually installed foreign packages
pacman -Qdtq # packages without dependencies
# mark package as explicitly installed
sudo pacman -S --asexplicit --noconfirm PACKAGE
# mark package as automatically installed
sudo pacman -S --asdeps --noconfirm PACKAGE
inxi -Fza # nice list
mhwd -lh -d # overkill
To change bootsplash install a bootsplash package and modify the following files accordingly. (example is for manjaro-glitch)
/etc/mkinitcpio.conf
HOOKS="... bootsplash-manjaro-glitch"
Append the following to GRUB_CMDLINE_LINUX_DEFAULT:
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="... bootsplash.bootfile=bootsplash-themes/manjaro-glitch/bootsplash"
Update initramfs and grub:
sudo mkinitcpio -P
sudo update-grub
Install fancontrol-gui package, changes will be saved in configuration file.
sudo pacman -S fancontrol-gui
Enable fancontrol:
sudo systemctl enable fancontrol.service
This is my custom config file where most fans are controlled by GPU temp (do not use, just for reference):
/etc/fancontrol
# This file was created by Fancontrol-GUI
INTERVAL=2
DEVPATH=hwmon0=devices/pci0000:00/0000:00:03.1/0000:2b:00.0/0000:2c:00.0/0000:2d:00.0 hwmon4=devices/platform/nct6687.2592
DEVNAME=hwmon0=amdgpu hwmon4=nct6687
FCTEMPS=hwmon4/pwm1=hwmon4/temp1_input hwmon4/pwm2=hwmon0/temp2_input hwmon4/pwm3=hwmon0/temp2_input hwmon4/pwm4=hwmon0/temp2_input hwmon4/pwm5=hwmon0/temp2_input hwmon4/pwm6=hwmon0/temp2_input hwmon4/pwm7=hwmon0/temp2_input
FCFANS=hwmon4/pwm1=hwmon4/fan1_input hwmon4/pwm2=hwmon4/fan2_input hwmon4/pwm3=hwmon4/fan3_input hwmon4/pwm4=hwmon4/fan4_input hwmon4/pwm5=hwmon4/fan5_input hwmon4/pwm6=hwmon4/fan6_input hwmon4/pwm7=hwmon4/fan7_input
MINTEMP=hwmon4/pwm1=50 hwmon4/pwm2=40 hwmon4/pwm3=40 hwmon4/pwm4=40 hwmon4/pwm5=40 hwmon4/pwm6=40 hwmon4/pwm7=40
MAXTEMP=hwmon4/pwm1=90 hwmon4/pwm2=90 hwmon4/pwm3=90 hwmon4/pwm4=90 hwmon4/pwm5=90 hwmon4/pwm6=90 hwmon4/pwm7=90
MINSTART=hwmon4/pwm1=255 hwmon4/pwm2=255 hwmon4/pwm3=255 hwmon4/pwm4=255 hwmon4/pwm5=255 hwmon4/pwm6=255 hwmon4/pwm7=255
MINSTOP=hwmon4/pwm1=72 hwmon4/pwm2=72 hwmon4/pwm3=72 hwmon4/pwm4=72 hwmon4/pwm5=72 hwmon4/pwm6=72 hwmon4/pwm7=72
MINPWM=hwmon4/pwm1=72 hwmon4/pwm2=72 hwmon4/pwm3=72 hwmon4/pwm4=72 hwmon4/pwm5=72 hwmon4/pwm6=72 hwmon4/pwm7=72
MAXPWM=hwmon4/pwm1=255 hwmon4/pwm2=255 hwmon4/pwm3=255 hwmon4/pwm4=255 hwmon4/pwm5=205 hwmon4/pwm6=205 hwmon4/pwm7=205
AVERAGE=hwmon4/pwm1=2 hwmon4/pwm2=1 hwmon4/pwm3=1 hwmon4/pwm4=1 hwmon4/pwm5=1 hwmon4/pwm6=1 hwmon4/pwm7=1
Create a modprobe config file and set the dependencies of the modules manually. This is a pain to find out but was unfortunately necessary so my sensors always have the same ids :(
Note: This example is for nct6687 temp. sensor (I have that one on my MSI B550 Tomahawk), you have to substitute for yours)
/etc/modprobe.d/fancontrol.conf
softdep nct6687 pre: zenpower
softdep ucsi_ccg pre: nct6687
softdep hid_logitech_hidpp pre: nct6687
During shutdown my fans went bonkers, so I added a script that is called when fancontrol service is stopped.
Create a stop script (modify for your hardware):
/usr/sbin/fancontrol-stop.sh
#!/bin/sh
echo 60 > /sys/class/hwmon/hwmon4/pwm1
echo 60 > /sys/class/hwmon/hwmon4/pwm2
echo 60 > /sys/class/hwmon/hwmon4/pwm3
echo 60 > /sys/class/hwmon/hwmon4/pwm4
echo 60 > /sys/class/hwmon/hwmon4/pwm5
echo 60 > /sys/class/hwmon/hwmon4/pwm6
echo 60 > /sys/class/hwmon/hwmon4/pwm7
Make script executable:
sudo chmod +x /usr/sbin/fancontrol-stop.sh
Add the stop script to fancontrol service config:
/etc/systemd/system/multi-user.target.wants/fancontrol.service
ExecStopPost=/usr/sbin/fancontrol-stop.sh
NOTE: Many examples are only for amdgpu driver and for 144Hz display.
Create X11 configuration file:
/etc/X11/xorg.conf.d/20-amdgpu.conf
Section "Device"
Identifier "AMD"
Driver "amdgpu"
Option "VariableRefresh" "true"
Option "TearFree" "true"
EndSection
Add this to sddm startup script (modify for your refresh rate):
/usr/share/sddm/scripts/Xsetup
xrandr --rate 144
Add both options to the [Compositing]
section of kwin config (adapt for your refresh rate):
~/.config/kwinrc
MaxFPS=144
RefreshRate=144
Install wxedid package.
Find currently used EDID:
find /sys/devices/pci*/ -name edid
Copy to a new file (change to the path of the original edid you found):
cat path-to-edid > /usr/lib/firmware/edid/modified-edid.bin
Then edit with wxedid, change MRL Vfreq and save.
Add amdgpu driver together with edid file to initramfs so it's loaded during init:
/etc/mkinitcpio.conf
#MODULES=""
MODULES=(amdgpu)
#FILES=""
FILES=(/usr/lib/firmware/edid/modified-edid.bin)
Generate new initramfs:
sudo mkinitcpio -P
Append the following to GRUB_CMDLINE_LINUX_DEFAULT:
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="... drm.edid_firmware=DP-1:edid/modified-edid.bin"
Update grub:
sudo update-grub
Uncomment the following in configuration:
/etc/pulse/daemon.conf
high-priority = yes
nice-level = -11
realtime-scheduling = yes
realtime-priority = 5
...
resample-method = speex-float-10
Disclaimer: Be very careful with overclocking/undervolting, my settings are chosen for my chip after a lot of trial and error and greatly vary for each chip.
Append the following to GRUB_CMDLINE_LINUX_DEFAULT:
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="... amdgpu.ppfeaturemask=0xffffffff"
Update grub:
sudo update-grub
Execute sudo pacman -S upliftpowerplay
to install upp command from AUR for modyfing radeon soft power-play-tables.
Create a script for undervolting that you can execute when you need it.
Example script (this is for my undervolted watercooled RX 6900XT):
overclock.sh
#!/bin/sh
#
# GPU Power
#
POWER_CAP_W=366
POWER_CAP=${POWER_CAP_W}000000
# needed first, otherwise power1_cap_max is not raised for some reason
echo "auto" > /sys/class/drm/card0/device/power_dpm_force_performance_level
POWER_CAP_MAX=$(cat /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap_max)
if [ $POWER_CAP_MAX -lt $POWER_CAP ]; then
# set max power cap
cat /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap_max > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap
# modify power-play table
upp set --write \
smc_pptable/SocketPowerLimitAc/0=$POWER_CAP_W \
smc_pptable/SocketPowerLimitDc/0=$POWER_CAP_W
# set closest power cap
POWER_CAP_MAX=$(cat /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap_max)
NEW_POWER_CAP=$(( $POWER_CAP < $POWER_CAP_MAX ? $POWER_CAP : $POWER_CAP_MAX ))
echo $NEW_POWER_CAP > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap
else
# set exact power cap
echo $POWER_CAP > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap
fi
# set manual perf. level
echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
#
# GPU Core
#
echo "s 0 2450" > /sys/class/drm/card0/device/pp_od_clk_voltage
echo "s 1 2550" > /sys/class/drm/card0/device/pp_od_clk_voltage
echo "vo -12" > /sys/class/drm/card0/device/pp_od_clk_voltage
#
# GPU MEM
#
echo "m 1 1075" > /sys/class/drm/card0/device/pp_od_clk_voltage
echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage
echo "3" > /sys/class/drm/card0/device/pp_dpm_mclk
#
# CPU OC
#
cpupower frequency-set -g performance > /dev/null
#
# Print Status
#
SCALING_DRV=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver)
SCALING_GOV=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
POWER_CAP=$(cat /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap)
POWER_CAP_MAX=$(cat /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap_max)
echo "CPU scaling driver: $SCALING_DRV"
echo "CPU scaling governor: $SCALING_GOV"
echo "GPU power cap: $POWER_CAP"
echo "GPU power cap max.: $POWER_CAP_MAX"
echo ""
echo "GPU pp_od_clk_voltage table"
echo "---------------------------"
If you run into this issue you need to build a patched kernel - see this issue.
Best way to do this under arch is to first clone the kernel you want to use, e.g.: git clone https://gitlab.manjaro.org/packages/core/linux61
.
Then build the kernel with makepkg -s -f
(this fetches kernel source and applies distro-specific changes).
When you finished building, modify the kernel source under src/linux61
.
(The file to patch there is drivers/gpu/drm/amd/pm/amdgpu_dpm.c
).
Then build again with makepkg -s -f -e
so only your changes are rebuilt.
Lastly, install your custom kernel with e.g.:
sudo pacman -U linux61-6.1.0-1-x86_64.pkg.tar.zst linux61-headers-6.1.0-1-x86_64.pkg.tar.zst
sudo pacman -S zenpower3-dkms
Blacklist k10temp driver:
/etc/modprobe.d/k10temp-blacklist.conf
blacklist k10temp
amd-pstate driver is compiled into the kernel since kernel >= 6.1.
To enable it append the following to GRUB_CMDLINE_LINUX_DEFAULT:
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="... amd_pstate=passive"
Then update grub:
sudo update-grub
After rebooting verify that amd-pstate is active:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
Switch to the performance scheduler (you might want to add this to your overclocking/undervolting script):
sudo cpupower frequency-set -g performance
Install mangohud package.
Then enable mangohud in lutris settings - either per game or per runner (systemwide).
Modify configuration to your liking, here is an example:
$HOME/.config/MangoHud/MangoHud.conf
### MangoHud configuration file
### Uncomment any options you wish to enable. Default options are left uncommented
### Use some_parameter=0 to disable a parameter (only works with on/off parameters)
### Everything below can be used / overridden with the environment variable MANGOHUD_CONFIG instead
################ PERFORMANCE #################
### Limit the application FPS. Comma-separated list of one or more FPS values (e.g. 0,30,60). 0 means unlimited (unless VSynced)
fps_limit=140,0
### VSync [0-3] 0 = adaptive; 1 = off; 2 = mailbox; 3 = on
vsync=1
### OpenGL VSync [0-N] 0 = off; >=1 = wait for N v-blanks, N > 1 acts as a FPS limiter (FPS = display refresh rate / N)
gl_vsync=0
################### VISUAL ###################
### Legacy layout
legacy_layout=false
### Display custom centered text, useful for a header
# custom_text_center=
### Display the current system time
# time
### Time formatting examples
# time_format=%H:%M
# time_format=[ %T %F ]
# time_format=%X # locally formatted time, because of limited glyph range, missing characters may show as '?' (e.g. Japanese)
### Display MangoHud version
# version
### Display the current CPU information
cpu_stats
cpu_temp
cpu_power
cpu_text=5900X
cpu_mhz
# cpu_load_change
# cpu_load_value=60,90
# cpu_load_color=39F900,FDFD09,B22222
### Display the current CPU load & frequency for each core
# core_load
# core_load_change
### Display custom text
#custom_text=CPU Mhz
### Display output of Bash command in next column
#exec=cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
#exec=cat /sys/class/drm/card0/device/hwmon/hwmon2/in0_input
### Display IO read and write for the app (not system)
# io_stats
# io_read
# io_write
### Display system ram / swap space usage
ram
# swap
### Display the current GPU information
gpu_stats
gpu_temp
gpu_core_clock
gpu_mem_clock
gpu_power
gpu_text=6900XT
# gpu_load_change
# gpu_load_value=60,90
# gpu_load_color=39F900,FDFD09,B22222
### Display system vram usage
vram
### Display per process memory usage
## Show resident memory and other types, if enabled
# procmem
# procmem_shared
# procmem_virt
### Display battery information
# battery
# battery_icon
### Display FPS and frametime
fps
# fps_sampling_period=500
# fps_color_change
# fps_value=30,60
# fps_color=B22222,FDFD09,39F900
frametime
### Display miscellaneus information
engine_version
gpu_name
vulkan_driver
wine
### Display loaded MangoHud architecture
# arch
### Display GameMode / vkBasalt running status
gamemode
# vkbasalt
### Display current FPS limit
# show_fps_limit
### Display the current resolution
resolution
### Display the frametime line graph
frame_timing
# histogram
### Display media player metadata
# media_player
# media_player_name=spotify
## Format metadata, lines are delimited by ; (wip)
# media_player_format={title};{artist};{album}
# media_player_format=Track:;{title};By:;{artist};From:;{album}
### Change the hud font size
# font_size=24
# font_scale=1.0
# font_size_text=24
# font_scale_media_player=0.55
# no_small_font
### Change default font (set location to TTF/OTF file)
## Set font for the whole hud
# font_file=
## Set font only for text like media player metadata
# font_file_text=
## Set font glyph ranges. Defaults to Latin-only. Don't forget to set font_file/font_file_text to font that supports these
## Probably don't enable all at once because of memory usage and hardware limits concerns
## If you experience crashes or text is just squares, reduce glyph range or reduce font size
# font_glyph_ranges=korean,chinese,chinese_simplified,japanese,cyrillic,thai,vietnamese,latin_ext_a,latin_ext_b
### Change the hud position
# position=top-left
### Change the corner roundness
# round_corners=
### Disable / hide the hud by default
# no_display
### Hud position offset
# offset_x=
# offset_y=
### Hud dimensions
# width=
# height=
# table_columns=
# cellpadding_y=
### Hud transparency / alpha
# background_alpha=0.5
# alpha=
### Color customization
# text_color=FFFFFF
# gpu_color=2E9762
# cpu_color=2E97CB
# vram_color=AD64C1
# ram_color=C26693
# engine_color=EB5B5B
# io_color=A491D3
# frametime_color=00FF00
# background_color=020202
# media_player_color=FFFFFF
# wine_color=EB5B5B
# battery_color=FF9078
### Specify GPU with PCI bus ID for AMDGPU and NVML stats
### Set to 'domain:bus:slot.function'
# pci_dev=0:0a:0.0
### Blacklist
# blacklist=
################ WORKAROUNDS #################
### Options starting with "gl_*" are for OpenGL
### Specify what to use for getting display size. Options are "viewport", "scissorbox" or disabled. Defaults to using glXQueryDrawable
# gl_size_query=viewport
### (Re)bind given framebuffer before MangoHud gets drawn. Helps with Crusader Kings III
# gl_bind_framebuffer=0
### Don't swap origin if using GL_UPPER_LEFT. Helps with Ryujinx
# gl_dont_flip=1
################ INTERACTION #################
### Change toggle keybinds for the hud & logging
toggle_hud=Shift_L+F12
toggle_fps_limit=Shift_L+F11
toggle_logging=Shift_L+F10
# reload_cfg=Shift_L+F4
# upload_log=Shift_L+F3
#################### LOG #####################
### Automatically start the log after X seconds
# autostart_log=1
### Set amount of time in seconds that the logging will run for
# log_duration=
### Change the default log interval, 100 is default
# log_interval=100
### Set location of the output files (required for logging)
# output_folder=/home/<USERNAME>/mangologs
### Permit uploading logs directly to FlightlessMango.com
# permit_upload=1
### Define a '+'-separated list of percentiles shown in the benchmark results
### Use "AVG" to get a mean average. Default percentiles are 97+AVG+1+0.1
# benchmark_percentiles=97,AVG,1,0.1
Install gamemode package:
sudo pacman -S gamemode
Then enable gamemode in lutris settings - either per game or per runner (systemwide).
Allow your wheel user to edit process priorities by adding the following to the limits config:
/etc/security/limits.conf
@wheel - nice -20
Modify configuration to your liking, here is an example:
$HOME/.config/gamemode.ini
[general]
; The reaper thread will check every 5 seconds for exited clients, for config file changes, and for the CPU/iGPU power balance
reaper_freq=5
; The desired governor is used when entering GameMode instead of "performance"
desiredgov=performance
; The default governor is used when leaving GameMode instead of restoring the original value
;defaultgov=powersave
; The iGPU desired governor is used when the integrated GPU is under heavy load
igpu_desiredgov=powersave
; Threshold to use to decide when the integrated GPU is under heavy load.
; This is a ratio of iGPU Watts / CPU Watts which is used to determine when the
; integraged GPU is under heavy enough load to justify switching to
; igpu_desiredgov. Set this to -1 to disable all iGPU checking and always
; use desiredgov for games.
#igpu_power_threshold=0.3
; GameMode can change the scheduler policy to SCHED_ISO on kernels which support it (currently
; not supported by upstream kernels). Can be set to "auto", "on" or "off". "auto" will enable
; with 4 or more CPU cores. "on" will always enable. Defaults to "off".
softrealtime=on
; GameMode can renice game processes. You can put any value between 0 and 20 here, the value
; will be negated and applied as a nice value (0 means no change). Defaults to 0.
renice=8
; By default, GameMode adjusts the iopriority of clients to BE/0, you can put any value
; between 0 and 7 here (with 0 being highest priority), or one of the special values
; "off" (to disable) or "reset" (to restore Linux default behavior based on CPU priority),
; currently, only the best-effort class is supported thus you cannot set it here
ioprio=0
; Sets whether gamemode will inhibit the screensaver when active
; Defaults to 1
inhibit_screensaver=1
[filter]
; If "whitelist" entry has a value(s)
; gamemode will reject anything not in the whitelist
;whitelist=RiseOfTheTombRaider
; Gamemode will always reject anything in the blacklist
;blacklist=HalfLife3
; glxgears
[gpu]
; Here Be Dragons!
; Warning: Use these settings at your own risk
; Any damage to hardware incurred due to this feature is your responsibility and yours alone
; It is also highly recommended you try these settings out first manually to find the sweet spots
; Setting this to the keyphrase "accept-responsibility" will allow gamemode to apply GPU optimisations such as overclocks
;apply_gpu_optimisations=0
; The DRM device number on the system (usually 0), ie. the number in /sys/class/drm/card0/
;gpu_device=0
; Nvidia specific settings
; Requires the coolbits extension activated in nvidia-xconfig
; This corresponds to the desired GPUPowerMizerMode
; "Adaptive"=0 "Prefer Maximum Performance"=1 and "Auto"=2
; See NV_CTRL_GPU_POWER_MIZER_MODE and friends in https://github.com/NVIDIA/nvidia-settings/blob/master/src/libXNVCtrl/NVCtrl.h
;nv_powermizer_mode=1
; These will modify the core and mem clocks of the highest perf state in the Nvidia PowerMizer
; They are measured as Mhz offsets from the baseline, 0 will reset values to default, -1 or unset will not modify values
;nv_core_clock_mhz_offset=0
;nv_mem_clock_mhz_offset=0
; AMD specific settings
; Requires a relatively up to date AMDGPU kernel module
; See: https://dri.freedesktop.org/docs/drm/gpu/amdgpu.html#gpu-power-thermal-controls-and-monitoring
; It is also highly recommended you use lm-sensors (or other available tools) to verify card temperatures
; This corresponds to power_dpm_force_performance_level, "manual" is not supported for now
;amd_performance_level=high
[supervisor]
; This section controls the new gamemode functions gamemode_request_start_for and gamemode_request_end_for
; The whilelist and blacklist control which supervisor programs are allowed to make the above requests
;supervisor_whitelist=
;supervisor_blacklist=
; In case you want to allow a supervisor to take full control of gamemode, this option can be set
; This will only allow gamemode clients to be registered by using the above functions by a supervisor client
;require_supervisor=0
[custom]
; Custom scripts (executed using the shell) when gamemode starts and ends
;start=notify-send "GameMode started"
; /home/me/bin/stop_ethmining.sh
;end=notify-send "GameMode ended"
; /home/me/bin/start_ethmining.sh
; Timeout for scripts (seconds). Scripts will be killed if they do not complete within this time.
;script_timeout=10
Note: Before you can use VAAPI you need to sudo pacman -S mesa-git
i.e. switch to the AUR version of mesa which has hardware encoding enabled.
Video:
- Base Resolution: 2560x1440 (monitor resolution)
- Output Resolution: 2560x1440 (so youtube doesn't compress as much)
- Downscale Filter: your choice
Output (Recording):
- Type: Standard
- Encoder: FFMPEG VAAPI H.264
- Format: mkv
- Rescale Output: disabled
- Profile: Constrained Baseline
- Level: 4.0
- Rate Control: CBR
- Bitrate: 25000
- Keyframe Interval: 0 (Auto)
Video:
- Base Resolution: 2560x1440 (monitor resolution)
- Output Resolution: 2560x1440 (so youtube doesn't compress as much)
- Downscale Filter: your choice
Output (Recording):
- Type: Standard
- Encoder: x264
- Format: mkv
- Rescale Output: disabled
- Rate Control
- Option 1:
- CRF: 18 (you may need to go higher if your CPUcan't handle it)
- Option 2:
- CBR: 16384 Kbps (you may need to go lower if your CPU can't handle it)
- Option 1:
- Keyframe Interval: 0 (Auto)
- CPU usage Preset: veryfast
- Profile: none
- Tune: none (got to "zerolatency" if your CPU can't handle it but it will cause frame skips)
This fixes nct6687 driver not working properly (cannot set PWM values) in case you have it on your board.
Install nct6687-dkms-git package (need AUR packages enabled):
sudo pacman -S nct6687-dkms-git
Blacklist nct6683 driver:
/etc/modprobe.d/nct6683-blacklist.conf
blacklist nct6683
Install xone-dkms package from AUR.
Then reload udev rules:
sudo udevadm control --reload-rules
sudo udevadm trigger
Just for quick reference, might need to install some packages first:
# show display info
xrandr --prop
# show driver info
vulkaninfo --summary
# show GPU utilization
radeontop
# test if freesync is working
vrrtest
# check if reBAR is enabled
AMD_DEBUG=info glxinfo | grep vram