Gaming optimizations for Linux
/mouse
Disable mouse acceleration in X11
$ cat /usr/share/X11/xorg.conf.d/40-libinput.conf
[...]
Section "InputClass"
Identifier "libinput pointer catchall"
MatchIsPointer "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
Option "AccelProfile" "flat" #<-- setting this to flat means no acceleration 🥰
EndSection
[...]
/kernel
Set low-latency GRUB kernel parameters
Tweaks
| Parameter | Effect |
|---|---|
threadirqs |
Move interrupt handling to threads for better prioritization |
preempt=full |
Full kernel preemption for lower input lag |
processor.max_cstate=1 |
Keep CPU awake, no deep sleep states |
tsc=reliable |
Trust CPU's timestamp counter (reduces overhead) |
nowatchdog |
Disable watchdog timer (reduces jitter) |
Apply basic parameters:
$ sudo vim /etc/default/grub # Find: GRUB_CMDLINE_LINUX_DEFAULT="quiet nvidia_drm.modeset=1" # Change to: GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet nvidia_drm.modeset=1 threadirqs preempt=full processor.max_cstate=1 tsc=reliable nowatchdog" # Update GRUB: $ sudo grub-mkconfig -o /boot/grub/grub.cfg $ reboot
Verify parameters are active:
$ cat /proc/cmdline
/tweaks
Low latency tweaks
This script makes it easy to apply several latency reducing tweaks to your X11 setup. You can toggle individual optimizations on/off with a simple TUI menu.
Installation
Copy the script below and save it as optimize-interactive.sh
$ mkdir -p ~/linux_latency && cd ~/linux_latency $ vim optimize-interactive.sh # Paste the script below $ chmod +x optimize-interactive.sh $ sudo ./optimize-interactive.sh
Full script:
#!/bin/bash
# Modular Low Latency Optimizer - Interactive Mode
# Architecture: Each optimization is a self-contained feature
set -e
# ============================================================================
# CONFIGURATION
# ============================================================================
LOGFILE="optimize.log"
XORG_CONF="/etc/X11/xorg.conf"
SERVICE_NAME="cpu-performance"
SERVICE_DIR="/etc/runit/sv/$SERVICE_NAME"
# ============================================================================
# FEATURE REGISTRY
# ============================================================================
# To add a feature:
# 1. Add ID to FEATURE_IDS array
# 2. Define metadata (NAME, DESC, RESTART, REQUIRES_ROOT)
# 3. Implement: check_FEATURE(), install_FEATURE(), uninstall_FEATURE()
FEATURE_IDS=(
"cpu_governor"
"cpu_epp"
"cpu_boost"
"cpu_freq_lock"
"nvidia_pipeline"
"nvidia_composite"
"nvidia_triple_buffer"
"nvidia_powermizer"
)
# Feature metadata
declare -A FEATURE_NAME
declare -A FEATURE_DESC
declare -A FEATURE_RESTART # none, x11, reboot
declare -A FEATURE_REQUIRES_ROOT
# CPU Governor
FEATURE_NAME[cpu_governor]="CPU Performance Governor"
FEATURE_DESC[cpu_governor]="Set scaling governor to performance (no frequency scaling)"
FEATURE_RESTART[cpu_governor]="none"
FEATURE_REQUIRES_ROOT[cpu_governor]=1
# CPU EPP
FEATURE_NAME[cpu_epp]="CPU Energy Performance Preference"
FEATURE_DESC[cpu_epp]="Set EPP to performance (maximum power state)"
FEATURE_RESTART[cpu_epp]="none"
FEATURE_REQUIRES_ROOT[cpu_epp]=1
# CPU Boost
FEATURE_NAME[cpu_boost]="Disable CPU Boost"
FEATURE_DESC[cpu_boost]="Disable boost for consistent timing (reduces peak frequency)"
FEATURE_RESTART[cpu_boost]="none"
FEATURE_REQUIRES_ROOT[cpu_boost]=1
# CPU Frequency Lock
FEATURE_NAME[cpu_freq_lock]="Lock CPU Frequency"
FEATURE_DESC[cpu_freq_lock]="Lock minimum frequency to maximum (constant high frequency)"
FEATURE_RESTART[cpu_freq_lock]="none"
FEATURE_REQUIRES_ROOT[cpu_freq_lock]=1
# NVIDIA Composition Pipeline
FEATURE_NAME[nvidia_pipeline]="Disable NVIDIA Composition Pipeline"
FEATURE_DESC[nvidia_pipeline]="Remove composition pipeline (saves 1-2 frames latency)"
FEATURE_RESTART[nvidia_pipeline]="x11"
FEATURE_REQUIRES_ROOT[nvidia_pipeline]=1
# NVIDIA Composite Extension
FEATURE_NAME[nvidia_composite]="Disable X11 Composite Extension"
FEATURE_DESC[nvidia_composite]="Disable Composite (WARNING: breaks transparency)"
FEATURE_RESTART[nvidia_composite]="x11"
FEATURE_REQUIRES_ROOT[nvidia_composite]=1
# NVIDIA Triple Buffer
FEATURE_NAME[nvidia_triple_buffer]="Disable Triple Buffering"
FEATURE_DESC[nvidia_triple_buffer]="Disable triple buffering (reduces buffer lag)"
FEATURE_RESTART[nvidia_triple_buffer]="x11"
FEATURE_REQUIRES_ROOT[nvidia_triple_buffer]=1
# NVIDIA PowerMizer
FEATURE_NAME[nvidia_powermizer]="NVIDIA Max Performance Mode"
FEATURE_DESC[nvidia_powermizer]="Force GPU to maximum performance level"
FEATURE_RESTART[nvidia_powermizer]="x11"
FEATURE_REQUIRES_ROOT[nvidia_powermizer]=1
# ============================================================================
# UTILITY FUNCTIONS
# ============================================================================
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOGFILE"
}
check_root() {
if [ "$EUID" -ne 0 ]; then
return 1
fi
return 0
}
# Get highest restart level needed
get_highest_restart() {
local current="$1"
local new="$2"
if [ "$current" = "reboot" ] || [ "$new" = "reboot" ]; then
echo "reboot"
elif [ "$current" = "x11" ] || [ "$new" = "x11" ]; then
echo "x11"
else
echo "none"
fi
}
# ============================================================================
# FEATURE: CPU Governor
# ============================================================================
check_cpu_governor() {
[ ! -f /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ] && return 2
local gov=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2>/dev/null || echo "")
[ "$gov" = "performance" ] && return 0 || return 1
}
install_cpu_governor() {
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
echo performance > "$cpu" 2>/dev/null || true
done
log "CPU governor set to performance"
}
uninstall_cpu_governor() {
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
echo powersave > "$cpu" 2>/dev/null || true
done
log "CPU governor reset to powersave"
}
# ============================================================================
# FEATURE: CPU EPP
# ============================================================================
check_cpu_epp() {
[ ! -f /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference ] && return 2
local epp=$(cat /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference 2>/dev/null || echo "")
[ "$epp" = "performance" ] && return 0 || return 1
}
install_cpu_epp() {
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference; do
echo performance > "$cpu" 2>/dev/null || true
done
log "CPU EPP set to performance"
}
uninstall_cpu_epp() {
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference; do
echo balance_performance > "$cpu" 2>/dev/null || true
done
log "CPU EPP reset to balance_performance"
}
# ============================================================================
# FEATURE: CPU Boost
# ============================================================================
check_cpu_boost() {
[ ! -f /sys/devices/system/cpu/cpufreq/boost ] && return 2
local boost=$(cat /sys/devices/system/cpu/cpufreq/boost 2>/dev/null || echo "")
[ "$boost" = "0" ] && return 0 || return 1
}
install_cpu_boost() {
echo 0 > /sys/devices/system/cpu/cpufreq/boost 2>/dev/null || true
log "CPU boost disabled"
}
uninstall_cpu_boost() {
echo 1 > /sys/devices/system/cpu/cpufreq/boost 2>/dev/null || true
log "CPU boost enabled"
}
# ============================================================================
# FEATURE: CPU Frequency Lock
# ============================================================================
check_cpu_freq_lock() {
[ ! -f /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq ] && return 2
local min_freq=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq 2>/dev/null || echo "0")
local max_freq=$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 2>/dev/null || echo "1")
[ "$min_freq" = "$max_freq" ] && return 0 || return 1
}
install_cpu_freq_lock() {
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq; do
local max_freq=$(cat "${cpu/scaling_min_freq/cpuinfo_max_freq}" 2>/dev/null) || continue
echo "$max_freq" > "$cpu" 2>/dev/null || true
done
log "CPU frequency locked to maximum"
}
uninstall_cpu_freq_lock() {
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq; do
local min_freq=$(cat "${cpu/scaling_min_freq/cpuinfo_min_freq}" 2>/dev/null) || continue
echo "$min_freq" > "$cpu" 2>/dev/null || true
done
log "CPU frequency scaling restored"
}
# ============================================================================
# FEATURE: NVIDIA Composition Pipeline
# ============================================================================
check_nvidia_pipeline() {
[ ! -f "$XORG_CONF" ] && return 2
grep -q "ForceCompositionPipeline=Off" "$XORG_CONF" 2>/dev/null && return 0 || return 1
}
install_nvidia_pipeline() {
[ ! -f "$XORG_CONF" ] && { log "ERROR: $XORG_CONF not found"; return 1; }
local backup="${XORG_CONF}.backup-$(date +%Y%m%d-%H%M%S)"
cp "$XORG_CONF" "$backup"
sed -i 's/ForceCompositionPipeline=On/ForceCompositionPipeline=Off/g' "$XORG_CONF"
sed -i 's/ForceFullCompositionPipeline=On/ForceFullCompositionPipeline=Off/g' "$XORG_CONF"
log "NVIDIA composition pipeline disabled (backup: $backup)"
}
uninstall_nvidia_pipeline() {
[ ! -f "$XORG_CONF" ] && { log "ERROR: $XORG_CONF not found"; return 1; }
sed -i 's/ForceCompositionPipeline=Off/ForceCompositionPipeline=On/g' "$XORG_CONF"
sed -i 's/ForceFullCompositionPipeline=Off/ForceFullCompositionPipeline=On/g' "$XORG_CONF"
log "NVIDIA composition pipeline enabled"
}
# ============================================================================
# FEATURE: NVIDIA Composite Extension
# ============================================================================
check_nvidia_composite() {
[ ! -f "$XORG_CONF" ] && return 2
grep -q '"Composite" "false"' "$XORG_CONF" 2>/dev/null && return 0 || return 1
}
install_nvidia_composite() {
[ ! -f "$XORG_CONF" ] && { log "ERROR: $XORG_CONF not found"; return 1; }
local backup="${XORG_CONF}.backup-$(date +%Y%m%d-%H%M%S)"
cp "$XORG_CONF" "$backup"
sed -i 's/Option.*"Composite" "true"/Option "Composite" "false"/' "$XORG_CONF"
if ! grep -q '"Composite"' "$XORG_CONF"; then
sed -i '/^Section "Extensions"/a\ Option "Composite" "false"' "$XORG_CONF"
fi
log "X11 Composite extension disabled (backup: $backup)"
}
uninstall_nvidia_composite() {
[ ! -f "$XORG_CONF" ] && { log "ERROR: $XORG_CONF not found"; return 1; }
sed -i 's/Option.*"Composite" "false"/Option "Composite" "true"/' "$XORG_CONF"
log "X11 Composite extension enabled"
}
# ============================================================================
# FEATURE: NVIDIA Triple Buffer
# ============================================================================
check_nvidia_triple_buffer() {
[ ! -f "$XORG_CONF" ] && return 2
grep -q '"TripleBuffer" "False"' "$XORG_CONF" 2>/dev/null && return 0 || return 1
}
install_nvidia_triple_buffer() {
[ ! -f "$XORG_CONF" ] && { log "ERROR: $XORG_CONF not found"; return 1; }
local backup="${XORG_CONF}.backup-$(date +%Y%m%d-%H%M%S)"
cp "$XORG_CONF" "$backup"
if ! grep -q "TripleBuffer" "$XORG_CONF"; then
sed -i '/^Section "Device"/,/^EndSection/ {
/^EndSection/ i\ Option "TripleBuffer" "False"
}' "$XORG_CONF"
else
sed -i 's/"TripleBuffer" "[Tt]rue"/"TripleBuffer" "False"/g' "$XORG_CONF"
fi
log "NVIDIA triple buffering disabled (backup: $backup)"
}
uninstall_nvidia_triple_buffer() {
[ ! -f "$XORG_CONF" ] && { log "ERROR: $XORG_CONF not found"; return 1; }
sed -i 's/"TripleBuffer" "False"/"TripleBuffer" "True"/g' "$XORG_CONF"
log "NVIDIA triple buffering enabled"
}
# ============================================================================
# FEATURE: NVIDIA PowerMizer
# ============================================================================
check_nvidia_powermizer() {
[ ! -f "$XORG_CONF" ] && return 2
grep -q "PowerMizerEnable=0x1.*PerfLevelSrc=0x3333" "$XORG_CONF" 2>/dev/null && return 0 || return 1
}
install_nvidia_powermizer() {
[ ! -f "$XORG_CONF" ] && { log "ERROR: $XORG_CONF not found"; return 1; }
local backup="${XORG_CONF}.backup-$(date +%Y%m%d-%H%M%S)"
cp "$XORG_CONF" "$backup"
if ! grep -q "PowerMizerEnable" "$XORG_CONF"; then
sed -i '/^Section "Device"/,/^EndSection/ {
/^EndSection/ i\ Option "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x3333; PowerMizerLevel=0x3; PowerMizerDefault=0x3; PowerMizerDefaultAC=0x3"
}' "$XORG_CONF"
fi
log "NVIDIA PowerMizer set to max performance (backup: $backup)"
}
uninstall_nvidia_powermizer() {
[ ! -f "$XORG_CONF" ] && { log "ERROR: $XORG_CONF not found"; return 1; }
sed -i '/PowerMizer/d' "$XORG_CONF"
log "NVIDIA PowerMizer settings removed"
}
# ============================================================================
# MENU SYSTEM
# ============================================================================
show_menu() {
local restart_needed="$1"
clear
echo "============================================================================"
echo " Low Latency Optimizer - Interactive Mode"
echo "============================================================================"
echo ""
echo "Select features to enable/disable:"
echo ""
local i=1
for feature_id in "${FEATURE_IDS[@]}"; do
local status="[N/A]"
local color=""
if check_${feature_id} 2>/dev/null; then
local ret=$?
if [ $ret -eq 0 ]; then
status="[ON ]"
color="\033[32m"
elif [ $ret -eq 1 ]; then
status="[OFF]"
color="\033[90m"
else
status="[N/A]"
color="\033[90m"
fi
fi
printf " %2d) ${color}%s\033[0m %s\n" "$i" "$status" "${FEATURE_NAME[$feature_id]}"
printf " %s\n" "${FEATURE_DESC[$feature_id]}"
echo ""
((i++))
done
echo " a) Apply all optimizations"
echo " r) Remove all optimizations"
echo " s) Show current status"
echo " q) Quit"
echo ""
if [ -n "$restart_needed" ] && [ "$restart_needed" != "none" ]; then
echo "============================================================================"
case "$restart_needed" in
x11)
echo "⚠ Changes require X11 restart (logout/login)"
;;
reboot)
echo "⚠ Changes require system reboot"
;;
esac
echo "============================================================================"
echo ""
fi
}
show_status() {
clear
echo "============================================================================"
echo " Current System Status"
echo "============================================================================"
echo ""
echo "CPU:"
echo " Governor: $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2>/dev/null || echo N/A)"
echo " EPP: $(cat /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference 2>/dev/null || echo N/A)"
echo " Frequency: $(awk '{printf "%.0f MHz", $1/1000}' /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 2>/dev/null || echo N/A)"
echo " Boost: $(cat /sys/devices/system/cpu/cpufreq/boost 2>/dev/null || echo N/A) (0=off, 1=on)"
echo ""
echo "GPU:"
nvidia-smi --query-gpu=name,pstate,clocks.gr --format=csv,noheader 2>/dev/null | \
awk -F', ' '{print " GPU: " $1 "\n State: " $2 "\n Clock: " $3}' || echo " N/A"
echo ""
read -p "Press Enter to continue..."
}
toggle_feature() {
local feature_id="$1"
if ! check_root; then
echo ""
echo "Error: Root privileges required for this operation"
echo "Please run: sudo $0"
echo ""
read -p "Press Enter to continue..."
return 1
fi
echo ""
echo "Feature: ${FEATURE_NAME[$feature_id]}"
if check_${feature_id} 2>/dev/null; then
local ret=$?
if [ $ret -eq 0 ]; then
echo "Currently: ENABLED"
read -p "Disable this feature? (y/n): " confirm
if [ "$confirm" = "y" ]; then
uninstall_${feature_id}
echo "✓ Feature disabled"
fi
elif [ $ret -eq 1 ]; then
echo "Currently: DISABLED"
read -p "Enable this feature? (y/n): " confirm
if [ "$confirm" = "y" ]; then
install_${feature_id}
echo "✓ Feature enabled"
fi
else
echo "Status: Not available on this system"
fi
fi
echo ""
read -p "Press Enter to continue..."
echo "${FEATURE_RESTART[$feature_id]}"
}
apply_all() {
if ! check_root; then
echo ""
echo "Error: Root privileges required"
echo "Please run: sudo $0"
echo ""
read -p "Press Enter to continue..."
return 1
fi
echo ""
echo "Enabling all optimizations..."
echo ""
local restart_needed="none"
for feature_id in "${FEATURE_IDS[@]}"; do
if check_${feature_id} 2>/dev/null; then
local ret=$?
if [ $ret -eq 1 ]; then
echo "Enabling: ${FEATURE_NAME[$feature_id]}"
install_${feature_id} 2>&1 | grep -v "^$"
restart_needed=$(get_highest_restart "$restart_needed" "${FEATURE_RESTART[$feature_id]}")
fi
fi
done
echo ""
echo "✓ All optimizations applied"
echo ""
read -p "Press Enter to continue..."
echo "$restart_needed"
}
remove_all() {
if ! check_root; then
echo ""
echo "Error: Root privileges required"
echo "Please run: sudo $0"
echo ""
read -p "Press Enter to continue..."
return 1
fi
echo ""
echo "Removing all optimizations..."
echo ""
local restart_needed="none"
for feature_id in "${FEATURE_IDS[@]}"; do
if check_${feature_id} 2>/dev/null; then
local ret=$?
if [ $ret -eq 0 ]; then
echo "Disabling: ${FEATURE_NAME[$feature_id]}"
uninstall_${feature_id} 2>&1 | grep -v "^$"
restart_needed=$(get_highest_restart "$restart_needed" "${FEATURE_RESTART[$feature_id]}")
fi
fi
done
echo ""
echo "✓ All optimizations removed"
echo ""
read -p "Press Enter to continue..."
echo "$restart_needed"
}
# ============================================================================
# MAIN INTERACTIVE LOOP
# ============================================================================
main_interactive() {
local restart_needed="none"
while true; do
show_menu "$restart_needed"
read -p "Choice: " choice
case "$choice" in
[0-9]|[0-9][0-9])
local idx=$((choice - 1))
if [ $idx -ge 0 ] && [ $idx -lt ${#FEATURE_IDS[@]} ]; then
local feature_id="${FEATURE_IDS[$idx]}"
local new_restart=$(toggle_feature "$feature_id")
restart_needed=$(get_highest_restart "$restart_needed" "$new_restart")
fi
;;
a|A)
local new_restart=$(apply_all)
restart_needed=$(get_highest_restart "$restart_needed" "$new_restart")
;;
r|R)
local new_restart=$(remove_all)
restart_needed=$(get_highest_restart "$restart_needed" "$new_restart")
;;
s|S)
show_status
;;
q|Q)
break
;;
*)
echo "Invalid choice"
sleep 1
;;
esac
done
if [ -n "$restart_needed" ] && [ "$restart_needed" != "none" ]; then
echo ""
echo "============================================================================"
case "$restart_needed" in
x11)
echo "Changes require X11 restart to take effect"
echo ""
echo "Options:"
echo " - Logout and login"
echo " - Reboot system"
;;
reboot)
echo "Changes require system reboot to take effect"
;;
esac
echo "============================================================================"
fi
echo ""
echo "Changes logged to: $LOGFILE"
}
# ============================================================================
# ENTRY POINT
# ============================================================================
main_interactive
Features & Optimizations
- Interactive Menu: Live status display with color-coded toggles ([ON]/[OFF]/[N/A])
- Smart Restart Detection: Automatically tracks when X11 restart or reboot is needed
- Modular Architecture: Easy to add or remove features
| Optimization | Effect | Restart |
|---|---|---|
| CPU Optimizations | ||
| CPU Performance Governor | No frequency scaling | None |
| CPU EPP to Performance | Max power state | None |
| Disable CPU Boost | Consistent timing | None |
| Lock CPU Frequency | Constant high freq | None |
| NVIDIA GPU Optimizations | ||
| Disable Composition Pipeline | -1-2 frames latency | X11 |
| Disable Composite Extension | Direct rendering | X11 |
| Disable Triple Buffering | Reduced buffer lag | X11 |
| NVIDIA Max Performance | Force max GPU state | X11 |
Usage Examples
$ sudo ./optimize-interactive.sh
============================================================================
Low Latency Optimizer - Interactive Mode
============================================================================
Select features to enable/disable:
1) [OFF] CPU Performance Governor
Set scaling governor to performance (no frequency scaling)
2) [OFF] CPU Energy Performance Preference
Set EPP to performance (maximum power state)
3) [ON ] Disable CPU Boost
Disable boost for consistent timing (reduces peak frequency)
[...]
a) Apply all optimizations
r) Remove all optimizations
s) Show current status
q) Quit
Choice: _
Customization
The script uses a modular architecture. Adding a new feature requires:
1. Register feature ID in FEATURE_IDS array 2. Define metadata (name, description, restart requirement) 3. Implement: check_FEATURE(), install_FEATURE(), uninstall_FEATURE()
Example: Adding a new feature
# 1. Register
FEATURE_IDS+=("my_feature")
# 2. Metadata
FEATURE_NAME[my_feature]="My Custom Optimization"
FEATURE_DESC[my_feature]="What this does"
FEATURE_RESTART[my_feature]="x11" # or "none" or "reboot"
FEATURE_REQUIRES_ROOT[my_feature]=1
# 3. Implement functions
check_my_feature() {
# Return 0 if enabled, 1 if disabled, 2 if N/A
}
install_my_feature() {
# Enable the feature
}
uninstall_my_feature() {
# Disable the feature
}
/udev
G-Wolves Mouse udev Rule
To access G-Wolves mouse settings through their web-based software on Linux, you need to create a udev rule that allows your user to access the USB receiver.
Step 1: Identify your mouse's Vendor ID and Product ID
$ lsusb
Look for a line containing "G-Wolves". Example output:
Bus 003 Device 003: ID 33e4:3717 G-Wolves G-Wolves Fenrir Max 8K Wireless Mouse-N
In this example: 33e4 is the Vendor ID, 3717 is the Product ID
Step 2: Create the udev rule
$ sudo vim /etc/udev/rules.d/70-g-wolves.rules
Step 3: Add the rule content
Paste this line, replacing the IDs with your mouse's values:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="33e4", ATTRS{idProduct}=="3717", MODE="0660", TAG+="uaccess"
Step 4: Apply the changes
$ sudo reboot
/display
X11 vs Wayland Discussion
Wayland is the future. It brings modern features, better security, and fixes a ton of legacy X11 issues. But when it comes to pure gaming performance, especially minimizing input and presentation latency, X11 as of 2025 is still faster.
X11 delivers consistently lower latency than Wayland.
Mort's Latency Discussion: Wayland ≈ +6.5ms Lag
Findings:
- * Wayland (GNOME):
23.2 ms - * X11 (GNOME):
16.7 ms
X11 is ~6.5 ms faster - roughly one full frame at 144Hz.Zamundaaa's Latency Report: X11's Immediate Modes Beat Wayland's FIFO
Findings:
- * X11 (with uncomposited or "immediate" presentation) is fastest.
- * Wayland compositors add buffering - especially when VSync and compositing are enabled.
- * Worst-case (99th percentile) latency was also better under X11.
"Wayland is catching up,” zamundaaa notes, but “X11 is still the better choice for absolute lowest latency.”