Probe-rs sees probes but they are "(inaccessible)"

Hello

On NixOS I try to develop on STM32 dev boards using probe-rs. Booting to another distro, and without changing cabling, I can confirm that the hardware and connections are working.

Listing devices:

~/.cargo/bin/probe-rs list
The following debug probes were found:
[0]: STLink V3 -- 0483:374e:004900433133511335333335 (ST-LINK) (inaccessible)
[1]: STLink V3 -- 0483:3754:002E00483433511830343835 (ST-LINK) (inaccessible)
 WARN probe_rs::util::setup_hints::linux: If your probe is plugged in but not listed, or shown as inaccessible, it is most likely a permissions problem.
 WARN probe_rs::util::setup_hints::linux: Your user needs read and write access to the probe's device node: a USB node under /dev/bus/usb, or a serial port such as /dev/ttyACM0.
 WARN probe_rs::util::setup_hints::linux: See https://probe.rs/docs/getting-started/probe-setup/ for how to set up the required udev rules and group membership.

Initially, I added udev rules but got confused with plugdev group not existing in NixOS, as the whole concept seems obsolete, but uaccess apparently being sufficient (yet still not solving the issue). There was also talk about rules in udev file 73-… needing running after, but that file I found to not exist on my installation.

I saw that the devices I identified to be the 2 devboards (/dev/ttyACM1 and dev/ttyACM2) are R/W accessible by group dialout:

ls -l /dev/ttyACM*
crw-rw---- 1 root dialout 166, 0 30 aug 08:57 /dev/ttyACM0
crw-rw---- 1 root dialout 166, 1 30 aug 08:57 /dev/ttyACM1

Adding my user to that group,

$ groups
users wheel dialout networkmanager

I believed the problem would be resolved (simple and elegantly), but it did not.

I tried to look at dmesg for seeing whether it has hints, but found no leads, and finally tried strace (which is a tool I am not familiar with) to see if there is anything in its output that could give me a clue, but none of the paths printed seemed relevant to the problem.

Any ideas how this could be troubleshooted? I wonder what probe-rs exactly is trying to access and what exactly is preventing it from doing so.

