diff options
author | Anna (navi) Figueiredo Gomes <navi@vlhl.dev> | 2024-07-12 00:51:12 +0200 |
---|---|---|
committer | Anna (navi) Figueiredo Gomes <navi@vlhl.dev> | 2024-07-19 20:40:28 +0200 |
commit | fd961d2ea0eea2cc60f4af1aca6b6e7711d43995 (patch) | |
tree | fc53ad7bf4d46a3b72e151b79e8433ff4d565514 /init.d | |
parent | c34fcd63f05044f9034b26c52f19c91e04668da7 (diff) |
openrc-user: init script for users
adds a new multiplexed script for starting user sessions. it also sets
up XDG_RUNTIME_DIR.
Signed-off-by: Anna (navi) Figueiredo Gomes <navi@vlhl.dev>
Diffstat (limited to 'init.d')
-rw-r--r-- | init.d/bootmisc.in | 6 | ||||
-rw-r--r-- | init.d/meson.build | 5 | ||||
-rw-r--r-- | init.d/user.in | 48 |
3 files changed, 55 insertions, 4 deletions
diff --git a/init.d/bootmisc.in b/init.d/bootmisc.in index 233dfc55..fdcd20bb 100644 --- a/init.d/bootmisc.in +++ b/init.d/bootmisc.in @@ -169,10 +169,12 @@ start() # Satisfy Linux FHS extra=/var/lib/misc if [ ! -d /run ]; then - extra="/var/run $extra" + extra="/var/run /var/run/user $extra" + elif [ ! -d /run/user ]; then + extra="/run/user $extra" fi else - extra=/var/run + extra="/var/run /var/run/user" fi for x in /var/log /tmp $extra; do if ! [ -d $x ]; then diff --git a/init.d/meson.build b/init.d/meson.build index ab4b27f4..63f9c166 100644 --- a/init.d/meson.build +++ b/init.d/meson.build @@ -10,12 +10,13 @@ init_common = [ 'netmount.in', 'osclock.in', 'root.in', + 'runsvdir.in', + 's6-svscan.in', 'savecache.in', 'swap.in', 'swclock.in', 'sysctl.in', - 'runsvdir.in', - 's6-svscan.in', + 'user.in', ] if get_option('newnet') diff --git a/init.d/user.in b/init.d/user.in new file mode 100644 index 00000000..5e2420c7 --- /dev/null +++ b/init.d/user.in @@ -0,0 +1,48 @@ +#!@SBINDIR@/openrc-run +# Copyright (c) 2017 The OpenRC Authors. +# See the Authors file at the top-level directory of this distribution and +# https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS +# +# This file is part of OpenRC. It is subject to the license terms in +# the LICENSE file found in the top-level directory of this +# distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE +# This file may not be copied, modified, propagated, or distributed +# except according to the terms contained in the LICENSE file. + +description="starts an openrc session for an user" +user="${RC_SVCNAME#*.}" + +extra_started_commands="runtime_directory" + +runtime_directory() { + service_get_value xdg_runtime_dir +} + +start_pre() { + if [ "$user" = "$RC_SVCNAME" ]; then + eerror "${RC_SVCNAME} cannot be started directly. You must create" + eerror "symbolic links to it for the users you want to start" + return 1 + fi + + if [ -z "$XDG_RUNTIME_DIR" ]; then + export XDG_RUNTIME_DIR="/run/user/$(id -u $user)" + checkpath -d -o "$user:$user" "$XDG_RUNTIME_DIR" || return 1 + fi + + service_set_value xdg_runtime_dir "$XDG_RUNTIME_DIR" +} + +start() { + ebegin "Starting user session for $user" + user_init $user start + eend $? + return 0 +} + +stop() { + ebegin "Stopping user session for $user" + user_init $user stop + eend $? + return 0 +} |