From 3181d91edf6e1ad958f19626381b5980fc2afabb Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 10 Mar 2024 20:06:59 -0500 Subject: [PATCH] Apply udev rules to /dev/uinput immediately after installation --- docs/source/about/setup.rst | 5 ++++- packaging/linux/AppImage/AppRun | 21 ++------------------- packaging/linux/Arch/sunshine.install | 8 ++++++++ src_assets/linux/misc/postinst | 7 +++++++ 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/docs/source/about/setup.rst b/docs/source/about/setup.rst index 89b58302..8b803a78 100644 --- a/docs/source/about/setup.rst +++ b/docs/source/about/setup.rst @@ -195,11 +195,14 @@ Install Sunshine needs access to `uinput` to create mouse and gamepad events. - #. Create `udev` rules. + #. Create and reload `udev` rules for uinput. .. code-block:: bash echo 'KERNEL=="uinput", SUBSYSTEM=="misc", OPTIONS+="static_node=uinput", TAG+="uaccess"' | \ sudo tee /etc/udev/rules.d/60-sunshine.rules + sudo udevadm control --reload-rules + sudo udevadm trigger + sudo modprobe uinput #. Optionally, configure autostart service diff --git a/packaging/linux/AppImage/AppRun b/packaging/linux/AppImage/AppRun index 4eeaeada..404704c3 100644 --- a/packaging/linux/AppImage/AppRun +++ b/packaging/linux/AppImage/AppRun @@ -47,6 +47,8 @@ function install() { # user input rules # shellcheck disable=SC2002 cat "$SUNSHINE_SHARE_HERE/udev/rules.d/60-sunshine.rules" | sudo tee /etc/udev/rules.d/60-sunshine.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --property-match=DEVNAME=/dev/uinput # sunshine service mkdir -p ~/.config/systemd/user @@ -56,25 +58,6 @@ function install() { # setcap sudo setcap cap_sys_admin+p "$(readlink -f "$SUNSHINE_BIN_HERE")" - - while true - do - read -r -p "This installation requires a reboot. Do you want to reboot NOW? [y/n] " input - - case $input in - [yY][eE][sS]|[yY]) - echo "Yes" - sudo reboot now - ;; - [nN][oO]|[nN]) - echo "No" - break - ;; - *) - echo "Invalid input..." - ;; - esac - done } function remove() { diff --git a/packaging/linux/Arch/sunshine.install b/packaging/linux/Arch/sunshine.install index 4d4a4a45..a8a700f1 100644 --- a/packaging/linux/Arch/sunshine.install +++ b/packaging/linux/Arch/sunshine.install @@ -2,11 +2,19 @@ do_setcap() { setcap cap_sys_admin+p $(readlink -f $(which sunshine)) } +do_udev_reload() { + udevadm control --reload-rules + udevadm trigger --property-match=DEVNAME=/dev/uinput + modprobe uinput || true +} + post_install() { do_setcap + do_udev_reload } post_upgrade() { do_setcap + do_udev_reload } diff --git a/src_assets/linux/misc/postinst b/src_assets/linux/misc/postinst index 63f0523d..aab899f9 100644 --- a/src_assets/linux/misc/postinst +++ b/src_assets/linux/misc/postinst @@ -6,3 +6,10 @@ if [ -x "$path_to_setcap" ] ; then echo "$path_to_setcap cap_sys_admin+p /usr/bin/sunshine" $path_to_setcap cap_sys_admin+p $(readlink -f /usr/bin/sunshine) fi + +# Trigger udev rule reload for /dev/uinput +path_to_udevadm=$(which udevadm) +if [ -x "$path_to_udevadm" ] ; then + $path_to_udevadm control --reload-rules + $path_to_udevadm trigger --property-match=DEVNAME=/dev/uinput +fi