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:
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:
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:
Log output after first try with User=root and Group=root:
Log output again with User=weston and Group=weston:
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:
I have no idea if this has somehow any effect or is related.
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
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
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::---
Last edited: