aboutsummaryrefslogtreecommitdiff
path: root/init.d
diff options
context:
space:
mode:
authorAnna (navi) Figueiredo Gomes <navi@vlhl.dev>2024-07-12 00:51:12 +0200
committerAnna (navi) Figueiredo Gomes <navi@vlhl.dev>2024-07-19 20:40:28 +0200
commitfd961d2ea0eea2cc60f4af1aca6b6e7711d43995 (patch)
treefc53ad7bf4d46a3b72e151b79e8433ff4d565514 /init.d
parentc34fcd63f05044f9034b26c52f19c91e04668da7 (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.in6
-rw-r--r--init.d/meson.build5
-rw-r--r--init.d/user.in48
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
+}