Other News about gaming on Linux

Monitor Screen Looks Blurry but not when HDR is Enabled.

Reddit Linux_Gaming - 23. April 2026 - 10:02

As the title says if I disable HDR the Monitor Screen Looks Blurry, I tried scaling to 100% but it stills the same, the thing is I have a second monitor and it appears fine there, the monitor I have a issue with is a Samsung G60SD.

I'm using Fedora 43 KDE with Wayland.

Also I don't know if I should just leave HDR enabled all the time because on windows is generally not recommended,

Any help is appreciated.

submitted by /u/Alex_1_7
[link] [comments]

Automatic LG TV Power Control on Linux HTPC (No HDMI-CEC, No Windows)

Reddit Linux_Gaming - 23. April 2026 - 09:37

Platform: CachyOS Handheld / Gamescope / Steam Big Picture
Goal: TV turns on/off automatiPlatform: CachyOS Handheld / Gamescope / Steam Big Picture
Goal: TV turns on/off automatically with the PC, Denon AVR switches to correct input, 8BitDo controller can be safely turned off during suspend without waking the system.

The Problem

Laptops and handhelds don't support HDMI-CEC output only TVs and dedicated HTPC hardware typically do. So you can't just rely on the TV to follow the PC's power state. My previous setup was a janky chain:

  • On wake: wait for network → ping Home Assistant → HA triggers automation → Apple TV turns on → LG TV turns on via HDMI-CEC from Apple TV → Denon switches input
  • On sleep: send HA event to notify of sleep

This took 20+ seconds before the PC's image appeared on screen, was fragile, and broke constantly.

Additionally, my 8BitDo Ultimate 2C controller (USB dongle) would wake the system when turned off because it sends a USB signal during shutdown — requiring a cooldown window before suspend.

The Solution

LG Buddy a set of systemd services using bscpylgtv to talk directly to the LG WebOS API over the network. No HA, no Apple TV in the chain.

Combined with: - Direct Denon AVR control via TCP/port 23 - USB driver unbind trick for the controller cooldown window

Prerequisites

sudo pacman -S python python-pip wakeonlan

Install LG Buddy: git clone https://github.com/Faceless3882/LG_Buddy cd LG_Buddy chmod +x install.sh ./install.sh

Run configure.sh to set your TV's IP, MAC address, and HDMI input. On first use, accept the pairing prompt on your LG TV.

How LG Buddy Works

Three systemd services handle everything:

Service Trigger Action LG_Buddy.service Boot/Shutdown TV on at boot, off at shutdown LG_Buddy_sleep.service Pre-suspend TV off, writes state file LG_Buddy_wake.service Post-resume Reads state file, WOL → TV on, switches HDMI input

The state file (/run/lg_buddy/screen_off_by_us) is the key on sleep it records that we turned the TV off. On wake, if the file exists it restores the TV; if not (TV was already off or on a different input), it skips. Smart behaviour that prevents randomly turning the TV on when you weren't watching.

Gamescope / swayidle note

LG Buddy includes a screen idle service using swayidle. This does not work in gamescope - gamescope doesn't implement the ext-idle-notify-v1 Wayland protocol. Disable it:

systemctl --user disable --now LG_Buddy_screen.service

The sleep/wake services work perfectly fine in gamescope since they're system-level and don't depend on the compositor.

The Network Problem on Sleep

LG Buddy's sleep service has After=network-online.target but on WiFi, NetworkManager tears down the connection during suspend preparation — often before LG_Buddy_sleep can open a WebSocket to the TV. Fix this by explicitly ordering LG_Buddy_sleep before NetworkManager's sleep hook:

/etc/systemd/system/LG_Buddy_sleep.service: ```ini [Unit] Description=Turn off LG TV before sleep Before=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target Before=systemd-suspend.service systemd-hibernate.service systemd-hybrid-sleep.service systemd-suspend-then-hibernate.service Before=NetworkManager-sleep.service Before=delay-suspend.service After=network-online.target Wants=network-online.target

[Service] Type=oneshot ExecStart=/usr/bin/LG_Buddy_sleep_pre TimeoutStartSec=60

[Install] WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target ```

