Dracut module for external (thunderbolt dock) display?

I did a standard encrypted install of Cassini_Nova with KDE/Wayland on a laptop.

This laptop has a TB4 port which I use to connect to everything at my desk.
Unfortunately, my external/docked monitor is not detected / used for the initial prompt user for password phase of boot. Only after the LUCKS partition is mounted and the “main” kernel booted does my external display get detected and used.

Is there a dracut module that I should be building into my initrd so that the external display is detected or is there more to it that i’m missing?

The built in display functions fine; it’s how I usually enter the decryption password but when I am already docked / lid closed and I do a reboot I have to re-open the lid and enter the password.

So this had me wondering if all the drivers are present, i’m just missing some configuration directive along the lines of “mirror to all detected displays” versus the “only use built in display” configuration that’s in effect now…

Edit: It’s a very recent intel based laptop so the GPU is also intel. Thankfully no nvidia related headaches!

IIUC this is a HW controlled behavior.
AFAIK, the encryption password prompt is required to read the initrd image, which includes any system modules, or other configuration. Before reading the image, even if you add a module to initrd, it will be read after decryption. I am not sure if this can be included in the .efi executable. Maybe an expert (or Archwiki) could give a better opinion.
I suppose that the Laptop firmware (UEFI/BIOS) might have a setting to disable internal and enable external only, when the lid is closed on boot. If you can achieve that, I am not sure it will be without issues after booting the OS, but you can try. It’s a vendor’s thing, so… :person_shrugging:

You might be right about this being a hardware issue…
This laptop is also a system76 laptop and these threads are asking the same thing I am:

I didn’t have any issue w/ encrypted ZFS on root using ubuntu w/ this dock … but that was also on a thinkpad. I just assumed it was something about how ubuntu was booting up to the password prompt as i could have sworn that external display worked on this system76 laptop when I moved the SSD over from the thinkpad to here but I may be mis-remembering that.

I just double checked and … yep, there’s just one! I was under the impression that there was a slim “just enough to ask for a password and kexec() into the decrypted kernel” that was booted first. Does not appear to be that way for endeavorOS; the kernel/initrd are both on /efi which is not encrypted the way / is.

You are talking about the Unified kernel image, which AFAIK, it is not created automatically in EnOS (yet?).

If you are using systemd-boot, then yes that is the way it works. The decryption is handled by the boot image. In that case, you are probably correct, you need to figure out how to get the appropriate module or driver into the image. That is easy to do, if you can figure out what it is you need to add.

1 Like

Yep. I did a fresh install just after Cassini/Nova was released so this is a dracut/systemd-boot install.

I’m struggling to figure out what module/driver I need to add, though.
It’s an intel GPU:

[root@lemurpro ~]# lspci  -k | grep VGA
00:02.0 VGA compatible controller: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] (rev 01)
        DeviceName: VGA compatible controller
[root@lemurpro ~]# lspci -v -s 00:02.0
00:02.0 VGA compatible controller: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] (rev 01) (prog-if 00 [VGA controller])
        DeviceName: VGA compatible controller
        Subsystem: CLEVO/KAPOK Computer Device 14a1
        Flags: bus master, fast devsel, latency 0, IRQ 210, IOMMU group 7
        Memory at 81000000 (64-bit, non-prefetchable) [size=16M]
        Memory at 90000000 (64-bit, prefetchable) [size=256M]
        I/O ports at 1000 [size=64]
        Expansion ROM at 000c0000 [virtual] [disabled] [size=128K]
        Capabilities: [40] Vendor Specific Information: Len=0c <?>
        Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
        Capabilities: [ac] MSI: Enable+ Count=1/1 Maskable+ 64bit-
        Capabilities: [d0] Power Management version 2
        Capabilities: [100] Process Address Space ID (PASID)
        Capabilities: [200] Address Translation Service (ATS)
        Capabilities: [300] Page Request Interface (PRI)
        Capabilities: [320] Single Root I/O Virtualization (SR-IOV)
        Kernel driver in use: i915
        Kernel modules: i915

But there is no i915 module for dracut:

