Why is the state of graphical.target shown as indirect and disabled

In EOS and Arch the graphical.target is the default target that is used to boot the system.

$  systemctl get-default
graphical.target
$ 
$  systemctl list-units --type target
  UNIT                  LOAD   ACTIVE SUB    DESCRIPTION                       
  basic.target          loaded active active Basic System
  bluetooth.target      loaded active active Bluetooth Support
  cryptsetup.target     loaded active active Local Encrypted Volumes
  getty.target          loaded active active Login Prompts
  graphical.target      loaded active active Graphical Interface

However when we see the list of units in another way the status of graphical.target is shown differently. It is listed as indirect and disabled. Please see the output given below. If it is compared to what we see when the command systemctl list-units --type target is executed, as shown above, there is a difference.

$  systemctl list-unit-files --type target
UNIT FILE                     STATE    PRESET  
basic.target                  static   -       
blockdev@.target              static   -       
bluetooth.target              static   -       
boot-complete.target          static   -       
cryptsetup-pre.target         static   -       
cryptsetup.target             static   -       
ctrl-alt-del.target           alias    -       
default.target                alias    -       
emergency.target              static   -       
exit.target                   disabled disabled
factory-reset-now.target      static   -       
factory-reset.target          static   -       
final.target                  static   -       
first-boot-complete.target    static   -       
getty-pre.target              static   -       
getty.target                  static   -       
graphical.target              indirect disabled
halt.target                   disabled disabled

So the question is why is the state of graphical.target shown as indirect and disabled? Is this something to be looked at?

For brevity the output of the commands have been truncated.

It is normal for graphical.target to be indirect or static.

This is because it isn’t enabled. Instead, default.target is a symlink to graphical.target and that is how it is started.

So the default.target is the same as the graphical.target?

What about multi-user.target? What is it for and when is it used?

The default.target is a symlink to whatever the default is for your system. For most desktop systems, the default will be graphical.target

It is for having a system with everything running to support multiple users but without a GUI. It is a common default target for headless servers.

So default.target is an alias, to which the system boots into while graphical.target is disabled. Why is graphical.target disabled? Should it not be enabled when it is the active and default value.

Yes, that is how it works.

It isn’t enabled because it is activated by something else.

Honestly, I am not sure that enabling a static unit would even do anything. They are intended to be activated by another unit.