The Before=delay-suspend.service line is explained in the next section.

Controller Cooldown: Preventing Wake-on-Shutdown

The 8BitDo Ultimate 2C sends a USB signal when powered off. If the system is in the process of suspending or already suspended, this signal wakes it back up.

The fix: unbind the USB drivers for the controller before suspend, giving a 20-second window to physically turn it off. udev automatically rebinds on wake.

/usr/local/bin/delay-suspend.sh: ```bash

!/usr/bin/env bash

set -u VID=2dc8 PID=310a WAIT=20 ints=() drvs=() for d in /sys/bus/usb/devices/; do [[ -f "$d/idVendor" && -f "$d/idProduct" ]] || continue [[ "$(cat "$d/idVendor")" == "$VID" && "$(cat "$d/idProduct")" == "$PID" ]] || continue for i in "$d":; do [[ -L "$i/driver" ]] || continue ints+=("$(basename "$i")") drvs+=("$(basename "$(readlink -f "$i/driver")")") done done for n in "${!ints[@]}"; do path="/sys/bus/usb/drivers/${drvs[$n]}/unbind" [[ -w "$path" ]] || continue printf '%s' "${ints[$n]}" > "$path" 2>/dev/null || true done sleep "$WAIT" exit 0 ```

Note: no rebind at the end — udev handles that on wake. If you rebind before suspend the controller is active again and defeats the purpose.

/etc/systemd/system/delay-suspend.service: ```ini [Unit] Description=Delay suspend 20s to let controller shut off first Before=sleep.target suspend.target

[Service] Type=oneshot ExecStart=/usr/local/bin/delay-suspend.sh

[Install] WantedBy=sleep.target suspend.target ```

Why LG_Buddy_sleep must run BEFORE delay-suspend

This is the critical ordering insight. delay-suspend takes 20 seconds. On WiFi, NetworkManager drops the connection within those 20 seconds. If LG_Buddy_sleep runs after delay-suspend, the network is already gone and it can't reach the TV — the state file never gets written — and on wake the TV never turns back on.

Correct suspend sequence: 1. LG_Buddy_sleep — network still up, turns TV off, writes state file (~5s) 2. delay-suspend — unbinds controller, 20s cooldown window 3. NetworkManager kills WiFi 4. System suspends

Enforced via Before=delay-suspend.service in LG_Buddy_sleep.service.

Denon AVR Input Switching

When the LG TV powers on, HDMI-CEC signals the Denon to switch to Apple TV input and turns Apple TV on. We need to override this with the correct PC input (GAME in my case) after everything settles.

Denon receivers support direct TCP control on port 23 using their AVR protocol. The HTTP API on newer firmware returns 403, but the telnet interface still works

Test it: python python3 -c " import socket, time s = socket.socket() s.connect(('YOUR_DENON_IP', 23)) s.send(b'SIGAME\r') time.sleep(0.5) print(s.recv(1024)) s.close() "

Common input command strings: SIGAME, SIMPLAY, SIBD, SICBL/SAT, SIDVD, SIAUX1

/usr/local/bin/on-wake.sh: ```bash

!/bin/bash Rebind controller immediately on wake

VID=2dc8 PID=310a for d in /sys/bus/usb/devices/; do [[ -f "$d/idVendor" && -f "$d/idProduct" ]] || continue [[ "$(cat "$d/idVendor")" == "$VID" && "$(cat "$d/idProduct")" == "$PID" ]] || continue for i in "$d":; do [[ -L "$i/driver" ]] && continue int=$(basename "$i") for drv in xpad usbhid; do path="/sys/bus/usb/drivers/$drv/bind" [[ -w "$path" ]] || continue echo "$int" > "$path" 2>/dev/null || true done done done

Wait for Apple TV CEC handshake to complete, then override Denon input

sleep 15 python3 -c " import socket, time s = socket.socket() s.settimeout(5) try: s.connect(('YOUR_DENON_IP', 23)) s.send(b'SIGAME\r') time.sleep(0.5) finally: s.close() " ```