[root@lemurpro ~]# ls -l /usr/lib/dracut/modules.d/
total 476
drwxr-xr-x 2 root root 4096 Mar 10 10:52 00bash
drwxr-xr-x 2 root root 4096 Mar 10 10:52 00dash
drwxr-xr-x 2 root root 4096 Mar 10 10:52 00mksh
drwxr-xr-x 2 root root 4096 Mar 10 10:52 00systemd
drwxr-xr-x 2 root root 4096 Mar 10 10:52 00systemd-network-management
drwxr-xr-x 2 root root 4096 Mar 10 10:52 00warpclock
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01fips
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-ac-power
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-ask-password
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-coredump
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-hostnamed
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-initrd
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-integritysetup
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-journald
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-ldconfig
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-modules-load
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-networkd
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-repart
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-resolved
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-rfkill
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-sysctl
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-sysext
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-sysusers
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-timedated
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-timesyncd
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-tmpfiles
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-udevd
drwxr-xr-x 2 root root 4096 Mar 10 10:52 01systemd-veritysetup
drwxr-xr-x 2 root root 4096 Mar 10 10:52 02caps
drwxr-xr-x 2 root root 4096 Mar 10 10:52 03modsign
drwxr-xr-x 2 root root 4096 Mar 10 10:52 03rescue
drwxr-xr-x 2 root root 4096 Mar 10 10:52 04watchdog
drwxr-xr-x 2 root root 4096 Mar 10 10:52 04watchdog-modules
drwxr-xr-x 2 root root 4096 Mar 10 10:52 05busybox
drwxr-xr-x 2 root root 4096 Mar 10 10:52 06dbus-broker
drwxr-xr-x 2 root root 4096 Mar 10 10:52 06dbus-daemon
drwxr-xr-x 2 root root 4096 Mar 10 10:52 06rngd
drwxr-xr-x 2 root root 4096 Mar 10 10:52 09dbus
drwxr-xr-x 2 root root 4096 Mar 10 10:52 10i18n
drwxr-xr-x 2 root root 4096 Mar 10 10:52 30convertfs
drwxr-xr-x 2 root root 4096 Mar 10 10:52 35network-legacy
drwxr-xr-x 2 root root 4096 Mar 10 10:52 35network-manager
drwxr-xr-x 2 root root 4096 Mar 10 10:52 35network-wicked
drwxr-xr-x 2 root root 4096 Mar 10 10:52 40network
drwxr-xr-x 2 root root 4096 Mar 10 10:52 45ifcfg
drwxr-xr-x 2 root root 4096 Mar 10 10:52 45url-lib
drwxr-xr-x 2 root root 4096 Mar 10 10:52 50drm
drwxr-xr-x 2 root root 4096 Mar 10 10:52 50gensplash
drwxr-xr-x 2 root root 4096 Mar 10 10:52 50plymouth
drwxr-xr-x 2 root root 4096 Mar 10 10:52 62bluetooth
drwxr-xr-x 2 root root 4096 Mar 10 10:52 80cms
drwxr-xr-x 2 root root 4096 Mar 10 10:52 80lvmmerge
drwxr-xr-x 2 root root 4096 Mar 10 10:52 81cio_ignore
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90btrfs
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90crypt
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90dm
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90dmraid
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90dmsquash-live
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90dmsquash-live-ntfs
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90kernel-modules
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90kernel-modules-extra
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90kernel-network-modules
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90livenet
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90lvm
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90mdraid
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90multipath
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90nvdimm
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90ppcmac
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90qemu
drwxr-xr-x 2 root root 4096 Mar 10 10:52 90qemu-net
drwxr-xr-x 2 root root 4096 Mar 10 10:52 91crypt-gpg
drwxr-xr-x 2 root root 4096 Mar 10 10:52 91crypt-loop
drwxr-xr-x 2 root root 4096 Mar 10 10:52 91fido2
drwxr-xr-x 2 root root 4096 Mar 10 10:52 91pcsc
drwxr-xr-x 2 root root 4096 Mar 10 10:52 91pkcs11
drwxr-xr-x 2 root root 4096 Mar 10 10:52 91tpm2-tss
drwxr-xr-x 2 root root 4096 Mar 10 10:52 91zipl
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95cifs
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95dasd
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95dasd_mod
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95dasd_rules
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95dcssblk
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95debug
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95fcoe
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95fcoe-uefi
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95fstab-sys
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95iscsi
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95lunmask
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95nbd
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95nfs
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95nvmf
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95qeth_rules
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95resume
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95rootfs-block
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95ssh-client
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95terminfo
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95udev-rules
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95virtfs
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95zfcp
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95zfcp_rules
drwxr-xr-x 2 root root 4096 Mar 10 10:52 95znet
drwxr-xr-x 2 root root 4096 Mar 10 10:52 96securityfs
drwxr-xr-x 2 root root 4096 Mar 10 10:52 97biosdevname
drwxr-xr-x 2 root root 4096 Mar 10 10:52 97masterkey
drwxr-xr-x 2 root root 4096 Mar 10 10:52 98dracut-systemd
drwxr-xr-x 2 root root 4096 Mar 10 10:52 98ecryptfs
drwxr-xr-x 2 root root 4096 Mar 10 10:52 98integrity
drwxr-xr-x 2 root root 4096 Mar 16 21:23 98ostree
drwxr-xr-x 2 root root 4096 Mar 10 10:52 98pollcdrom
drwxr-xr-x 2 root root 4096 Mar 10 10:52 98selinux
drwxr-xr-x 2 root root 4096 Mar 10 10:52 98syslog
drwxr-xr-x 2 root root 4096 Mar 10 10:52 98usrmount
drwxr-xr-x 2 root root 4096 Mar 10 10:52 99base
drwxr-xr-x 2 root root 4096 Mar 10 10:52 99fs-lib
drwxr-xr-x 2 root root 4096 Mar 10 10:52 99img-lib
drwxr-xr-x 2 root root 4096 Mar 10 10:52 99memstrack
drwxr-xr-x 2 root root 4096 Mar 10 10:52 99shutdown
drwxr-xr-x 2 root root 4096 Mar 10 10:52 99squash
drwxr-xr-x 2 root root 4096 Mar 10 10:52 99uefi-lib

You can add any kernel module by adding add_drivers+= in the config. In this case, I think you would be better off forcing it to early load with:

force_drivers+=" i915 "

The run sudo dracut-rebuild

That being said, I wonder if that is what you need for a thunderbolt display…

It easy enough to test.

Especially since there’s like 3 different ways to send video over a USB-C cable. I’ll see what happens w/ the i915 driver loaded early and report back in the next day or so when I find a convenient time to reboot.

1 Like

That was enough!

Built new initrd and ran UpdateInTerminal and then shutdown. Came back to desk and - with the lid closed - plugged in to the dock and hit the power button. Few seconds later, external display had the password prompt.

I was not expecting it to be that simple but I’m grateful that’s all it was.

1 Like

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.