well, good question.
what's a scandir?
A scandir is a directory where s6-svscan program monitors services. In your system the main scandir is /run/66/scandir/0.
Try this, open htop and look for the pid 1. you will see this:
s6-svscan -st 0 -- /run/66/scandir/0
when you start your machine the init file is launched, prepared some stuff and run the s6-svscan program at the end of file. From that point the s6-svscan program should NEVER die.
So, now when you do a 66-scandir -c command your create a scandir, that's mean that the directory itself is created more some files (take a look at /run/66/scandir/0/.s6-svscan directory). Well now the scandir is ready to accept a s6-svscan program running into it. to do so you need to start the scandir by the 66-scandir -u command. i will comes later on this command
Now when you do a 66-enable dbus-user you enable the dbus-user service on the current tree (previously created by a 66-tree command). Enabling a service doesn't mean running a service, so in this case you don't need to have an already running scandir.
if you do 66-scandir -c as normal user you will see a new directory on your system at /run/66/scandir/<uid> where uid is the uid of the user e.g /run/66/scandir/1000.
if you do the same command with an another user you will see /run/66/scandir/1001 on your system etc etc.
So, a service cannot be started (meaning supervised) without a running scandir. To start the scandir you do 66-scandir -u (meaning start the s6-svscan program and monitors the directory /run/66/scandir/1000 in your example). As said before at this point the s6-svscan should never die. So yes the s6-svscan take the control of the terminal and this is the expected behaviour. "Ok wait that's mean that i need to have constantly the terminal opened?". Depends of your needs :p. Kinding you a little.
to detach the scandir from the terminal
$ (66-scandir -u &)&
now the scandir is running and detached from the terminal. look at the /etc/skel of the JWM templates you will see a file named .scandir containing this
# !/usr/bin/execlineb -P
# emptyenv -p
s6-setsid -qb --
umask 022
66-scandir -v3 -cu
this little script create and run a scandir, now take a look at the .xinitrc file
# !/usr/bin/sh
exec 1>$HOME/xinit.log
exec 2>&1
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
[ -x "$f" ] && . "$f"
done
unset f
fi
(.scandir &) &
sleep 01
66-all -v3 up
exec ck-launch-session jwm
When you do "startx" the .xinitrc file it's executed and so the scandir is created and started then all tree enabled will be launched.
This is one of the manner to start a scandir for an user, but you can make something like this:
create a service named /etc/66/sysadmin/service/scandir@ containing this
[main]
@ type = longrun
@ name = @ I-scandir
@ description = "prepare and start a scandir for @ I"
@ user = ( user )
[start]
@ build = auto
@ runas = @ I
@ execute = ( 66-scandir -cu @ I)
now as root user do 66-enable scandir@ <myuser>. At this point if your tree where you add this service is enabled, everytime that your machine boot the scandir for the given user will be started.
Now you have a generic service to create a scandir for any user, simply do 66-enable scandir@ <my_another_user> etc etc
Do you see the possiblilities? i let you the time to studdy :p
What is the correct way to handle this?
Are there more necessary steps to create a user from ground up other than creating the users tree and getting its scandir up and running?
# 1 i think the above explanation answer you
# 2 nope, a tree and a scandir nothing more.
All commands and behaviour expected for root are the same for an user, no differences