Wire it into the wake service by adding to /etc/systemd/system/LG_Buddy_wake.service under [Service]: ini ExecStartPost=/usr/local/bin/on-wake.sh

The 15-second wait is to let Apple TV fully assert CEC control over Denon, then we send one clean override. Tune this value to your Apple TV's boot speed.

Final Suspend/Wake Flow

Suspend (hit power in Steam Big Picture): 1. Gamescope kills display — screen goes black 2. LG_Buddy_sleep: TV off via WebOS API, state file written 3. delay-suspend: controller input unbound — 20s to physically power off controller 4. NetworkManager drops WiFi 5. System suspends

Wake (press any button / power): 1. WiFi reconnects (nm-online) 2. LG_Buddy_wake: WOL packet → TV on → HDMI input switched 3. on-wake.sh: controller drivers rebound immediately 4. 15s wait → Denon switches to GAME input (overrides Apple TV CEC)

Reload After Any Changes

sudo systemctl daemon-reload

cally with the PC, Denon AVR switches to correct input, 8BitDo controller can be safely turned off during suspend without waking the system.

The Problem

Laptops and handhelds don't support HDMI-CEC output only TVs and dedicated HTPC hardware typically do. So you can't just rely on the TV to follow the PC's power state. My previous setup was a janky chain:

  • On wake: wait for network → ping Home Assistant → HA triggers automation → Apple TV turns on → LG TV turns on via HDMI-CEC from Apple TV → Denon switches input
  • On sleep: send HA event to notify of sleep

This took 20+ seconds before the PC's image appeared on screen, was fragile, and broke constantly.

Additionally, my 8BitDo Ultimate 2C controller (USB dongle) would wake the system when turned off because it sends a USB signal during shutdown — requiring a cooldown window before suspend.

The Solution

LG Buddy a set of systemd services using bscpylgtv to talk directly to the LG WebOS API over the network. No HA, no Apple TV in the chain.

Combined with: - Direct Denon AVR control via TCP/port 23 - USB driver unbind trick for the controller cooldown window

Prerequisites

sudo pacman -S python python-pip wakeonlan

Install LG Buddy: git clone https://github.com/Faceless3882/LG_Buddy cd LG_Buddy chmod +x install.sh ./install.sh

Run configure.sh to set your TV's IP, MAC address, and HDMI input. On first use, accept the pairing prompt on your LG TV.

How LG Buddy Works

Three systemd services handle everything:

Service Trigger Action LG_Buddy.service Boot/Shutdown TV on at boot, off at shutdown LG_Buddy_sleep.service Pre-suspend TV off, writes state file LG_Buddy_wake.service Post-resume Reads state file, WOL → TV on, switches HDMI input

The state file (/run/lg_buddy/screen_off_by_us) is the key on sleep it records that we turned the TV off. On wake, if the file exists it restores the TV; if not (TV was already off or on a different input), it skips. Smart behaviour that prevents randomly turning the TV on when you weren't watching.

Gamescope / swayidle note

LG Buddy includes a screen idle service using swayidle. This does not work in gamescope - gamescope doesn't implement the ext-idle-notify-v1 Wayland protocol. Disable it:

systemctl --user disable --now LG_Buddy_screen.service

The sleep/wake services work perfectly fine in gamescope since they're system-level and don't depend on the compositor.

The Network Problem on Sleep

LG Buddy's sleep service has After=network-online.target but on WiFi, NetworkManager tears down the connection during suspend preparation — often before LG_Buddy_sleep can open a WebSocket to the TV. Fix this by explicitly ordering LG_Buddy_sleep before NetworkManager's sleep hook:

/etc/systemd/system/LG_Buddy_sleep.service: ```ini [Unit] Description=Turn off LG TV before sleep Before=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target Before=systemd-suspend.service systemd-hibernate.service systemd-hybrid-sleep.service systemd-suspend-then-hibernate.service Before=NetworkManager-sleep.service Before=delay-suspend.service After=network-online.target Wants=network-online.target

[Service] Type=oneshot ExecStart=/usr/bin/LG_Buddy_sleep_pre TimeoutStartSec=60

[Install] WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target ```

The Before=delay-suspend.service line is explained in the next section.

Controller Cooldown: Preventing Wake-on-Shutdown

The 8BitDo Ultimate 2C sends a USB signal when powered off. If the system is in the process of suspending or already suspended, this signal wakes it back up.

The fix: unbind the USB drivers for the controller before suspend, giving a 20-second window to physically turn it off. udev automatically rebinds on wake.

/usr/local/bin/delay-suspend.sh: ```bash

!/usr/bin/env bash

set -u VID=2dc8 PID=310a WAIT=20 ints=() drvs=() for d in /sys/bus/usb/devices/; do [[ -f "$d/idVendor" && -f "$d/idProduct" ]] || continue [[ "$(cat "$d/idVendor")" == "$VID" && "$(cat "$d/idProduct")" == "$PID" ]] || continue for i in "$d":; do [[ -L "$i/driver" ]] || continue ints+=("$(basename "$i")") drvs+=("$(basename "$(readlink -f "$i/driver")")") done done for n in "${!ints[@]}"; do path="/sys/bus/usb/drivers/${drvs[$n]}/unbind" [[ -w "$path" ]] || continue printf '%s' "${ints[$n]}" > "$path" 2>/dev/null || true done sleep "$WAIT" exit 0 ```

Note: no rebind at the end — udev handles that on wake. If you rebind before suspend the controller is active again and defeats the purpose.

/etc/systemd/system/delay-suspend.service: ```ini [Unit] Description=Delay suspend 20s to let controller shut off first Before=sleep.target suspend.target

[Service] Type=oneshot ExecStart=/usr/local/bin/delay-suspend.sh

[Install] WantedBy=sleep.target suspend.target ```

Why LG_Buddy_sleep must run BEFORE delay-suspend

This is the critical ordering insight. delay-suspend takes 20 seconds. On WiFi, NetworkManager drops the connection within those 20 seconds. If LG_Buddy_sleep runs after delay-suspend, the network is already gone and it can't reach the TV — the state file never gets written — and on wake the TV never turns back on.

Correct suspend sequence: 1. LG_Buddy_sleep — network still up, turns TV off, writes state file (~5s) 2. delay-suspend — unbinds controller, 20s cooldown window 3. NetworkManager kills WiFi 4. System suspends

Enforced via Before=delay-suspend.service in LG_Buddy_sleep.service.

Denon AVR Input Switching

When the LG TV powers on, HDMI-CEC signals the Denon to switch to Apple TV input and turns Apple TV on. We need to override this with the correct PC input (GAME in my case) after everything settles.

Denon receivers support direct TCP control on port 23 using their AVR protocol. The HTTP API on newer firmware returns 403, but the telnet interface still works

Test it: python python3 -c " import socket, time s = socket.socket() s.connect(('YOUR_DENON_IP', 23)) s.send(b'SIGAME\r') time.sleep(0.5) print(s.recv(1024)) s.close() "

Common input command strings: SIGAME, SIMPLAY, SIBD, SICBL/SAT, SIDVD, SIAUX1

/usr/local/bin/on-wake.sh: ```bash

!/bin/bash Rebind controller immediately on wake

VID=2dc8 PID=310a for d in /sys/bus/usb/devices/; do [[ -f "$d/idVendor" && -f "$d/idProduct" ]] || continue [[ "$(cat "$d/idVendor")" == "$VID" && "$(cat "$d/idProduct")" == "$PID" ]] || continue for i in "$d":; do [[ -L "$i/driver" ]] && continue int=$(basename "$i") for drv in xpad usbhid; do path="/sys/bus/usb/drivers/$drv/bind" [[ -w "$path" ]] || continue echo "$int" > "$path" 2>/dev/null || true done done done

Wait for Apple TV CEC handshake to complete, then override Denon input

sleep 15 python3 -c " import socket, time s = socket.socket() s.settimeout(5) try: s.connect(('YOUR_DENON_IP', 23)) s.send(b'SIGAME\r') time.sleep(0.5) finally: s.close() " ```

