Can access to /dev/input only after root accessed to it

rudar

New Member
Joined
May 19, 2021
Messages
5
Reaction score
0
Credits
60
Hello everyone I'm new here, and need help.
I have a weird problem: in short, I'm trying to run weston as a non root user, using systemd, but apparently weston doesn't want to run unless it's been executed as a root just before.
I willingly accept any advice on how to understand why this is happening, I'd like to know if it's a problem from my configuration, or a problem of weston/libinput/libevdev for which I need to open a bug report.

On my system running gentoo I'm trying to run weston as a non root user using systemd.
As a good tech which I'm not, I copied and pasted on /etc/systemd/system/weston.service the following service file: https://git.yoctoproject.org/cgit.c...s-graphics/wayland/weston-init/weston.service

Folder /dev/input contains the following:
Code:
gentoopie ~ # ls -lah /dev/input
totale 0
drwxr-xr-x  4 root root     160 16 dic 14.31 .
drwxr-xr-x 19 root root    3,8K 19 mag 17.13 ..
drwxr-xr-x  2 root root     100 16 dic 14.31 by-id
drwxr-xr-x  2 root root     100 16 dic 14.31 by-path
crw-rw----  1 root input 13, 64 16 dic 14.31 event0
crw-rw----  1 root input 13, 65 16 dic 14.31 event1
crw-rw-r--  1 root input 13,  0 16 dic 14.31 js0
crw-rw----  1 root input 13, 63 16 dic 14.31 mice
As you can see read/write permissions are granted both to root and input group, and the user weston is within the following groups: audio video input render weston.

Launching the command systemctl start weston the operation fails, at the end of the log weston puts out the following messages:
Code:
event1  - not using input device '/dev/input/event1'
event0  - not using input device '/dev/input/event0'
warning: no input devices on entering Weston. Possible causes:
        - no permissions to read /dev/input/event*
        - seats misconfigured (Weston backend option 'seat', udev device property ID_SEAT)
failed to create input devices
Which leads to think there are some kind of permissions problems (weird, since it's rw-rw----).

Anyway here comes the good part, if I do the following sequence I can run weston as non-root, until the next reboot:
1) Edit /etc/systemd/system/weston.service setting User=root and Group=root
2) systemctl daemon-reload ; systemctl start weston ; systemctl stop weston
3) Edit /etc/systemd/system/weston.service setting back User=weston e Group=weston
4) systemctl daemon-reload ; systemctl start weston
And voilà, weston ran as non-root user.

Having gentoo I told myself: why not patching the source code outputting log messages here and there?
So I patched libinput (dependency of weston) and libevdev (dependency of libinput) with the following patches:
libinput patch: https://nopaste.nl/lmJ6cbxAqU
libevdev patch: https://nopaste.nl/TgalEyC5UO

And this is the result.
Log output with freshly booted pc with User=weston and Group=weston:
Code:
weston[3474]: [17:13:23.094] [libinput] evdev_device_create
weston[3474]: [17:13:23.099] [libinput] libevdev_new_from_fd(/dev/input/event1)
weston[3474]: libevdev error in libevdev_new_from_fd: [libevdev] libevdev_new
weston[3474]: libevdev error in libevdev_set_fd: [libevdev] ioctl1 returned -1, errno=19 (No such device)
weston[3474]: libevdev error in libevdev_new_from_fd: [libevdev] libevdev_set_fd returned -19
weston[3474]: [17:13:23.100] event1  - not using input device '/dev/input/event1'
weston[3474]: [17:13:23.102] [libinput] evdev_device_create
weston[3474]: [17:13:23.122] [libinput] libevdev_new_from_fd(/dev/input/event0)
weston[3474]: libevdev error in libevdev_new_from_fd: [libevdev] libevdev_new
weston[3474]: libevdev error in libevdev_set_fd: [libevdev] ioctl1 returned -1, errno=19 (No such device)
weston[3474]: libevdev error in libevdev_new_from_fd: [libevdev] libevdev_set_fd returned -19
weston[3474]: [17:13:23.123] event0  - not using input device '/dev/input/event0'
weston[3474]: [17:13:23.124] warning: no input devices on entering Weston. Possible causes:
weston[3474]:         - no permissions to read /dev/input/event*
weston[3474]:         - seats misconfigured (Weston backend option 'seat', udev device property ID_SEAT)
weston[3474]: [17:13:23.124] failed to create input devices

Log output after first try with User=root and Group=root:
Code:
weston[3528]: [17:48:25.347] [libinput] evdev_device_create
weston[3528]: [17:48:25.352] [libinput] libevdev_new_from_fd(/dev/input/event1)
weston[3528]: libevdev error in libevdev_new_from_fd: [libevdev] libevdev_new
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl1 returned 8, errno=11 (Resource temporarily unavailable)
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl2 returned 14
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl3 returned 32
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl4 returned 17
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl5 returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl6 returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl7 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl8 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl9 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl10 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl11 returned 96
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl12 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl13 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl14 returned 16
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl15 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl16 returned 96
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl17 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl18 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl18b returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] init_slots returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] init_event_queue returned 0
weston[3528]: libevdev error in libevdev_new_from_fd: [libevdev] libevdev_set_fd returned 0
weston[3528]: [17:48:25.365] event1  - Logitech K360: is tagged by udev as: Keyboard
weston[3528]: [17:48:25.365] event1  - Logitech K360: device is a keyboard
weston[3528]: [17:48:25.367] [libinput] evdev_configure_device
weston[3528]: [17:48:25.367] [libinput] libinput_add_fd
weston[3528]: [17:48:25.367] [libinput] evdev_set_device_group
weston[3528]: [17:48:25.369] [libinput] evdev_device_create
weston[3528]: [17:48:25.374] [libinput] libevdev_new_from_fd(/dev/input/event0)
weston[3528]: libevdev error in libevdev_new_from_fd: [libevdev] libevdev_new
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl1 returned 8, errno=11 (Resource temporarily unavailable)
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl2 returned 22
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl3 returned 30
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl4 returned -1
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl5 returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl6 returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl7 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl8 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl9 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl10 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl11 returned 96
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl12 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl13 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl14 returned 16
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl15 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl16 returned 96
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl17 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl18 returned 8
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] init_slots returned 0
weston[3528]: libevdev error in libevdev_set_fd: [libevdev] init_event_queue returned 0
weston[3528]: libevdev error in libevdev_new_from_fd: [libevdev] libevdev_set_fd returned 0
weston[3528]: [17:48:25.384] event0  - Logitech Gamepad F710: is tagged by udev as: Joystick
weston[3528]: [17:48:25.384] event0  - Logitech Gamepad F710: device is a joystick, ignoring
weston[3528]: [17:48:25.384] [libinput] evdev_configure_device
weston[3528]: [17:48:25.384] event0  - not using input device '/dev/input/event0'

Log output again with User=weston and Group=weston:
Code:
weston[3556]: [17:50:11.673] [libinput] evdev_device_create
weston[3556]: [17:50:11.678] [libinput] libevdev_new_from_fd(/dev/input/event1)
weston[3556]: libevdev error in libevdev_new_from_fd: [libevdev] libevdev_new
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl1 returned 8, errno=11 (Resource temporarily unavailable)
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl2 returned 14
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl3 returned 32
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl4 returned 17
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl5 returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl6 returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl7 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl8 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl9 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl10 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl11 returned 96
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl12 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl13 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl14 returned 16
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl15 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl16 returned 96
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl17 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl18 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl18b returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] init_slots returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] init_event_queue returned 0
weston[3556]: libevdev error in libevdev_new_from_fd: [libevdev] libevdev_set_fd returned 0
weston[3556]: [17:50:11.701] event1  - Logitech K360: is tagged by udev as: Keyboard
weston[3556]: [17:50:11.702] event1  - Logitech K360: device is a keyboard
weston[3556]: [17:50:11.703] [libinput] evdev_configure_device
weston[3556]: [17:50:11.703] [libinput] libinput_add_fd
weston[3556]: [17:50:11.703] [libinput] evdev_set_device_group
weston[3556]: [17:50:11.705] [libinput] evdev_device_create
weston[3556]: [17:50:11.710] [libinput] libevdev_new_from_fd(/dev/input/event0)
weston[3556]: libevdev error in libevdev_new_from_fd: [libevdev] libevdev_new
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl1 returned 8, errno=11 (Resource temporarily unavailable)
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl2 returned 22
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl3 returned 30
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl4 returned -1
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl5 returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl6 returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl7 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl8 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl9 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl10 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl11 returned 96
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl12 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl13 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl14 returned 16
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl15 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl16 returned 96
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl17 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl18 returned 8
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
systemd[1]: Started Weston, a Wayland compositor, as a system service.
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] ioctl18c returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] init_slots returned 0
weston[3556]: libevdev error in libevdev_set_fd: [libevdev] init_event_queue returned 0
weston[3556]: libevdev error in libevdev_new_from_fd: [libevdev] libevdev_set_fd returned 0
weston[3556]: [17:50:11.720] event0  - Logitech Gamepad F710: is tagged by udev as: Joystick
weston[3556]: [17:50:11.720] event0  - Logitech Gamepad F710: device is a joystick, ignoring
weston[3556]: [17:50:11.720] [libinput] evdev_configure_device
weston[3556]: [17:50:11.720] event0  - not using input device '/dev/input/event0'


UPDATE 1
I noticed that the file permissions have changed after the last run (User=weston and Group=weston), apparently ls -l shows that /dev/input/event0 permissions have a + sign at the end, as follows:
Code:
gentoopie ~ # ls -lah /dev/input
totale 0
drwxr-xr-x   4 root root     160 16 dic 14.31 .
drwxr-xr-x  19 root root    3,9K 20 mag 08.27 ..
drwxr-xr-x   2 root root     100 16 dic 14.31 by-id
drwxr-xr-x   2 root root     100 16 dic 14.31 by-path
crw-rw----+  1 root input 13, 64 16 dic 14.31 event0
crw-rw----   1 root input 13, 65 16 dic 14.31 event1
crw-rw-r--+  1 root input 13,  0 16 dic 14.31 js0
crw-rw----   1 root input 13, 63 16 dic 14.31 mice

gentoopie ~ # getfacl /dev/input/event0
getfacl: Removing leading '/' from absolute path names
# file: dev/input/event0
# owner: root
# group: input
user::rw-
group::rw-
mask::rw-
other::---

gentoopie ~ # getfacl /dev/input/event1
getfacl: Removing leading '/' from absolute path names
# file: dev/input/event1
# owner: root
# group: input
user::rw-
group::rw-
other::---
I have no idea if this has somehow any effect or is related.
 
Last edited:


Of course I have tried that, and it works, but that's not what I'm trying to achieve (execution of weston via set-uid).
I think a summary of direct implicit questions that summarize my doubts would be:
  • why ioctl calls fail when a non-root user is making them?,
  • why ioctl calls don't fail if root made them before the non-root user?
  • why isn't it enough for /dev/input/eventX to be rw-rw---- for ioctl calls to be succesful?
Right know I don't know the answer, but I'm determined enough to get to the bottom of it.
 
Last edited:
Update: I stumbled upon this issue, apparently it's a bug, either systemd's or weston's.
Downgrading to sys-apps/systemd-244.3 solved the issue for me.
 
Last edited:

Staff online

Members online


Top