aboutsummaryrefslogtreecommitdiff
path: root/init.d/user.in
diff options
context:
space:
mode:
Diffstat (limited to 'init.d/user.in')
-rw-r--r--init.d/user.in48
1 files changed, 48 insertions, 0 deletions
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
+}