Bluetooth at login prompt not working

I can connect to Bluetooth once I log in. But I need Bluetooth (keyboard) to login. My Bluetooth adaptor is plugged into my PCs front USB port. I have the following in my config:

Powers on Bluetooth at boot.

hardware.bluetooth.powerOnBoot = true;

Enables Bluetooth

hardware.bluetooth.enable = true;

I am using KDE Plasma, which means the login manager is SDDM.

Well, I am clueless. Because this should have worked:

# Load Bluetooth-related kernel modules at boot
  boot.kernelModules = [ "usb" "xhci_hcd" "btusb" "bluetooth" ];

Followed by:

 # ========================
  # 📶 Bluetooth Configuration
  # ========================

  # Enable Bluetooth support
  hardware.bluetooth.enable = true;

  # Ensure Bluetooth is powered on when the system starts
  hardware.bluetooth.powerOnBoot = true;

  # Enable the Bluetooth service (systemd bluetooth service)
  systemd.services.bluetooth = {
    enable = true;
    description = "Bluetooth service";
    wantedBy = [ "basic.target" ];  # Start Bluetooth very early in the boot process
    after = [ "sysinit.target" ];   # Bluetooth should be started after the system initialization
    before = [ "network.target" "multi-user.target" "graphical.target" ];  # Start Bluetooth before networking, multi-user, and graphical services
  };

My computer is an old Dell Precision T3610 and in the front of that case, I have a USB Bluetooth Adaptor. I believe the USB Bluetooth adaptor uses Realtek chipset. The actual keyboard is an Apple Bluetooth keyboard. It is model A1843 is that makes a difference.

I have no problem using my keyboard once logged in. The issue is logging in after a reboot (when greeted with SDDM). To login, I just connect a wire, but I would like to be wireless the whole time if possible.

try these settings in your config and let me know

  hardware.bluetooth = {
    enable = true;
    powerOnBoot = true;
    settings = {
      General = {
        Name = "Foo";
        ControllerMode = "dual";
        FastConnectable = "true";
        Experimental = "true";
      };
      Policy = { AutoEnable = "true"; };
      # 1 is enabled and is enabled by default
      LE = { EnableAdvMonInterleaveScan = "1"; };
    };
  };
1 Like

This worked.

# Load Bluetooth-related kernel modules at boot
  boot.kernelModules = [ "usb" "xhci_hcd" "btusb" "bluetooth" ];

Followed by:

  # ========================
  # 📶 Bluetooth Configuration
  # ========================

  hardware.bluetooth = {
    enable = true;
    powerOnBoot = true;
    settings = {
      General = {
        Name = "tempest";  # Used my pc's name
        ControllerMode = "dual";
        FastConnectable = "true";
        Experimental = "true";
      };
      Policy = { AutoEnable = "true"; };
      # 1 is enabled and is enabled by default
      LE = { EnableAdvMonInterleaveScan = "1"; };
    };
  };

  # Enable the Bluetooth service (systemd bluetooth service)
  systemd.services.bluetooth = {
    enable = true;
    description = "Bluetooth service";
    wantedBy = [ "basic.target" ];  # Start Bluetooth very early in the boot process
    after = [ "sysinit.target" ];   # Bluetooth should be started after the system initialization
    before = [ "network.target" "multi-user.target" "graphical.target" ];  # Start Bluetooth before networking, multi-user, and graphical services
  };

I have not tested it without my little changes that make sure Bluetooth loads first. But seeing how persistent SDDM in the past was too loading, and since it works, I’ll use it like this (as above).

I am marking your post as the solution. – Thank you!

I think the magic is AutoEnable but can’t be sure

If it were, it would have worked on a previous configuration I had tried earlier (not shared here). Now, I’m curious. lol

Oh well, it works. That is what matters. Thanks for your help.