I have thought that
/usr/bin/startx script is used to start the X server but it looks like it is not true. Which process or script starts the X server? The X server has to be started before lightdm greeter is visible but when exactly?
/etc/init.d/lightdm starts the Xserver. Lightdm gets started first then it starts the Xserver. The parent process of the Xserver (Xorg) is lightdm (PID 25600 as shown in example below). You can see this by executing:
ps -ef | grep lightdm. root 25600 1 0 00:50 ? 00:00:00 /usr/sbin/lightdm root 25608 25600 2 00:50 tty7 00:00:35 /usr/lib/xorg/Xorg -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch root 25686 25600 0 00:50 ? 00:00:00 lightdm --session-child 12 19
Running the following commands will stop and start lightdm and Xserver accordingly:
sudo /etc/init.d/lightdm stop sudo /etc/init.d/lightdm start
Boot into a text screen and use
If your Ubuntu system boots into a text screen, for example a minimal system or a server system, you can use startx to start xserver (and a simple window manager like openbox or fluxbox or a desktop environment like gnome, kde, lxde, ... xfce).
For example, it is enough to start and use a simple graphical desktop (in a minimal or server system) after three program packages are installed,
sudo apt update sudo apt install fluxbox xinit xterm
with the command
Boot directly into a graphical desktop
If you have an Ubuntu desktop system (standard Ubuntu or one of the community flavours Kubuntu, Lubuntu, ... Xubuntu), you need not use startx, the graphical desktop environment is started automatically (and you need not run
startx). If I understand correctly, it is started via
systemd. See for example the following links,
Switch between text mode and graphic mode
Switching between text mode and graphics mode is described in the accepted answer of the following link
To boot Ubuntu 16.04 Desktop without X one time, add systemd.unit=multi-user.target to the linux command line in GRUB.
To make this the default, use
sudo systemctl set-default multi-user.target
To return to default booting into X, use
sudo systemctl set-default graphical.target
To see the current default target,
sudo systemctl get-default
You can read about the boot up process here: http://manpages.ubuntu.com/manpages/xenial/man7/boot.7.html
Although the manual does not mention Xserver (or X11), the init process is responsible for starting the Xserver.