Версия диспетчера отображения (проще)
Обычно менеджер дисплеев должен показывать экран входа в систему и запускать сеанс пользователя. Если бы у вас был один, это был бы путь наименьшего сопротивления, чтобы настроить его на аутологин. Это широко используемое и, вероятно, хорошо протестированное и поддерживаемое решение. Вам нужно установить его на 1) autologin и 2) использовать предпочитаемый вами сеанс, но оба обычно поддерживаются обычными менеджерами отображения, поддерживаемыми вашим linux (lightdm, xdm и т.д.).
В Ubuntu 16.04 (не на сервере) у меня есть следующее в /etc/lightdm/lightdm.conf
[Seat:*]
autologin-guest=false
autologin-user=xyz
autologin-user-timeout=0
Вам нужно будет установить и, возможно, включить lightdm
apt-get install lightdm
Lightdm - менеджер дисплеев Ubuntu по умолчанию. Он не устанавливается по умолчанию в Ubuntu Server Edition, и вы будете устанавливать несколько пакетов, так что если вы хотите избежать их, потребуется более сложный ручной способ.
Способы настройки графического входа в систему на сервере Ubuntu лучше описаны здесь https://askubuntu.com/questions/53822/how-do-you-run-ubuntu-server-with-a-gui#788193, после чего вы можете настроить автологин, если хотите.
Вы можете выбрать тип сеанса с префиксом (openbox), установив для /home/username/.dmrc
что-то вроде
[Desktop]
Session=openbox
Ручной (startx)
Я не знаю, что именно требуется для запуска x-сессии startx при загрузке, но я бы предложил разбить проблему на пошаговый процесс:
вы говорите, что startx работает как root. Было бы неплохо убедиться, что вы можете войти в систему как пользователь root на консоли и начать сеанс x с:
root@xyz # startx
Убедитесь, что вы можете начать сеанс X, войдя в систему под вашим привилегированным пользователем.
myuser@xyz $ startx
Убедитесь, что вы можете запустить сеанс X как привилегированный пользователь, но, войдя в систему как пользователь root, опираясь на предыдущую команду:
а) Используйте что-то вроде:
root@xyz # su -l myuser -c startx
введите команду, если вам нужно несколько аргументов:
root@xyz # su -l myuser -c "startx arg1 arg2 .."
б) Вы можете пропустить этот шаг, если установите пользователя в системном блоке.
Сделай автозапуск.
а) Добавьте команду (3a) в /etc/rc.local
и перезагрузите компьютер.
б) Используйте системный модуль, как вы описали, с командой, установленной в соответствии с 2/3. Чтобы проверить, вы можете использовать что-то вроде
root@xyz # systemctl stop autologin # make sure to reset service
root@xyz # systemctl daemon-reload # don't know if needed
root@xyz # systemctl start autologin
Как только это сработает, вам может понадобиться включить автозапуск или все, что нужно для systemd (не эксперт).
root@xyz # systemctl enable autologin