Wire it into the wake service by adding to /etc/systemd/system/LG_Buddy_wake.service under [Service]: ini ExecStartPost=/usr/local/bin/on-wake.sh

The 15-second wait is to let Apple TV fully assert CEC control over Denon, then we send one clean override. Tune this value to your Apple TV's boot speed.

Final Suspend/Wake Flow

Suspend (hit power in Steam Big Picture): 1. Gamescope kills display — screen goes black 2. LG_Buddy_sleep: TV off via WebOS API, state file written 3. delay-suspend: controller input unbound — 20s to physically power off controller 4. NetworkManager drops WiFi 5. System suspends

Wake (press any button / power): 1. WiFi reconnects (nm-online) 2. LG_Buddy_wake: WOL packet → TV on → HDMI input switched 3. on-wake.sh: controller drivers rebound immediately 4. 15s wait → Denon switches to GAME input (overrides Apple TV CEC)

Reload After Any Changes

sudo systemctl daemon-reload

submitted by /u/Tall_Researcher3088
[link] [comments]

The Expanse : Osiris Reborn, Closed Beta (CACHYOS - U7 270K - RTX 5090 FE UV)

Reddit Linux_Gaming - 23. April 2026 - 09:18

Hi all,

I was pleasantly surprised that the Closed Beta of the Expanse : Osiris Reborn was working straight forward on Linux (270K+ & RTX 5090 UV)

On top the 32:9 ratio is well supported during the cinematics!

No crash during the gameplay!

Linux Setup :
CachyOS
KDE Plasma : 6.6.4
KDE Frameworks : 6.25.0
Qt : 6.11.0
Kernel : 7.0.0-1-cachyos (64-bit)
Graphic platform : Wayland
Proton : CachyOS 10.0-20260409-slr
Nvidia GPU Drivers : 595.58.03 (GPU0)
Intel GPU Drivers : Mesa 26.0.3-arch2.2 (GPU1)

Proton Setup :
Environnent parameters :
-PROTON_DLSS_UPGRADE=1
-PROTON_DLSS_INDICATOR=1
-DXVK_NVAPI_DRS_NGX_DLSS_SR_OVERRIDE_RENDER_PRESET_SELECTION=RENDER_PRESET_M
-MANGOHUD=1
-OBS_VKCAPTURE=1

Capture Software :
OBS Studio
Game Capture - mode
Video Codec : Intel Arrow-Lake S AV1 60mbps
Image interval : 2s

submitted by /u/MarcParis79
[link] [comments]

Why is this even an option?

Reddit Linux_Gaming - 23. April 2026 - 08:18

Pops up when I launch the game in Steam. 1080 Ti. As I understand, this card supports DX12 but some shaders might not work. It seems to run it just fine. Has anyone else gotten this pop up before?

submitted by /u/jerwong
[link] [comments]

Fix OBS Projection on Linux ( Re-post ) OP Account was deleted

Reddit Linux_Gaming - 23. April 2026 - 08:10

like the title says i am NOT the original poster but his account was deleted so im unsure if it will be removed.. but this solution worked for me like a charm!

-

"I’m not a Linux pro, I tried this by using forum posts and ChatGPT. Here’s what worked for me:

  1. Install OBS normally (sudo apt install obs). The bug persisted.
  2. You can now launch OBS from the terminal with this command: __NV_DISABLE_EXPLICIT_SYNC=1 obs
  3. But I wanted to make it launchable from the dock. The normal thing to do is apparently to edit the .desktop file at: /home/<user>/.local/share/applications/obs-studio.desktop and add Exec=env __NV_DISABLE_EXPLICIT_SYNC=1 obs to the Exec= line with right-klick and "Open with Text Editor" (you might need to press Ctrl+H to show hidden folders to find .local)

However, I had the strange problem that the.desktop file didn’t exist, so I created it manually. I used these commands with ChatGPTs help:

Create the file: sudo nano /usr/share/applications/com.obsproject.Studio.desktop

Edit the file in terminal (I guess you can also do step 3 here): nano ~/.local/share/applications/obs-studio.desktop

Pasted this into the file (only the Exec= line is modified, rest is left original):

[Desktop Entry]
Version=1.0
Name=OBS Studio
GenericName=Streaming/Recording Software
Comment=Free and Open Source Streaming/Recording Software
Exec=env __NV_DISABLE_EXPLICIT_SYNC=1 obs
Icon=com.obsproject.Studio
Terminal=false
Type=Application
Categories=AudioVideo;Recorder;
StartupNotify=true
StartupWMClass=obs

GenericName[an_ES]=Programa de retransmisión/gravación
Comment[an_ES]=Program de retransmisión/gravación libre y de codigo ubierto
GenericName[ar_SA]=برامج البث / التسجيل
Comment[ar_SA]=برنامج بث / تسجيل مجاني ومفتوح المصدر
GenericName[bn_BD]=স্ট্রিমিং/রেকর্ডিং সফটওয়্যার
Comment[bn_BD]=ফ্রি এবং মুক্ত সোর্স স্ট্রিমিং/রেকর্ডিং সফ্টওয়্যার
GenericName[ca_ES]=Programa de retransmissió/enregistrament
Comment[ca_ES]=Programa de retransmissió/enregistrament de codi lliure i gratuït
GenericName[cs_CZ]=Software pro vysílání a nahrávání
Comment[cs_CZ]=Svobodný software pro vysílání a nahrávání
GenericName[da_DK]=Streaming-/optagelsessoftware
Comment[da_DK]=Gratis og open-source streaming-/optagelsessoftware
GenericName[de_DE]=Streaming-/Aufnahme-Software

Then I made the file executable:chmod +x ~/.local/share/applications/obs-studio.desktop

OBS now appears in "Show Apps" and launches normally, with screen selection working on startup. - OG poster

submitted by /u/PayTraditional7038
[link] [comments]

Crimson Desert suddenly not launching.

Reddit Linux_Gaming - 23. April 2026 - 04:44

I'm on CachyOS with a 9070xt. The game has ran since launch. I haven't played in a few days but today i go to boot and i see the initial launch screen, then it crashes. Iv tried different protons, no commands, my commands. Nothing. All the same result. Ive been playing in HDR with

WINEDLLOVERRIDES="d3dcompiler_47=n;dxgi=n,b" PROTON_FSR4_UPGRADE=1 PROTON_ENABLE_WAYLAND=1 PROTON_ENABLE_HDR=1 game-performance %command%

I tried switching off HDR as well.

Has anyone else experienced this?

submitted by /u/BuffaloGlum331
[link] [comments]

No abre Genshin Impact Lenovo Legion go S SteamOS

Reddit Linux_Gaming - 23. April 2026 - 04:44

Descargue hoy el genshin con protonDB en mi legion go s y al momento de querer abrirlo desde el launcher no me permite, hace mucho instale el Zenless Zone Zero y me abre sin problemas pero el Genshin no me abre

alguien mas le pasa lo mismo?

submitted by /u/Impossible-Volume-31
[link] [comments]

[Mint] Switching from Windows, Steam won't run games unless SteamLibrary is at the top level of a mounted drive.

Reddit Linux_Gaming - 23. April 2026 - 03:52

When I was on Windows I had a game drive SSD that I would keep all my games on, and a C: drive for all my programs. A while back I organized it so my games are a few levels deep (think E:/Archive/Games/SteamLibrary/...), but for some reason when I try to select this folder in Mint, Steam won't run anything and will also 'forget' the drive exists when I restart.

I have done most of the regular toubleshooting steps like reformatting the drive to ext4, and enabled the automount options, but nothing helped. The one thing that seems to work though is moving SteamLibrary to the top level of the mounted drive, but I don't like it this way, is there any way to get steam to work while preserving my file system?

submitted by /u/joosyfrooot
[link] [comments]

LeadJoy Xeno Plus on Linux — complete setup guide (first known Linux guide, April 2026)

Reddit Linux_Gaming - 23. April 2026 - 03:50

I've only spent 5 mins playing. But the controller feels great to me. I couldn't find a manual only a marketing pdf. So I did some testing with Claude.

The controller uses a LiteEMF chipset (VID 4131 PID 3519) and works great on Linux once you

know the mode combos. Out of the box it connects in keyboard/mouse mode which Steam doesn't

recognize. Tested on Arch Linux kernel 7.0.0, confirmed working in Steam (Proton), Hades 2,

and SuperTuxKart (native SDL2).

---

## Mode Map (2.4GHz dongle)

| Combo | LED | Mode | Notes |

|----------|-------------|--------------------|---------------------------|

| Home + B | solid green | XInput (dongle) | Use this for PC gaming |

| Home + A | solid red | Switch Pro (dongle)| Not useful on Linux |

| Home + X | light blue | Bluetooth pairing | For phone app config only |

| Home + Y | dark blue | PS4/DS4 Bluetooth | Emulates DualShock 4 over BT |

**Important:** The controller has a single wireless pairing slot. After connecting to the phone

app via Bluetooth, you need to re-pair the dongle: hold Home + B then press the small button

on the dongle.

---

## Step 1 — Switch to XInput mode

Hold **Home + B** until the LED turns solid green.

---

## Step 2 — Force xpad to claim it (first time only)

```bash

echo "4131 3519" | sudo tee /sys/bus/usb/drivers/xpad/new_id

```

---

## Step 3 — Make it permanent (udev rule)

```bash

sudo tee /etc/udev/rules.d/99-xeno-plus.rules << 'EOF'

# LeadJoy Xeno Plus — auto-bind xpad and restore calibration on connect

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="4131", ATTRS{idProduct}=="3519", \

RUN+="/bin/sh -c 'echo 4131 3519 > /sys/bus/usb/drivers/xpad/new_id'"

ACTION=="add", KERNEL=="js*", SUBSYSTEM=="input", ATTRS{idVendor}=="4131", ATTRS{idProduct}=="3519", \

RUN+="/usr/sbin/jscal-restore %E{DEVNAME}"

EOF

sudo udevadm control --reload-rules

```

---

## Step 4 — Calibrate sticks

```bash

sudo pacman -S joyutils # Arch — adjust for your distro

jscal -c /dev/input/js1

jscal-store /dev/input/js1

```

Note: the controller has hardware-level drift correction in firmware (visible in the iOS/Android

app). The jscal calibration corrects driver-level quantization noise from the 12-bit to 16-bit

axis mapping, not real hardware drift.

---

## Button Map (XInput mode)

| Button # | Control |

|----------|-------------|

| 0 | A |

| 1 | B |

| 2 | X |

| 3 | Y |

| 4 | LB |

| 5 | RB |

| 6 | Back/Select |

| 7 | Start |

| 8 | Home/Guide |

| 9 | L3 |

| 10 | R3 |

Axes: Left stick X/Y (0,1), Left trigger (2), Right stick X/Y (3,4), Right trigger (5),

D-pad X/Y (6,7). Triggers go 0 (unpressed) to 32767 (full press). D-pad reports -1/0/1.

---

## SDL2 gamecontrollerdb entry (native Linux games)

```

03000000314100001935000000010000,LeadJoy Xeno Plus,platform:Linux,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,guide:b8,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,lefttrigger:+a2,rightx:a3,righty:a4,righttrigger:+a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,

```

Tested and working in SuperTuxKart (native SDL2).

---

## Firmware-only buttons (not configurable from Linux)

The following buttons produce no host events and require the LeadJoy iOS/Android app to remap:

- 4 back paddles (R4, R5, L4, L5)

- 2 buttons right of the d-pad

- Middle button above Home (between Back and Start)

- The button on the back resets modes. It doesn't remap back buttons on the controller.

---

## Bluetooth PS4 mode (optional)

Home + Y puts the controller in DS4 emulation mode over Bluetooth (reports as Sony VID 054C

PID 09CC). To use on Linux:

```bash

bluetoothctl trust <MAC>

bluetoothctl bond <MAC>

```

The hid-playstation driver is already in the kernel and should claim it once trusted/bonded.

---

## Result

Shows up as "Generic X-Box pad" in Steam. Steam Input enables automatically. Works in all

Proton games and native Linux SDL2 games out of the box.

The OLED display currently only shows the LeadJoy logo — firmware updates may add battery

level, profile display etc.

submitted by /u/Wrong-Passenger190
[link] [comments]

Games on Linux looks far better than Windows.

Reddit Linux_Gaming - 23. April 2026 - 01:40

I entered the world of Linux looking for something different from Windows — after all, I have a very good PC and the effect of bloatware wasn’t noticeable at all. However, on Linux, specifically on CachyOS, I came across an incredible surprise:

Games literally look better than on Windows. It’s amazing how a compatibility layer manages to achieve a better visual result than on the platform it was originally designed for. But that’s how it is.

I’ve tested several games; without a doubt the clearest example I came across was Dirt Rally 2.0, a game that on Windows only gives you the option of using the horrible TAA and putting up with all the blurriness, or turning it off and having jagged edges on every scenario. On CachyOS with TAA off it looks incredible — incomparably better than on Windows. Btw, I’m using an NVIDIA 5000 series graphics card.

But my question is: what’s the reason? What is there specifically in the emulation layer that achieves visually superior results with the same settings? I find it amazing, even more so being a newcomer to all this.​​​​​​​​​​​​​​​​

submitted by /u/Vettelovich
[link] [comments]

Divinity Original Sin 2 won't start

Reddit Linux_Gaming - 23. April 2026 - 01:38

I must have accumulated almost 200 hours in Divinity 2. It had been a long time since I last played it, and yesterday I got nostalgic.

When I tried to open it, either the game didn't open (proton-cachyos 10.0.20260409-1, Ge-Proton 10-34, wine-ge 8-32, umu-launcher 1.4.0) or if it does open, after the initial menu, it doesn't load my saved game or simply doesn't create a new game, it just stays on the loading screen forever and ever.

I've already tried several versions of Proton (including old versions like ge-proton 9.0.4, etc.), using Heroic Game Launcher. I tried the version of GOG. I've already changed the graphics settings to the minimum possible, in windowed mode, in fake fullscreen mode...

I don't know what else to do. Has anyone else experienced this?

My specs:

CachyOS ( linux-cachyos 7.0.0-1)

KDE Plasma (6.6.4-1.1)

Ryzen 7 3700X

Nvidia 2700 Super

submitted by /u/FGYada_
[link] [comments]

Linux gaming and Linux in general will never go forward with such people

Reddit Linux_Gaming - 23. April 2026 - 00:54

I see people asking simple and logical questions and then you see every no lifer (i will not say anything else because i will get banned, with those ...) just insulting them and downvoting them. Now, i understand why Linus Torvalds is so Toxic torwads those people, god knows what he has seen with such people in the Linux community, i hope all people like you will leave the Linux community and do something else because right now many people want to come to Linux and you are here to make them leave and switch to back to Windows.

submitted by /u/paterkleomeniss
[link] [comments]

Thoughts on swapping my 4090 for a 7900XTX?

Reddit Linux_Gaming - 23. April 2026 - 00:49

I currently have a MSI 4090 SUPRIM X in my build - running bazzite.

I’m unimpressed with NVIDIA’s drivers on Linux. I did see rumours they’d been recruiting more Linux devs, so that might be changing, but at the moment they’re a bit shit.

I can sell it for roughly £1.9k, I bought it for £1.7k. I can buy a AMD 7900 XTX for £700.

Would I be silly to do this? I run 5120x1440, so fairly high res, and play fairly heavy games - with path tracing and ray tracing etc (when it works on Linux…). I also run local LLMs via Ollama, but I think I should be able to do that with AMD too.

Thoughts? How silly am I being? Any advantages and disadvantages I’ve missed?

submitted by /u/Colafusion
[link] [comments]

Seiten