probe-rs uses the USB device nodes /dev/bus/usb/*/* for ST-LINK rather than the tty nodes because the debug functionality is a vendor-class USB interface, not the serial port. The numbers correspond to the bus and device seen in lsusb. Use getfacl /dev/bus/usb/<bus>/<addr> to see the permissions, as uaccess uses ACLs that aren’t visible in ls.

For a system used for embedded development, the most convenient approach is to give yourself access to all USB devices to not have to deal with permissions for every device:

users.groups.plugdev = {};

users.users.your_username = {
     extraGroups = ["plugdev"];
};

services.udev.extraRules = ''
    SUBSYSTEM=="usb", MODE="0660", GROUP="plugdev"
'';

(or with the plugdev group created, can use more narrow rules referencing it)

Note that TAG+=β€œuaccess” won’t work in services.udev.extraRules, see services.udev.extraRules doesnt work with udev rules that use uaccess Β· Issue #308681 Β· NixOS/nixpkgs Β· GitHub. On NixOS, the file that applies uaccess permissions is /run/current-system/sw/lib/udev/rules.d/73-seat-late.rules, but extraRules goes into /etc/udev/rules.d/99-local.rules.

Alternatively, you can use services.udev.packages to insert a rules file such as the upstream probe-rs one at a position lower than 73 to use uaccess.

1 Like

Thank you for providing a solution to the issue.

I would have a follow up questions, is there something missing on my system if I do not not have 73-seat-late.rules?

# ls /etc/udev/rules.d/
00-path.rules                     77-mm-foxconn-port-types.rules     77-mm-x22x-port-types.rules
10-dm.rules                       77-mm-gosuncn-port-types.rules     77-mm-zte-port-types.rules
11-dm-lvm.rules                   77-mm-haier-port-types.rules       80-libinput-device-groups.rules
13-dm-disk.rules                  77-mm-huawei-net-port-types.rules  80-mm-candidate.rules
40-usb-media-players.rules        77-mm-linktop-port-types.rules     80-udisks2.rules
60-upower-battery.rules           77-mm-longcheer-port-types.rules   84-nm-drivers.rules
69-bcache.rules                   77-mm-mtk-legacy-port-types.rules  85-nm-unmanaged.rules
69-dm-lvm.rules                   77-mm-netprisma-port-types.rules   90-libinput-fuzz-override.rules
69-libmtp.rules                   77-mm-nokia-port-types.rules       90-nm-thunderbolt.rules
70-printers.rules                 77-mm-qcom-soc.rules               90-pipewire-alsa.rules
77-mm-broadmobi-port-types.rules  77-mm-quectel-port-types.rules     95-dm-notify.rules
77-mm-cellient.rules              77-mm-rolling-port-types.rules     95-upower-hid.rules
77-mm-cinterion-port-types.rules  77-mm-sierra.rules                 95-upower-wup.rules
77-mm-dell-port-types.rules       77-mm-simtech-port-types.rules     98-ipv6-privacy-extensions.rules
77-mm-dlink-port-types.rules      77-mm-telit-port-types.rules       99-ipv6-privacy-extensions.rules
77-mm-ericsson-mbm.rules          77-mm-tplink-port-types.rules      99-local.rules
77-mm-fibocom-port-types.rules    77-mm-ublox-port-types.rules

I feel getfacldoes not give me much more information than ls:

getfacl /dev/bus/usb/001/009 
getfacl: Removing leading '/' from absolute path names
# file: dev/bus/usb/001/009
# owner: root
# group: plugdev
user::rw-
group::rw-
other::---

I have installed NixOS at the end of 2025 from a live CD. I have run the command to update it, installed a bunch of games programs and home-manager module to run syncthing as a user. Should i install ACL related packages?

You are looking in /etc/udev/rules.d/. I see it in /run/current-system/sw/lib/udev/rules.d/73-seat-late.rules. On other distros that would be /lib/udev/.

If there were ACLs on that file, you’d see additional lines beyond the standard Unix permissions.

1 Like

Got it, thank you very much for taking the time to explain.

probe-rs-tools has the upstream udev rules as 69-probe-rs.rules, so just adding it to services.udev.packages should work.

1 Like

Thank you @bitbloxhub, @kevinmehall actually mentioned this in their post. I might still elect going this way, especially now that I understand there is nothing wrong with my installation.

1 Like

I have now attempted to go the udev rules path, but unfortunately without success.

  services.udev.packages = [
    (
      pkgs.writeTextFile {
        name = "probe-rs_udev";
        text = builtins.readFile ./udev_rules/69-probe-rs.rules;
        destination = "/etc/udev/rules.d/69-probe-rs.rules";
      }
    )
  ];
  users.groups.plugdev = {};

The above creates file /etc/udev/rules.d/69-probe-rs.rules. Keeping users.groups.plugdev = {}; makes udevadm verify 69-probe-rs.ruleshappy. I have removed my user form the plugdev group and can confirm that the rules for the devices in questions are present and contain the TAG+="uaccess":

Bus 001 Device 009: ID 0483:374e STMicroelectronics STLINK-V3
Bus 001 Device 010: ID 0483:3754 STMicroelectronics STLINK-V3

$ grep -E '0483.*374e' /etc/udev/rules.d/69-probe-rs.rules 
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", MODE="660", GROUP="plugdev", TAG+="uaccess"

$ grep -E '0483.*3754' /etc/udev/rules.d/69-probe-rs.rules 
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3754", MODE="660", GROUP="plugdev", TAG+="uaccess"

Given that the pulgdev group is applied to the devices in question, I am led to believe that TAG+="uaccess" should apply as well:

$ getfacl /dev/bus/usb/001/009 
getfacl: Removing leading '/' from absolute path names
# file: dev/bus/usb/001/009
# owner: root
# group: plugdev
user::rw-
group::rw-
other::---

$ getfacl /dev/bus/usb/001/010 
getfacl: Removing leading '/' from absolute path names
# file: dev/bus/usb/001/010
# owner: root
# group: plugdev
user::rw-
group::rw-
other::---

I must be fundamentally misunderstanding something…

1 Like

First of all, you don’t need to vendor the rules and use writeTextFile, you can just put in pkgs.probe-rs-tools.

Can you try running udevadm info /dev/bus/usb/<whatever>? Also may be helpful to have the outputs of loginctl seat-status seat0 and loginctl session-status.

2 Likes

Got it, I understand your earlier commend now and saw whom you quoted from, apologies. I would look into doing something similar with buspirate and am keen to understand this path. Thank you for your help.

udevadm info /dev/bus/usb/001/009:

P: /devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.2
M: 1-7.2
R: 2
J: c189:8
U: usb
T: usb_device
D: c 189:8
N: bus/usb/001/009
L: 0
V: usb
E: DEVPATH=/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.2
E: DEVNAME=/dev/bus/usb/001/009
E: DEVTYPE=usb_device
E: DRIVER=usb
E: PRODUCT=483/374e/100
E: TYPE=239/2/1
E: BUSNUM=001
E: DEVNUM=009
E: MAJOR=189
E: MINOR=8
E: SUBSYSTEM=usb
E: USEC_INITIALIZED=4721125
E: PATH=/nix/store/kg8j7lhks75ldfc9vd4n0bdcay9127vp-udev-path/bin:/nix/store/kg8j7lhks75ldfc9vd4n0bdcay9127vp-udev-path/sbin
E: ID_BUS=usb
E: ID_MODEL=STLINK-V3
E: ID_MODEL_ENC=STLINK-V3
E: ID_MODEL_ID=374e
E: ID_SERIAL=STMicroelectronics_STLINK-V3_004900433133511335333335
E: ID_SERIAL_SHORT=004900433133511335333335
E: ID_VENDOR=STMicroelectronics
E: ID_VENDOR_ENC=STMicroelectronics
E: ID_VENDOR_ID=0483
E: ID_REVISION=0100
E: ID_USB_MODEL=STLINK-V3
E: ID_USB_MODEL_ENC=STLINK-V3
E: ID_USB_MODEL_ID=374e
E: ID_USB_SERIAL=STMicroelectronics_STLINK-V3_004900433133511335333335
E: ID_USB_SERIAL_SHORT=004900433133511335333335
E: ID_USB_VENDOR=STMicroelectronics
E: ID_USB_VENDOR_ENC=STMicroelectronics
E: ID_USB_VENDOR_ID=0483
E: ID_USB_REVISION=0100
E: ID_USB_INTERFACES=:ffffff:080650:020201:0a0000:
E: ID_VENDOR_FROM_DATABASE=STMicroelectronics
E: ID_MODEL_FROM_DATABASE=STLINK-V3
E: ID_PATH_WITH_USB_REVISION=pci-0000:04:00.0-usbv2-0:7.2
E: ID_PATH=pci-0000:04:00.0-usb-0:7.2
E: ID_PATH_TAG=pci-0000_04_00_0-usb-0_7_2
E: TAGS=:seat:uaccess:

udevadm info /dev/bus/usb/001/010:

P: /devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.1
M: 1-7.1.1
R: 1
J: c189:9
U: usb
T: usb_device
D: c 189:9
N: bus/usb/001/010
L: 0
V: usb
E: DEVPATH=/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.1
E: DEVNAME=/dev/bus/usb/001/010
E: DEVTYPE=usb_device
E: DRIVER=usb
E: PRODUCT=483/3754/100
E: TYPE=239/2/1
E: BUSNUM=001
E: DEVNUM=010
E: MAJOR=189
E: MINOR=9
E: SUBSYSTEM=usb
E: USEC_INITIALIZED=4925073
E: PATH=/nix/store/kg8j7lhks75ldfc9vd4n0bdcay9127vp-udev-path/bin:/nix/store/kg8j7lhks75ldfc9vd4n0bdcay9127vp-udev-path/sbin
E: ID_BUS=usb
E: ID_MODEL=STLINK-V3
E: ID_MODEL_ENC=STLINK-V3
E: ID_MODEL_ID=3754
E: ID_SERIAL=STMicroelectronics_STLINK-V3_002E00483433511830343835
E: ID_SERIAL_SHORT=002E00483433511830343835
E: ID_VENDOR=STMicroelectronics
E: ID_VENDOR_ENC=STMicroelectronics
E: ID_VENDOR_ID=0483
E: ID_REVISION=0100
E: ID_USB_MODEL=STLINK-V3
E: ID_USB_MODEL_ENC=STLINK-V3
E: ID_USB_MODEL_ID=3754
E: ID_USB_SERIAL=STMicroelectronics_STLINK-V3_002E00483433511830343835
E: ID_USB_SERIAL_SHORT=002E00483433511830343835
E: ID_USB_VENDOR=STMicroelectronics
E: ID_USB_VENDOR_ENC=STMicroelectronics
E: ID_USB_VENDOR_ID=0483
E: ID_USB_REVISION=0100
E: ID_USB_INTERFACES=:ffffff:020201:0a0000:
E: ID_VENDOR_FROM_DATABASE=STMicroelectronics
E: ID_PATH_WITH_USB_REVISION=pci-0000:04:00.0-usbv2-0:7.1.1
E: ID_PATH=pci-0000:04:00.0-usb-0:7.1.1
E: ID_PATH_TAG=pci-0000_04_00_0-usb-0_7_1_1
E: TAGS=:uaccess:seat:

loginctl seat-status seat0:

seat0
Sessions: *2
 Devices: n/a
         β”œβ”€/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card1
         β”‚ [MASTER] drm:card1
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card1/card1-DP-1
         β”‚ β”‚ [MASTER] drm:card1-DP-1
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card1/card1-HDMI-A-1
         β”‚ β”‚ [MASTER] drm:card1-HDMI-A-1
         β”‚ └─/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card1/card1-Writeback-1
         β”‚   [MASTER] drm:card1-Writeback-1
         β”œβ”€/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/graphics/fb0
         β”‚ graphics:fb0 "amdgpudrmfb"
         β”œβ”€/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.1/sound/card0
         β”‚ sound:card0 "HDMI"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.1/sound/card0/input16
         β”‚ β”‚ input:input16 "HDA ATI HDMI HDMI/DP,pcm=3"
         β”‚ └─/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.1/sound/card0/input17
         β”‚   input:input17 "HDA ATI HDMI HDMI/DP,pcm=7"
         β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1
         β”‚ usb:usb1
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-1
         β”‚ β”‚ usb:1-1
         β”‚ β”‚ └─/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-1/1-1:1.2/0003:0B05:19AF.0001/hidraw/hidraw0
         β”‚ β”‚   hidraw:hidraw0
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-3
         β”‚ β”‚ usb:1-3
         β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-3/1-3:1.0/0003:046D:C52E.0004/hidraw/hidraw3
         β”‚ β”‚ β”‚ hidraw:hidraw3
         β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-3/1-3:1.0/0003:046D:C52E.0004/input/input4
         β”‚ β”‚ β”‚ input:input4 "Logitech USB Receiver"
         β”‚ β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-3/1-3:1.0/0003:046D:C52E.0004/input/input4/input4::capslock
         β”‚ β”‚ β”‚ β”‚ leds:input4::capslock
         β”‚ β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-3/1-3:1.0/0003:046D:C52E.0004/input/input4/input4::compose
         β”‚ β”‚ β”‚ β”‚ leds:input4::compose
         β”‚ β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-3/1-3:1.0/0003:046D:C52E.0004/input/input4/input4::kana
         β”‚ β”‚ β”‚ β”‚ leds:input4::kana
         β”‚ β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-3/1-3:1.0/0003:046D:C52E.0004/input/input4/input4::numlock
         β”‚ β”‚ β”‚ β”‚ leds:input4::numlock
         β”‚ β”‚ β”‚ └─/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-3/1-3:1.0/0003:046D:C52E.0004/input/input4/input4::scrolllock
         β”‚ β”‚ β”‚   leds:input4::scrolllock
         β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-3/1-3:1.1/0003:046D:C52E.0005/hidraw/hidraw4
         β”‚ β”‚ β”‚ hidraw:hidraw4
         β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-3/1-3:1.1/0003:046D:C52E.0005/input/input5
         β”‚ β”‚ β”‚ input:input5 "Logitech USB Receiver Mouse"
         β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-3/1-3:1.1/0003:046D:C52E.0005/input/input6
         β”‚ β”‚ β”‚ input:input6 "Logitech USB Receiver Consumer Control"
         β”‚ β”‚ └─/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-3/1-3:1.1/0003:046D:C52E.0005/input/input7
         β”‚ β”‚   input:input7 "Logitech USB Receiver System Control"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-4
         β”‚ β”‚ usb:1-4
         β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-4/1-4:1.0/0003:046D:C24E.0002/hidraw/hidraw1
         β”‚ β”‚ β”‚ hidraw:hidraw1
         β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-4/1-4:1.0/0003:046D:C24E.0002/input/input0
         β”‚ β”‚ β”‚ input:input0 "Logitech G500s Laser Gaming Mouse"
         β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-4/1-4:1.1/0003:046D:C24E.0003/hidraw/hidraw2
         β”‚ β”‚ β”‚ hidraw:hidraw2
         β”‚ β”‚ └─/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-4/1-4:1.1/0003:046D:C24E.0003/input/input1
         β”‚ β”‚   input:input1 "Logitech G500s Laser Gaming Mouse Keyboard"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-6/1-6:1.0/sound/card3
         β”‚ β”‚ sound:card3 "iD4"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-6/1-6:1.3/0003:2708:0009.0006/hidraw/hidraw5
         β”‚ β”‚ hidraw:hidraw5
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-6/1-6:1.3/0003:2708:0009.0006/input/input10
         β”‚ β”‚ input:input10 "Audient Audient iD4"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7
         β”‚ β”‚ usb:1-7
         β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1
         β”‚ β”‚ β”‚ usb:1-7.1
         β”‚ β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.1/1-7.1.1:1.0
         β”‚ β”‚ β”‚ β”‚ usb:1-7.1.1:1.0
         β”‚ β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.1/1-7.1.1:1.1/tty/ttyACM1
         β”‚ β”‚ β”‚ β”‚ tty:ttyACM1
         β”‚ β”‚ β”‚ └─/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.3
         β”‚ β”‚ β”‚   usb:1-7.1.3
         β”‚ β”‚ β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.3/1-7.1.3:1.0/0003:046D:C30E.0009/hidraw/hidraw8
         β”‚ β”‚ β”‚   β”‚ hidraw:hidraw8
         β”‚ β”‚ β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.3/1-7.1.3:1.0/0003:046D:C30E.0009/input/input30
         β”‚ β”‚ β”‚   β”‚ input:input30 "Logitech HID compliant keyboard"
         β”‚ β”‚ β”‚   β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.3/1-7.1.3:1.0/0003:046D:C30E.0009/input/input30/input30::capslock
         β”‚ β”‚ β”‚   β”‚ β”‚ leds:input30::capslock
         β”‚ β”‚ β”‚   β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.3/1-7.1.3:1.0/0003:046D:C30E.0009/input/input30/input30::numlock
         β”‚ β”‚ β”‚   β”‚ β”‚ leds:input30::numlock
         β”‚ β”‚ β”‚   β”‚ └─/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.3/1-7.1.3:1.0/0003:046D:C30E.0009/input/input30/input30::scrolllock
         β”‚ β”‚ β”‚   β”‚   leds:input30::scrolllock
         β”‚ β”‚ β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.3/1-7.1.3:1.1/0003:046D:C30E.000A/hidraw/hidraw9
         β”‚ β”‚ β”‚   β”‚ hidraw:hidraw9
         β”‚ β”‚ β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.3/1-7.1.3:1.1/0003:046D:C30E.000A/input/input31
         β”‚ β”‚ β”‚   β”‚ input:input31 "Logitech HID compliant keyboard Consumer Control"
         β”‚ β”‚ β”‚   └─/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.1/1-7.1.3/1-7.1.3:1.1/0003:046D:C30E.000A/input/input32
         β”‚ β”‚ β”‚     input:input32 "Logitech HID compliant keyboard System Control"
         β”‚ β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.2/1-7.2:1.0
         β”‚ β”‚ β”‚ usb:1-7.2:1.0
         β”‚ β”‚ └─/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-7/1-7.2/1-7.2:1.2/tty/ttyACM0
         β”‚ β”‚   tty:ttyACM0
         β”‚ └─/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-9
         β”‚   usb:1-9
         β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-9/1-9:1.0/0003:0D24:0005.0007/hidraw/hidraw6
         β”‚   β”‚ hidraw:hidraw6
         β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-9/1-9:1.0/0003:0D24:0005.0007/input/input11
         β”‚   β”‚ input:input11 "Trapper Data AB MouseTrapper Advance"
         β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-9/1-9:1.1/0003:0D24:0005.0008/hidraw/hidraw7
         β”‚   β”‚ hidraw:hidraw7
         β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-9/1-9:1.1/0003:0D24:0005.0008/input/input12
         β”‚   β”‚ input:input12 "Trapper Data AB MouseTrapper Advance Mouse"
         β”‚   └─/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb1/1-9/1-9:1.1/0003:0D24:0005.0008/input/input13
         β”‚     input:input13 "Trapper Data AB MouseTrapper Advance Consumer Control"
         β”œβ”€/sys/devices/pci0000:00/0000:00:02.1/0000:04:00.0/usb2
         β”‚ usb:usb2
         β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.1/sound/card1
         β”‚ sound:card1 "Generic"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.1/sound/card1/input18
         β”‚ β”‚ input:input18 "HD-Audio Generic HDMI/DP,pcm=3"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.1/sound/card1/input19
         β”‚ β”‚ input:input19 "HD-Audio Generic HDMI/DP,pcm=7"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.1/sound/card1/input20
         β”‚ β”‚ input:input20 "HD-Audio Generic HDMI/DP,pcm=8"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.1/sound/card1/input21
         β”‚ β”‚ input:input21 "HD-Audio Generic HDMI/DP,pcm=9"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.1/sound/card1/input22
         β”‚ β”‚ input:input22 "HD-Audio Generic HDMI/DP,pcm=10"
         β”‚ └─/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.1/sound/card1/input23
         β”‚   input:input23 "HD-Audio Generic HDMI/DP,pcm=11"
         β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.3/usb3
         β”‚ usb:usb3
         β”‚ └─/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.3/usb3/3-2
         β”‚   usb:3-2
         β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.3/usb4
         β”‚ usb:usb4
         β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5
         β”‚ usb:usb5
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-1
         β”‚ β”‚ usb:5-1
         β”‚ └─/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-2
         β”‚   usb:5-2
         β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-2/5-2:1.0/0003:24F0:0105.000B/hidraw/hidraw10
         β”‚   β”‚ hidraw:hidraw10
         β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-2/5-2:1.0/0003:24F0:0105.000B/input/input33
         β”‚   β”‚ input:input33 "Das Keyboard Das Keyboard P13"
         β”‚   β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-2/5-2:1.0/0003:24F0:0105.000B/input/input33/input33::capslock
         β”‚   β”‚ β”‚ leds:input33::capslock
         β”‚   β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-2/5-2:1.0/0003:24F0:0105.000B/input/input33/input33::numlock
         β”‚   β”‚ β”‚ leds:input33::numlock
         β”‚   β”‚ └─/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-2/5-2:1.0/0003:24F0:0105.000B/input/input33/input33::scrolllock
         β”‚   β”‚   leds:input33::scrolllock
         β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-2/5-2:1.1/0003:24F0:0105.000C/hidraw/hidraw11
         β”‚   β”‚ hidraw:hidraw11
         β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-2/5-2:1.1/0003:24F0:0105.000C/input/input34
         β”‚   β”‚ input:input34 "Das Keyboard Das Keyboard P13 Mouse"
         β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-2/5-2:1.1/0003:24F0:0105.000C/input/input35
         β”‚   β”‚ input:input35 "Das Keyboard Das Keyboard P13 System Control"
         β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-2/5-2:1.1/0003:24F0:0105.000C/input/input36
         β”‚   β”‚ input:input36 "Das Keyboard Das Keyboard P13 Consumer Control"
         β”‚   β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-2/5-2:1.1/0003:24F0:0105.000C/input/input38
         β”‚   β”‚ input:input38 "Das Keyboard Das Keyboard P13 Keyboard"
         β”‚   └─/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb5/5-2/5-2:1.2/0003:24F0:0105.000D/hidraw/hidraw12
         β”‚     hidraw:hidraw12
         β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb6
         β”‚ usb:usb6
         β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.6/sound/card2
         β”‚ sound:card2 "Generic_1"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.6/sound/card2/input25
         β”‚ β”‚ input:input25 "HD-Audio Generic Rear Mic"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.6/sound/card2/input26
         β”‚ β”‚ input:input26 "HD-Audio Generic Front Mic"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.6/sound/card2/input27
         β”‚ β”‚ input:input27 "HD-Audio Generic Line"
         β”‚ β”œβ”€/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.6/sound/card2/input28
         β”‚ β”‚ input:input28 "HD-Audio Generic Line Out"
         β”‚ └─/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.6/sound/card2/input29
         β”‚   input:input29 "HD-Audio Generic Front Headphone"
         β”œβ”€/sys/devices/platform/AMDI0030:00/gpiochip0
         β”‚ gpio:gpiochip0
         β”œβ”€/sys/devices/platform/AMDIF030:00/gpiochip1
         β”‚ gpio:gpiochip1
         β”œβ”€/sys/devices/platform/LNXPWRBN:00/input/input15
         β”‚ input:input15 "Power Button"
         β”œβ”€/sys/devices/platform/PNP0C0C:00/input/input14
         β”‚ input:input14 "Power Button"
         β”œβ”€/sys/devices/platform/eeepc-wmi/input/input24
         β”‚ input:input24 "Eee PC WMI hotkeys"
         β”œβ”€/sys/devices/virtual/misc/rfkill
         β”‚ misc:rfkill
         └─/sys/devices/virtual/misc/udmabuf
           misc:udmabuf

loginctl session-status:

2 - hannes (1000)
  Since: Sun 2026-09-06 04:46:20 CEST; 22min ago
  State: active
 Leader: 1692 (sddm-helper)
   Seat: seat0; vc2
    TTY: tty2
 Remote: no
Service: sddm
   Type: wayland
  Class: user
Desktop: KDE
   Idle: no
   Unit: session-2.scope
         β”œβ”€1692 /nix/store/16h5hbv5jwfngz7bjida540ac47gkm24-sddm-unwrapped-0.21.0/libexec/sddm-helper --socket /tmp/sddm-auth-fa9ff5ed-bbfd-4716-a3b7-a4fd81339024 --id 1 --start "/nix/store/d612kh7i6h9mlhd6zpbjsq7xxddbc55p-plasma-workspace-6.5.6/libexec/plasma-dbus-run-session-if-needed /nix/store/d612kh7i6h9mlhd6zpbjsq7xxddbc55p-plasma-workspace-6.5.6/bin/startplasma-wayland" --user hannes
         β”œβ”€1784 /nix/store/pgsv35xxjk2axrb07iiyqvcjbl258kqy-kwallet-6.20.0/bin/ksecretd --pam-login 13 14
         └─1785 /nix/store/d612kh7i6h9mlhd6zpbjsq7xxddbc55p-plasma-workspace-6.5.6/bin/startplasma-wayland

sep 06 04:46:20 nixos systemd[1]: Started Session 2 of User hannes.
sep 06 04:46:20 nixos sddm-helper[1783]: pam_kwallet5: final socket path: /run/user/1000/kwallet5.socket
sep 06 04:46:20 nixos sddm-helper[1785]: Jumping to VT 2
sep 06 04:46:20 nixos sddm-helper[1785]: VT mode didn't need to be fixed
sep 06 04:46:24 nixos ksecretd[1784]: Failed to register with host portal QDBusError("org.freedesktop.portal.Error.Failed", "Could not register app ID: Connection already associated with an application ID")

All commands ran as my user.

1 Like

It seems like the device was plugged in at boot. What happens if you unplug and plug back in the device? Also, what does systemctl --version return? systemd 258 had some changes around uaccess that may have caused this problem.

If you change ACTION!="add|change", GOTO="probe_rs_rules_end" to ACTION=="remove", GOTO="probe_rs_rules_end" does it work when booting with them plugged in?

1 Like

Ok, this is getting scary… You hit the nail on its head while blindfolded, thrice.

systemctl --version

It is indeed version 258:

$ systemctl --version
systemd 258 (258.7)
+PAM +AUDIT -SELINUX +APPARMOR +IMA +IPE +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBCRYPTSETUP_PLUGINS +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +BPF_FRAMEWORK -BTF -XKBCOMMON +UTMP -SYSVINIT +LIBARCHIVE

Repluging the device after boot made it work.

Yes, it does. I can then re-plug it and it still works.

–

Would you say this is a problem with systemd version 258 or 69-probe-rs.rules?

Thank you so much for your help again, really appreciated.

It’s a problem with 69-probe-rs.rules. More info on how I found the issue out:
Seeing the getfacl fail to show an ACL for your user even with TAG+="uaccess", I was very interested in why this was failing. I used ChatGPT (GPT-5.6-Sol) to start researching (I double-checked and wrote everything in my own words), and I figured out that I needed the udevadm info and loginctl commands.
After seeing the output of those and letting ChatGPT assess it, it found that on systemd 258+, there were some changes regarding how uaccess worked (this Solaar issue on Debian was my main source) that required it to be in CURRENT_TAGS, which was absent in your udevadm info output. My main suspicion for why this is is that a bind event happened, skipped the rules because of ACTION!="add|change", GOTO="probe_rs_rules_end". So the timeline for the replug is:

  • Device added during boot
  • add event picked up by udev, rules apply
  • seat0 has no active user/session yet, but the device is still assigned to seat0 and gets the uaccess tag
  • bind (or another event other than add or change) happens
  • CURRENT_TAGS no longer has uaccess
  • Log in, seat has an active user/session now, but since CURRENT_TAGS is missing uaccess, it does not apply the ACL.
  • Replug, device gets an add event
  • uaccess applied; since the device’s seat now has an active user/session, it gets the ACL
  • bind (or another event other than add or change) happens, CURRENT_TAGS no longer has uaccess but ACL still in place

You can read about CURRENT_TAGS (introduced in v247, where the recommendation to use ACTION=="remove" actually comes from) in its NEWS entry: systemd/NEWS at v247 Β· systemd/systemd Β· GitHub.
With ACTION=="remove", uaccess will still be applied to CURRENT_TAGS even after bind, and when the seat gets an active user/session, logind triggers synthetic change events for everything with uaccess in CURRENT_TAGS.

Made a PR to probe-rs to fix this in the upstream udev rules:

1 Like

Thank you very much for your help and brilliant you created a PR. I have read your explanation and the linked systemd NEWS section with interest. I am following the general gist of it, but feel there is more to learn before I understand fully.

I am very appreciative to have a fully functional NixOS system now, including the uaccess mechanism, in great part thanks to your patient and continued support.

1 Like

Also, what version of NixOS are you on (channel version/flake input)?
Since you have systemd 258.7 (latest version on 25.11) it seems like you may be on NixOS 25.11, in that case you should probably upgrade to 26.05.

Indeed:

  # This value determines the NixOS release from which the default
  # settings for stateful data, like file locations and database versions
  # on your system were taken. Itβ€˜s perfectly fine and recommended to leave
  # this value at the release version of the first install of this system.
  # Before changing this value read the documentation for this option
  # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
  system.stateVersion = "25.11"; # Did you read the comment?

Form the comment I gather i should not change this value (Have to change it for home-manager too if i do). I do however run nixos-rebuild switch --upgrade regularly (might go the automatic route when at some point).

No, stateVersion is unrelated to your current channel, and nixos-rebuild switch --upgrade only updates your channel to the latest revision, and not your release.

1 Like

Hmm, somehow I assumed that adding channels was an exercise needed only to cherry pick certain packages and that nixos-rebuild switch --upgrade actually would follow the packages in the newest available channel… Reading this again, it clearly says β€œβ€¦ to switch to a different channel β€¦β€œ. The --add flag in nix-channel --add https://channels.nixos.org/channel-name nixos really threw me off. Looking at the man page, the [name] part, nixos in this case, seems key as the other commands reference this.

Thank you for making me aware, could have been a while before I would have started to wonder about the spares updating process :joy: .

1 Like

Yeah, release upgrades should be documented better when installing stable for the first time, this seems to trip a lot of new people up.

1 Like