Gaming Logitech G 923 not working

Hello

i am relativly new to nixos and wanted to migrate fully to linux. The only problem I have, is that my Logitech G923 is not working.
I have tried everything.
Installed Oversteer, lg4ff for kernel 6.9, updated my kernel to 6.9, installed the linux headers and the usb-modeswitch. Nothing worked.
The I read in this article: GitHub - ZRtmWrJqXcjbqBLIMBYMCeUw/Logitech-G923-Linux-Kernel-Driver: This project is intended to add support for the Logitech G923 steering wheel to the Linux kernel.
that i needed to make a udev rule, so that the wheel switches from PS mode to PC mode.
I configured it in my nix config like this:

 services.udev.extraRules = ''
    ATTR{idVendor}=="046d", ATTR{idProduct}=="c267", RUN+="/usr/sbin/usb_modeswitch -v 046d -p  c267 -M 30f8090701010000 -m 03 -r 03"  # udev rule for logitech g923 so it switches from PS Mode to  PC mode   
  '';

But there i got following error:

FAIL
/usr/sbin/usb_modeswitch is called in udev rules but is not executable or does not exist
error: builder for '/nix/store/0nas46bvpgq8dqh3vcx9xpyk5rf5hfxn-udev-rules.drv' failed with exit code 1
error: 1 dependencies of derivation '/nix/store/lq2lg8zhxlwp8f5bjirnlz4pwd5nlgil-etc.drv' failed to build
error: 1 dependencies of derivation '/nix/store/k8bhh312cc47x332kplvd226f7nk5zr9-nixos-system-nixos-23.11.7609.5c2ec3a5c2ee.drv' failed to build

However with the dmesg command i can see that the wheel is recognised.

Thank you

1 Like

The path for usb_modeswitch should be from the store path as /usr/sbin/ doesn’t exist in NixOS:

  services.udev.extraRules = ''
    ATTR{idVendor}=="046d", ATTR{idProduct}=="c267", RUN+="${pkgs.usb-modeswitch}/bin/usb_modeswitch -v 046d -p  c267 -M 30f8090701010000 -m 03 -r 03"  # udev rule for logitech g923 so it switches from PS Mode to  PC mode   
  '';

i changed it and it created the rule. But after a reboot it’s still not recognized by oversteer.

Perhaps you need to make sure that the new-lg4ff module is loaded at boot as well:

  boot.kernelModules = [ "new-lg4ff" ];

Put it into my config, rebootet but it’s still not recognised

Tried jstest again but still nothing changed. Only button presses are recognised but no axis.

What’s the ID of your device when you run lsusb?

It should match the ones in the udev rule in /etc/udev/rules.d/99-logitech-wheel-perms.rules created by Oversteer. If it doesn’t you can maybe change the IDs to fit your device but play around with the command.

Also, there is a note from the new-lg4ff page:

This module is not compatible with the Logitech G920 Driving Force and XBOX/PC version of the Logitech G923 (046d:c26d, 046d:c26e). Both wheels use the HID++ protocol and are supported by the HID++ driver as of kernel 6.3.

So maybe you need to use the HID++ driver if your device ID corresponds to one of those?

There is no rule for the logitech wheel.
Maybe because Oversteel says “No device available”.
Also I am using the Logitech G923 PS/PC Version. And since I updated my kernel to 6.9.4 the HIDD++ protocol should not cause any problem??

The rule file is also available here.

Try making an entry for your device using that file and services.udev.extraRules. If that doesn’t work, can you follow the instructions on Logitech Racing Wheel - ArchWiki and post your results?

I don’t think that would be an issue. You can see which driver is being used by either running:

$ lsusb -t

or

$ nix-shell -p usbutils --run usb-devices

Sure there are my results:
first dsmg:

[    1.544785] usb 1-7: New USB device found, idVendor=046d, idProduct=c267, bcdDevice=38.00
[    1.544787] usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    1.544788] usb 1-7: Product: G923 Racing Wheel for PlayStation 4 and PC
[    1.544788] usb 1-7: Manufacturer: Logitech
[    1.544789] usb 1-7: SerialNumber: CEMAWYDILYVYWUPAWOJYTITIDY
[    1.547504] hid-generic 0003:046D:C267.0002: ignoring exceeding usage max
[    1.547594] input: Logitech G923 Racing Wheel for PlayStation 4 and PC as /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/0003:046D:C267.0002/input/input1
[    1.547624] hid-generic 0003:046D:C267.0002: input,hiddev97,hidraw1: USB HID v1.10 Gamepad [Logitech G923 Racing Wheel for PlayStation 4 and PC] on usb-0000:00:14.0-7/input0
[    1.548182] hid-generic 0003:046D:C267.0003: hiddev98,hidraw2: USB HID v1.11 Device [Logitech G923 Racing Wheel for PlayStation 4 and PC] on usb-0000:00:14.0-7/input1
[    1.548688] hid-generic 0003:046D:C267.0004: hiddev99,hidraw3: USB HID v1.11 Device [Logitech G923 Racing Wheel for PlayStation 4 and PC] on usb-0000:00:14.0-7/input2
[    1.607405] usb 1-5.1: new low-speed USB device number 5 using xhci_hcd

than lsusb:

Bus 001 Device 011: ID 1e7d:3a37
Bus 001 Device 010: ID 8087:0033
Bus 001 Device 005: ID 046d:c215
Bus 001 Device 004: ID 046d:c267
Bus 001 Device 008: ID 046d:c335
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 003: ID 05e3:0608
Bus 001 Device 009: ID 05e3:0608
Bus 002 Device 001: ID 1d6b:0003
Bus 001 Device 006: ID 046d:c07e
Bus 001 Device 002: ID 1462:7e06

than input cat /proc/bus/input/devices

I: Bus=0003 Vendor=046d Product=c267 Version=0110
N: Name="Logitech G923 Racing Wheel for PlayStation 4 and PC"
P: Phys=usb-0000:00:14.0-7/input0
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/0003:046D:C267.0002/input/input1
U: Uniq=CEMAWYDILYVYWUPAWOJYTITIDY
H: Handlers=event1 js0 
B: PROP=0
B: EV=1b
B: KEY=3fff000000000000 0 0 0 0
B: ABS=3003f
B: MSC=10

than jstest:

Driver version is 2.1.0.
Joystick (Logitech G923 Racing Wheel for PlayStation 4 and PC) has 8 axes (X, Y, Z, Rx, Ry, Rz, Hat0X, Hat0Y)
and 14 buttons (BtnA, BtnB, BtnC, BtnX, BtnY, BtnZ, BtnTL, BtnTR, BtnTL2, BtnTR2, BtnSelect, BtnStart, BtnMode, BtnThumbL).
Testing ... (interrupt to exit)
Axes:  0:     0  1:     0  2:     0  3:-32767  4:-32767  5:     0  6:     0  7:     0 Buttons:  0:off  1:off  2:off  3:off  4:off  5:off  6:off  7:off  8:off  9:off 10:off 11:off 12:off 13:off 

there only the buttons work.
And the configuration won’t work because its not recognised

Did you run evtest?

$ nix-shell -p --run "evtest /dev/input/event1"

or also ffcfstress:

$ nix-shell -p linuxConsoleTools --run "ffcfstress -d /dev/input/event1"

And what about the driver in use?

Edit: From the ArchWiki page:

If using a Logitech Wheel, make sure it is set to PS3 mode otherwise it will not work.

Edit 2: Does PS3 mode even exist for the G923? According to the new-lg4ff GitHub page:

  • Logitech G923 Racing Wheel for PlayStation 4 and PC (046d:c267, 046d:c266)

From the usb ID you posted it seems to be in PS4 mode. Try changing it to PC mode, instead.

Edit 3: Maybe that’s why Oversteer didn’t detect it, because in the udev rule it’s expecting it to be in PC mode:

# Logitech G923 Racing Wheel for PlayStation 4 and PC
ATTRS{idProduct}=="c266", RUN+="/bin/sh -c 'cd %S%p; chmod 666 alternate_modes combine_pedals range gain autocenter spring_level damper_level friction_level ffb_leds peak_ffb_level leds/*/brightness; chmod 777 leds/ leds/*'"

Notice it has ATTRS{idProduct}=="c266", the same product ID from new-lg4ff.

So evtest and ffcfstress both had the same results as jstest.
About the driver I used the package linuxKernel.packages.linux_6_9.new-lg4ff.

Edit 2: Does PS3 mode even exist for the G923? According to the new-lg4ff GitHub page:

As I know the logitech g923 PS/PC does not have a PS3 mode.

My question now is how I can change the mode to PC mode?

I know, I was talking about the currently loaded driver to check if it was new-lg4ff or not, but it’s alright.

I’m not sure. According to this issue:

Your wheel needs to be in PS3 mode. There should be a switch above the center of the wheel, between the paddles.

The button in question might have the PS logo. Try clicking that and see if it works. If the issue persists, it might have something to do with the usb port or cable, so I suggest you switch those and see.

If all fails, you might want to open an a new issue either in new-lg4ff or oversteer as you’d probably have better support there.

So I checked the wheel but unfortunatly the only Button with a PS Logo has no effect. Switching USB Port also had no effect.
I opened a new issue for the new-lg4ff.
Thank you for your help.
Bye

1 Like

So I got a reply from one of the developers oft the lg4ff driver.
He said it wasn’t installed correctly.
I thought i just need to put the package in my configuration.nix and it would be installed correctly.
Am I missing something?

Okay, there is apparently a module for enabling the driver. Can you try using that?

    # Logitech G923
    hardware.new-lg4ff.enable = true;
    services.udev.packages = with pkgs; [ oversteer ];

Also, the third line should add the udev rules from oversteer, so technically the code block above should be all you need to get this working.

Thank you. I am will try it out as soon as i am home

So I got it working. I this:

Okay, there is apparently a module for enabling the driver. Can you try using that?

    # Logitech G923
    hardware.new-lg4ff.enable = true;
    services.udev.packages = with pkgs; [ oversteer ];

Also, the third line should add the udev rules from oversteer, so technically the code block above should be all you need to get this working.

After a reboot i saw that my Joystick a Logitech 3d Extreme was also recognised as logitech in demsg.
After I unplugged it, the wheel was recognised.

A Big Thank you to eljamm for his Help.
I hope this can help anyone who has the same issue.

1 Like