Fresh system after graphical install hangs on "Started Display Manager"

I’m new to nix os, coming from arch linux. I’ve been trying to install it on an old nx7400 laptop, but so far I haven’t managed to start any graphical environment. First I tried the minimal install, but it failed to launch the display manager with some very undescriptive errors, so I tried doing it from a graphical installer instead. It installed without issues, but after launch it just prints:

         Starting Display Manager...
[  OK  ] Started Display Manager.
         Starting Display Manager...
[  OK  ] Started Display Manager.

and nothing is being shown. I’ve no idea why this happens. Could anybody help me with it?

I have disabled auto login, and I’m being greeted with a blinking cursor on a black background. The display manager throws a different error now (in the systemd journal):


Sorry for making photos of the screen, but there’s just no way I’ll rewrite all that.

Can you share the configuration.nix you’re trying to install?

Yes, here you go.

configuration.nix:

# Edit this configuration file to define what should be installed on
# your system.  Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).

{ config, pkgs, ... }:

{
  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
    ];

  # Bootloader.
  boot.loader.grub.enable = true;
  boot.loader.grub.device = "/dev/sda";
  boot.loader.grub.useOSProber = true;

  # Setup keyfile
  boot.initrd.secrets = {
    "/crypto_keyfile.bin" = null;
  };

  boot.loader.grub.enableCryptodisk=true;

  boot.initrd.luks.devices."luks-da407db9-be5e-4539-99ed-7dc093368b0e".keyFile = "/crypto_keyfile.bin";
  networking.hostName = "wojtek-nixos"; # Define your hostname.

  # Enable networking
  networking.networkmanager.enable = true;

  # Set your time zone.
  time.timeZone = "Europe/Warsaw";

  # Select internationalisation properties.
  i18n.defaultLocale = "en_US.UTF-8";

  i18n.extraLocaleSettings = {
    LC_ADDRESS = "en_US.UTF-8";
    LC_IDENTIFICATION = "en_US.UTF-8";
    LC_MEASUREMENT = "en_US.UTF-8";
    LC_MONETARY = "en_US.UTF-8";
    LC_NAME = "en_US.UTF-8";
    LC_NUMERIC = "en_US.UTF-8";
    LC_PAPER = "en_US.UTF-8";
    LC_TELEPHONE = "en_US.UTF-8";
    LC_TIME = "en_US.UTF-8";
  };

  # Enable the X11 windowing system.
  services.xserver.enable = true;

  # Enable the XFCE Desktop Environment.
  services.xserver.displayManager.lightdm.enable = true;
  services.xserver.desktopManager.xfce.enable = true;

  # Configure keymap in X11
  services.xserver = {
    layout = "pl";
    xkbVariant = "";
  };

  # Configure console keymap
  console.keyMap = "pl2";

  # Enable CUPS to print documents.
  services.printing.enable = true;

  # Enable sound with pipewire.
  sound.enable = true;
  hardware.pulseaudio.enable = false;
  security.rtkit.enable = true;
  services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
    # If you want to use JACK applications, uncomment this
    #jack.enable = true;

    # use the example session manager (no others are packaged yet so this is enabled by default,
    # no need to redefine it in your config for now)
    #media-session.enable = true;
  };

  # Enable touchpad support (enabled default in most desktopManager).
  # services.xserver.libinput.enable = true;

  # Define a user account. Don't forget to set a password with ‘passwd’.
  users.users.wojtek = {
    isNormalUser = true;
    extraGroups = [ "networkmanager" "wheel" ];
  };

  # Enable automatic login for the user.
  #services.xserver.displayManager.autoLogin.enable = true;
  #services.xserver.displayManager.autoLogin.user = "wojtek";

  # Allow unfree packages
  nixpkgs.config.allowUnfree = true;

  # List packages installed in system profile. To search, run:
  # $ nix search wget
  environment.systemPackages = with pkgs; [
    neovim
    ungoogled-chromium
    wget
  ];

  # Some programs need SUID wrappers, can be configured further or are
  # started in user sessions.
  # programs.mtr.enable = true;
  # programs.gnupg.agent = {
  #   enable = true;
  #   enableSSHSupport = true;
  # };

  # List services that you want to enable:

  # Enable the OpenSSH daemon.
  # services.openssh.enable = true;

  # Open ports in the firewall.
  # networking.firewall.allowedTCPPorts = [ ... ];
  # networking.firewall.allowedUDPPorts = [ ... ];
  # Or disable the firewall altogether.
  # networking.firewall.enable = false;

  # This value determines the NixOS release from which the default
  # settings for stateful data, like file locations and database versions
  # on your system were taken. It‘s perfectly fine and recommended to leave
  # this value at the release version of the first install of this system.
  # Before changing this value read the documentation for this option
  # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
  system.stateVersion = "23.11"; # Did you read the comment?

}

hardware_configuration.nix:

# Do not modify this file!  It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations.  Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:

{
  imports =
    [ (modulesPath + "/installer/scan/not-detected.nix")
    ];

  boot.initrd.availableKernelModules = [ "uhci_hcd" "ehci_pci" "ata_piix" "firewire_ohci" "usb_storage" "sd_mod" "sr_mod" ];
  boot.initrd.kernelModules = [ ];
  boot.kernelModules = [ ];
  boot.extraModulePackages = [ ];

  fileSystems."/" =
    { device = "/dev/disk/by-uuid/3343a4b6-4274-4e47-9246-1ab4656fc144";
      fsType = "ext4";
    };

  boot.initrd.luks.devices."luks-da407db9-be5e-4539-99ed-7dc093368b0e".device = "/dev/disk/by-uuid/da407db9-be5e-4539-99ed-7dc093368b0e";

  swapDevices = [ ];

  # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
  # (the default) this is the recommended approach. When using systemd-networkd it's
  # still possible to use this option, but it's recommended to use it in conjunction
  # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
  networking.useDHCP = lib.mkDefault true;
  # networking.interfaces.eth0.useDHCP = lib.mkDefault true;
  # networking.interfaces.wlp16s0.useDHCP = lib.mkDefault true;

  nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
  hardware.enableRedistributableFirmware = true;
  hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

I’m guessing it’s some hardware incompatibiliy.

Maybe it’s related to display-manager.service fails to start #2 · Issue #74736 · NixOS/nixpkgs · GitHub? The 5.10 kernel version is quite old though.

Okay, maybe not - the solution with boot.kernelPackages = pkgs.linuxPackages_5_10; doesn’t work. Stupid shit.

It would surely help to get some info on the error besides that whatever process is behind the display-manager service exited with code 1.

I’ve reinstalled the system, and now the issue with display-manager not starting occurs even with auto-login (basically the state of the issue in Fresh system after graphical install hangs on "Started Display Manager" - #2 by Blay).

Actually, it’s showing different messages every boot now.


And sometimes it’s just a black cursor. It’s probably just some irrelevent timing shit though.

This entire issue is very frustrating.

I think I was really confused at the beggining, the core of the issue was that display manager doesn’t want to start throughout this whole topic.

Okay, I’ve figured it out after looking at the x logs.

It’s Xorg does not work out of the box on Intel GMA 3150 graphics · Issue #75014 · NixOS/nixpkgs · GitHub (fixed by adding services.xserver.videoDrivers = [ "intel" ];).

Took me 5 days to find the solution :neutral_face: