Using the Legion Go controllers in Garuda Linux

Hello together,
I just joined this Garuda forum and I’m a total noob with Linux (my first Linux system installed ever), but have general technical understanding and am a long year Windows user since 1994 (which probably won’t help me in this case).

As you can see below I installed the Garuda Dragonized Edition onto my Lenovo Legion Go to experiment with it, Learn how to use Linux, and to play games on it.

→ I was trying for a long time today to be able to use my Legion Go controllers in Garuda, but no chance… Anything I tried didn’t work out and the controllers just don’t get recognized at all even if being directly connected on the sides of the device… The only thing working is the small trackpad, and this is really kinda weird…

→ As in Windows they are being recognized as an Xbox controller natively, I was trying to let them being recognized through activating those in Steam, but it didn’t help… Neither activating the Playstation, or the default controllers did…

→ I also installed “xboxdrv” and “xbox-generic-controller” using Octopi at the very beginning, but those don’t help at all and the Legion Go controllers don’t want to be getting recognized at all…

→ I’ve gone into the controller settings of Garuda after each change, and I never saw any input of the controllers being recognized…

→ I also resetted the controllers fully, but still they can’t be recognized at all

Kernel: 6.7.6-zen1-2-zen arch: x86_64 bits: 64 compiler: gcc v: 13.2.1
clocksource: tsc avail: hpet,acpi_pm
parameters: BOOT_IMAGE=/@/boot/vmlinuz-linux-zen
root=UUID=51bc7cef-88e2-447d-8f9c-51bf54596d26 rw rootflags=subvol=@
quiet loglevel=3 ibt=off
Desktop: KDE Plasma v: 5.27.10 tk: Qt v: 5.15.12 info: frameworks
v: 5.115.0 wm: kwin_x11 vt: 2 dm: SDDM Distro: Garuda base: Arch Linux
Type: Tablet System: LENOVO product: 83E1 v: Legion Go 8APU1
serial: <superuser required> Chassis: type: 30 v: Legion Go 8APU1
serial: <superuser required>
Mobo: LENOVO model: LNVNB161216 v: SDK0T76463 WIN
serial: <superuser required> part-nu: LENOVO_MT_83E1_BU_idea_FM_Legion Go
8APU1 uuid: <superuser required> UEFI: LENOVO v: N3CN29WW_TDP02
date: 02/04/2024
ID-1: BATT charge: 35.7 Wh (70.8%) condition: 50.4/49.3 Wh (102.4%)
power: 22.3 W volts: 8.4 min: 7.8 model: LENOVO BYD type: Li-ion
serial: <filter> status: charging cycles: 34
Device-1: hidpp_battery_0 model: Logitech Wireless Keyboard K270
serial: <filter> charge: 100% (should be ignored) rechargeable: yes
status: discharging
Info: model: AMD Ryzen Z1 Extreme bits: 64 type: MT MCP arch: Zen 4 gen: 5
level: v4 note: check built: 2022+ process: TSMC n5 (5nm) family: 0x19 (25)
model-id: 0x74 (116) stepping: 1 microcode: 0xA704104
Topology: cpus: 1x cores: 8 tpc: 2 threads: 16 smt: enabled cache:
L1: 512 KiB desc: d-8x32 KiB; i-8x32 KiB L2: 8 MiB desc: 8x1024 KiB
L3: 16 MiB desc: 1x16 MiB
Speed (MHz): avg: 1160 high: 4981
min/max: 400/5289:6076:5918:5132:5605:5760:5447 scaling:
driver: amd-pstate-epp governor: performance cores: 1: 2830 2: 3098 3: 400
4: 4981 5: 400 6: 400 7: 400 8: 400 9: 400 10: 400 11: 400 12: 400 13: 400
14: 400 15: 2855 16: 400 bogomips: 105397
Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm
Vulnerabilities: <filter>
Device-1: AMD Phoenix1 vendor: Lenovo driver: amdgpu v: kernel arch: RDNA-3
code: Phoenix process: TSMC n4 (4nm) built: 2023+ pcie: gen: 4
speed: 16 GT/s lanes: 16 ports: active: eDP-1 empty: DP-1, DP-2, DP-3,
DP-4, DP-5, DP-6, DP-7, DP-8 bus-ID: c2:00.0 chip-ID: 1002:15bf
class-ID: 0300 temp: 50.0 C
Display: x11 server: X.Org v: 21.1.11 with: Xwayland v: 23.2.4
compositor: kwin_x11 driver: X: loaded: amdgpu unloaded: modesetting
alternate: fbdev,vesa dri: radeonsi gpu: amdgpu display-ID: :0 screens: 1
Screen-1: 0 s-res: 2560x1600 s-dpi: 96 s-size: 677x423mm (26.65x16.65")
s-diag: 798mm (31.43")
Monitor-1: eDP-1 mapped: eDP model: Lenovo Go Display serial: <filter>
built: 2023 res: 2560x1600 hz: 144 dpi: 342 gamma: 1.2
size: 190x120mm (7.48x4.72") diag: 225mm (8.8") modes: max: 1600x2560
min: 640x480
API: EGL v: 1.5 hw: drv: amd radeonsi platforms: device: 0 drv: radeonsi
device: 1 drv: swrast surfaceless: drv: radeonsi x11: drv: radeonsi
inactive: gbm,wayland
API: OpenGL v: 4.6 compat-v: 4.5 vendor: amd mesa v: 24.0.2-arch1.1
glx-v: 1.4 direct-render: yes renderer: AMD Radeon Graphics (radeonsi
gfx1103_r1 LLVM 16.0.6 DRM 3.57 6.7.6-zen1-2-zen) device-ID: 1002:15bf
memory: 5.86 GiB unified: no
API: Vulkan v: 1.3.276 layers: 13 device: 0 type: integrated-gpu name: AMD
Radeon Graphics (RADV GFX1103_R1) driver: mesa radv v: 24.0.2-arch1.1
device-ID: 1002:15bf surfaces: xcb,xlib device: 1 type: cpu name: llvmpipe
(LLVM 16.0.6 256 bits) driver: mesa llvmpipe v: 24.0.2-arch1.1 (LLVM
16.0.6) device-ID: 10005:0000 surfaces: xcb,xlib
Device-1: AMD Rembrandt Radeon High Definition Audio vendor: Lenovo
driver: snd_hda_intel v: kernel pcie: gen: 4 speed: 16 GT/s lanes: 16
bus-ID: c2:00.1 chip-ID: 1002:1640 class-ID: 0403
Device-2: AMD ACP/ACP3X/ACP6x Audio Coprocessor vendor: Lenovo
driver: snd_pci_ps v: kernel alternate: snd_pci_acp3x, snd_rn_pci_acp3x,
snd_pci_acp5x, snd_pci_acp6x, snd_acp_pci, snd_rpl_pci_acp6x,
snd_sof_amd_renoir, snd_sof_amd_rembrandt, snd_sof_amd_vangogh,
snd_sof_amd_acp63 pcie: gen: 4 speed: 16 GT/s lanes: 16 bus-ID: c2:00.5
chip-ID: 1022:15e2 class-ID: 0480
Device-3: AMD Family 17h/19h HD Audio vendor: Lenovo driver: snd_hda_intel
v: kernel pcie: gen: 4 speed: 16 GT/s lanes: 16 bus-ID: c2:00.6
chip-ID: 1022:15e3 class-ID: 0403
API: ALSA v: k6.7.6-zen1-2-zen status: kernel-api with: aoss
type: oss-emulator tools: alsactl,alsamixer,amixer
Server-1: PipeWire v: 1.0.3 status: active with: 1: wireplumber
status: active 2: pw-jack type: plugin tools: pw-cat,pw-cli,wpctl
Server-2: PulseAudio v: 17.0 status: active with: 1: pulseaudio-alsa
type: plugin 2: pulseaudio-jack type: module tools: pacat,pactl
Device-1: MEDIATEK MT7922 802.11ax PCI Express Wireless Network Adapter
vendor: Lenovo driver: mt7921e v: kernel pcie: gen: 2 speed: 5 GT/s lanes: 1
bus-ID: 01:00.0 chip-ID: 14c3:0616 class-ID: 0280
IF: wlp1s0 state: up mac: <filter>
Device-2: Microsoft XBOX ACC driver: mt76x2u type: USB rev: 2.0
speed: 480 Mb/s lanes: 1 mode: 2.0 bus-ID: 5-1.3:5 chip-ID: 045e:02fe
class-ID: 0000 serial: <filter>
IF: wlp196s0f3u1u3 state: down mac: <filter>
Info: services: NetworkManager, systemd-timesyncd, wpa_supplicant
Device-1: Foxconn / Hon Hai Wireless_Device driver: btusb v: 0.8 type: USB
rev: 2.1 speed: 480 Mb/s lanes: 1 mode: 2.0 bus-ID: 1-5:3 chip-ID: 0489:e0d9
class-ID: e001 serial: <filter>
Report: hciconfig ID: hci0 rfk-id: 2 state: up address: <filter> bt-v: 5.2
lmp-v: 11 sub-v: 2311 hci-v: 11 rev: 2018 class-ID: 7c011c
Info: acl-mtu: 1021:6 sco-mtu: 240:8 link-policy: rswitch sniff
link-mode: peripheral accept service-classes: rendering, capturing, object
transfer, audio, telephony
Local Storage: total: 2.75 TiB used: 244.53 GiB (8.7%)
ID-1: /dev/mmcblk0 maj-min: 179:0 model: SR01T size: 953.55 GiB
block-size: physical: 512 B logical: 512 B type: Removable tech: SSD
serial: <filter> scheme: MBR
SMART Message: Unknown smartctl error. Unable to generate data.
SMART Message: Unable to run smartctl. Root privileges required.
ID-2: /dev/nvme0n1 maj-min: 259:0 vendor: Corsair model: MP600 CORE MINI
size: 1.82 TiB block-size: physical: 512 B logical: 512 B speed: 63.2 Gb/s
lanes: 4 tech: SSD serial: <filter> fw-rev: ELFMC1.0 temp: 66.8 C
scheme: GPT
ID-1: / raw-size: 447.67 GiB size: 447.67 GiB (100.00%)
used: 244.47 GiB (54.6%) fs: btrfs dev: /dev/nvme0n1p4 maj-min: 259:4
ID-2: /boot/efi raw-size: 260 MiB size: 256 MiB (98.46%)
used: 62.2 MiB (24.3%) fs: vfat dev: /dev/nvme0n1p1 maj-min: 259:1
ID-3: /home raw-size: 447.67 GiB size: 447.67 GiB (100.00%)
used: 244.47 GiB (54.6%) fs: btrfs dev: /dev/nvme0n1p4 maj-min: 259:4
ID-4: /var/log raw-size: 447.67 GiB size: 447.67 GiB (100.00%)
used: 244.47 GiB (54.6%) fs: btrfs dev: /dev/nvme0n1p4 maj-min: 259:4
ID-5: /var/tmp raw-size: 447.67 GiB size: 447.67 GiB (100.00%)
used: 244.47 GiB (54.6%) fs: btrfs dev: /dev/nvme0n1p4 maj-min: 259:4
Kernel: swappiness: 133 (default 60) cache-pressure: 100 (default) zswap: no
ID-1: swap-1 type: zram size: 9.4 GiB used: 0 KiB (0.0%) priority: 100
comp: zstd avail: lzo,lzo-rle,lz4,lz4hc,842 max-streams: 16 dev: /dev/zram0
System Temperatures: cpu: 57.9 C mobo: N/A gpu: amdgpu temp: 50.0 C
Fan Speeds (rpm): N/A
Memory: total: 12 GiB note: est. available: 9.4 GiB used: 2.88 GiB (30.7%)
Processes: 367 Power: uptime: 16m states: freeze,mem,disk suspend: s2idle
wakeups: 0 hibernate: platform avail: shutdown, reboot, suspend, test_resume
image: 3.74 GiB services: org_kde_powerdevil, power-profiles-daemon,
upowerd Init: systemd v: 255 default: graphical tool: systemctl
Packages: pm: pacman pkgs: 1895 libs: 556 tools: octopi,paru Compilers:
gcc: 13.2.1 Shell: garuda-inxi default: fish v: 3.7.0 running-in: konsole
inxi: 3.3.33
Garuda (2.6.23-1):
System install date:     2024-03-01
Last full system update: 2024-03-02
Is partially upgraded:   No
Relevant software:       snapper NetworkManager dracut
Windows dual boot:       Probably (Run as root to verify)
Failed units:

Tried that “fps switch” both ways?

The FPS mode off/on switch at the bottom of the right detachable controller toggles the device to switch between identifying as:
fps mode switch off: ID 17ef:6182 Lenovo Legion Controller for Windows
fps mode switch on: ID 17ef:6185 Lenovo Legion-Controller 1-9E

Do they appear in lspci -knn or lsusb -v ?
Does xev (need to install it I think) output anything when pressing the buttons?

Lenovo Legion Go / Laptop Issues / Arch Linux Forums
nothing conclusive, but see last comment and see below about “udev rule”
not very promising (see section “input devices”) but:

Initial Support For The Lenovo Legion Go Controllers Added To Linux 6.8 - Phoronix

Depending upon whether the controllers are attached/detached, they appear as different device IDs.

The X / Y / A / B inputs, analog sticks, D-pad, menu / capture buttons, and rumble are all confirmed to be working now under Linux. But not yet working are the start / select, four rear paddle buttons, and the gyroscope that will likely be addressed in the future.

GitHub - aarron-lee/legion-go-tricks: Guides, Tricks, and Tips to get the Legion Go running best on Linux
nothing about Arch specifically, some useful tips and tools

some non-gaming distros don’t include the udev rule for the controller,
just talk, and again nothing about Arch, but if those three distros got it working there’s a good chance

linux-hardware links (it’s damn slow today and often fails with “gateway timeout”)
Lenovo Legion Go 8APU1 83E1 Computers
Lenovo Legion Controller for Windows
Lenovo Legion-Controller 1-E2
it should at least be detected (not necessarily work good enough)

no idea if xboxdrv and xbox-generic-controller help or interfere

hope someone can actually help :man_shrugging: this is the best I have to offer

fish❯ grep -rF 17ef /lib/udev
/lib/udev/hwdb.d/70-mouse.hwdb:#   mouse:usb:v17efp6019:name:Lenovo Optical USB Mouse:*
/lib/udev/hwdb.d/70-mouse.hwdb:#   mouse:usb:v17efp6019:*
/lib/udev/hwdb.d/70-mouse.hwdb:mouse:usb:v17efp6019:name:Lenovo Optical USB Mouse:*
/lib/udev/hwdb.d/70-mouse.hwdb:mouse:usb:v17efp6019:name:Logitech Lenovo USB Optical Mouse:*
/lib/udev/hwdb.d/70-mouse.hwdb:mouse:usb:v17efp6050:name:Lenovo Precision USB Mouse:*
/lib/udev/hwdb.d/70-mouse.hwdb:mouse:usb:v17efp601d:name:Primax Lenovo Laser Mouse:*
/lib/udev/hwdb.d/70-mouse.hwdb:mouse:usb:v17efp6045:name:Lenovo USB Laser Mouse:*
/lib/udev/hwdb.d/70-mouse.hwdb:mouse:usb:v17efp6044:name:ThinkPad USB Laser Mouse:*
/lib/udev/rules.d/51-android.rules:#ATTR{idVendor}=="17ef", GOTO="user"

I suspect the udev thing.

Hi @meanruse,
sorry for the late reply, had a super stressful week and thanks a lot for trying to help;

I found out how to connect the controllers in the meanwhile but with Garuda or other linux distros not supporting the legion Go controllers natively, you unluckily can only connect the left and the right part of the controller both only as individual 2 single units, and not as a ful controller unit how it is meant to be used.
Which is kinda annoying.

You can connect them over Bluetooth by pressing and holding until the led circle on each one of them blinks and then searching and connecting them in the Linux Bluetooth module;

  • On the left controller; the left Legion Button + the left digi pad
  • On the right controller the right Legion Button + the X button (if I recall right, or it was the Y button)

That is how it works out of the box at least, there might be other ways to use the xbox controller drivers you mentioned, (and I had them installed and tried them out, but had both the default one and the more advanced one installed at the same time) with some tweaks too, but certainly not out of the box and not even using an Xbox controller dongle which I tried…

But I don’t have Garuda installed anymore because I had issues with conflicts with pipewire and pulseaudio drivers intersecting each other, and needing parts of both installed at the same time…
Once the bluetooth driver didn’t work anymore, once the playback of video in Browsers, and at the end even my wifi connection was completely broken through that somehow, and I couldn’t connect to internet at all anymore (the legion Go only has a wifi connection, and I don’t own a docking station with an Ethernet connection)…
→ Those were enough trouble right at the beginning for me as a Linux beginner to let me move on to the next gaming distro.
I really liked Garuda generally speaking though, from how the Dragonized version looks, how fast all the parts are working (I heard it depends on Arch being faster and having faster “loader”, or how those apps to download apps are called like Dolphin in Garuda), so in the future, as I will have more time, I will give it a second chance for shore :wink::+1:.

→ I didn’t fully get how and were to properly type in the commands you gave me for my future second round with Garuda; You just meant into the terminal? And just like that without adding anything? And what does it do exactly? You need to know I am a real total beginner, and explaining it with everything needed around it with every step needed would be really helpful.

→ I installed Bazzite, with which I’m kinda happy now, because it is easy to use, and has almost all important things for me (also full Lenovo Legion Go support, not just the split recognition for the left controller as the one unit, and the right one as another unit like in other distros like Garuda, or Nobara), it is stable and has this Steam big picture mode behaving like you would be using a steam Deck, and the modified Fedora Linux in the background you can switch to.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.