From: Darshaka Pathirana Date: Mon, 24 Apr 2017 00:07:08 +0000 (+0200) Subject: Make startx boot option work with systemd X-Git-Tag: v0.15.3~1 X-Git-Url: http://git.grml.org/?p=grml-autoconfig.git;a=commitdiff_plain;h=bbf127d0cee9df1d2e0459ef4bbd13f9d467e714 Make startx boot option work with systemd The desired behavior (with systemd and the boot option "startx") is to start the X window system automatically. This is achieved by getty@tty6.service which starts grml-x as user "grml" on vt6/tty6 and switches back to vt1/tty1 after exit. (This alone could be achieved with systemd-unit option Type=oneshot and Restart=no). But when switiching back to vt6/tty6 (again) we would like to start a zsh (for user "grml") and restart the zsh if exited. That means that grml-x should only be started on the very first run and the zsh on every other. We could not figure out how to change the systemd-unit option "Type" dynamically, so we kept it on "idle" which means that the "actual execution of the service binary is delayed until all active jobs are dispatched". That's why we need to switch to vt6/tty6 (via grml-autoconfig) iff the boot option "startx" is given. We also do not know yet how to dynamically change the behavior of the systemd-unit in a safe way. Rewriting the unit-file (override.conf) after grml-x exits (i.e. with ExecStopPost) doesn't seem to work reliably (especially when calling "systemctl daemon-reload" in it). That's why we use a state-file (/var/run/grml_startx.started) to start up grml-x on the first call and the zsh else. This also means that grml-x is started automatically when switching to vt6/tty6 manually (when no "startx" boot option was given) once and the zsh on the following calls. Closes grml/grml#1 --- diff --git a/autoconfig.functions b/autoconfig.functions index 6f774db..a942f13 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -1358,10 +1358,6 @@ config_stats() { # {{{ start X window system via grml-x config_x_startup(){ - if $SYSTEMD ; then - ewarn "The startx boot option isn't yet supported via systemd, sorry." ; eend 0 - return - fi # make sure we start X only if startx is used *before* a nostartx option # so it's possible to disable automatic X startup using nostart @@ -1376,17 +1372,28 @@ if checkbootparam 'startx' && ! echo "$CMDLINE" | grep -q 'startx.*nostartx' ; t fi einfo "Setting up and invoking grml-x ${WINDOWMANAGER}. Just exit X windows system to get full featured consoles." config_userlocal - cat>|/etc/init.d/xstartup<|/etc/init.d/startx<|/etc/init.d/startx</dev/tty6 2>\&1 /dev/tty6 2>\&1 /dev/tty6 2>&1 < /dev/tty6' >> /etc/inittab + echo '6:2345:respawn:/bin/zsh --login -c "/etc/init.d/startx ; /usr/share/grml-scripts/run-welcome" >/dev/tty6 2>&1 < /dev/tty6' >> /etc/inittab fi /sbin/telinit q ; eend $?