Skip to content

Installed files

KAIT2EN keeps Fedora's vanilla kernel and installs T2 hardware support as a separate layer. The changes we are doing to your system are documented here to provide transparency to users and devs.

Project checkout and updater

The guided installer creates a clean checkout of the main branch at:

/usr/local/src/KaiT2en-Fedora

kait2en-install fast-forwards this checkout and runs scripts/fedora/install.sh. It refuses to overwrite local changes or use a checkout with an unexpected Git remote. Its persistent files are:

/usr/local/bin/kait2en-install
/var/lib/kait2en-installer/state
~/.local/state/kait2en/install.log

Kernel modules

The installer copies each module source to /usr/src/<name>-<version>/, registers it with DKMS and builds it for the running Fedora kernel. DKMS keeps its build state below /var/lib/dkms/ and rebuilds the modules for later kernel updates. modinfo -n <module> prints the installed kernel object path.

DKMS source Installed module Purpose
t2bce_dma t2bce_dma Shared DMA queue engine for T2 BCE clients
t2bce_core t2bce_core T2 bridge PCI device, mailbox, power management and transport
t2bce_vhci t2bce_vhci Virtual USB host for internal T2 input devices
t2bce_audio t2bce_audio Apple T2 audio driver
t2smc t2smc Fan, temperature, charge-limit and RTC access through hwmon
t2bdrm t2bdrm Touch Bar DRM display device
t2touchbar t2hid, t2touchbar_bl, t2touchbar_kbd Internal HID quirks, Touch Bar backlight and keyboard mode
hid_t2magicmouse hid_t2magicmouse Internal trackpad support with the required Asahi patches
t2mfi_fastcharge t2mfi_fastcharge Fast-charge control for Apple MFi devices
t2gmux t2gmux GMUX handling on dual-GPU Macs
t2thunderbolt t2thunderbolt Thunderbolt power-management ordering and T2 PCI quirks
t2smp t2smp Defers secondary CPU hotplug to avoid firmware-sensitive resume delays

The installer also writes /etc/kernel/install.d/39-kait2en-dkms-cleanup.install. The hook removes stale DKMS build state before a kernel installation is retried.

Kernel arguments

install-kernel-args.sh updates every installed kernel entry with grubby --update-kernel=ALL. Inspect the effective arguments with:

grubby --info=DEFAULT

KAIT2EN adds these arguments to every installed kernel through grubby:

intel_iommu=on
iommu=pt
pm_async=off
mem_sleep_default=deep
initcall_blacklist=cmos_init,magicmouse_driver_init
module_blacklist=acpi_tad,applesmc,macsmc,hid_apple,hid_appletb_bl,hid_appletb_kbd,hid_magicmouse,appletbdrm,apple_bce,apple_mfi_fastcharge,apple_gmux

On MacBook Pro models where PCI discovery finds an AMD display device, the installer additionally enables GuC submission and HuC firmware loading for the Intel GPU:

i915.enable_guc=2

KAIT2EN does not install a custom kernel or a separate GRUB configuration file.

Audio configuration

The ALSA UCM profiles define the T2 speaker, microphone and headset paths:

/usr/share/alsa/ucm2/AppleT2/HiFi-x2.conf
/usr/share/alsa/ucm2/AppleT2/HiFi-x4.conf
/usr/share/alsa/ucm2/AppleT2/HiFi-x6.conf
/usr/share/alsa/ucm2/conf.d/AppleT2x2/AppleT2x2.conf
/usr/share/alsa/ucm2/conf.d/AppleT2x4/AppleT2x4.conf
/usr/share/alsa/ucm2/conf.d/AppleT2x6/AppleT2x6.conf

The installer deploys model-specific FIR filters and a generated WirePlumber rule on these models: MacBookAir8,1, MacBookAir8,2, MacBookAir9,1, MacBookPro15,1, MacBookPro15,4, MacBookPro16,1, MacBookPro16,2, MacBookPro16,3 and MacBookPro16,4.

/usr/share/kait2en/audio-dsp/<profile>/
/etc/wireplumber/wireplumber.conf.d/51-kait2en-t2-dsp.conf

Every other model exits the DSP step without creating these files. See Audio DSP for the supported-model table, audio behavior and diagnostics.

System configuration and services

Path Purpose
/etc/systemd/system/kait2en-suspend.service Calls the suspend helper before sleep.target and again after resume
/usr/local/libexec/kait2en/kait2en-suspend.sh Handles the BCM4377 suspend workaround described below
/etc/udev/rules.d/90-kait2en-t2-network.rules Renames the internal T2 debug interface to t2_ncm and excludes it from NetworkManager
/etc/systemd/system/kait2en-t2-ncm-down.service Starts when t2_ncm appears
/usr/local/libexec/kait2en/kait2en-t2-ncm-down.sh Keeps the internal debug interface down
/usr/share/plymouth/themes/kait2en/ Fedora's spinner theme with the KAIT2EN watermark
/boot/initramfs-<running-kernel>.img Rebuilt by Dracut after modules and ACPI handling are complete

kait2en-suspend.service is enabled on every installation. Before suspend, it checks for a Broadcom PCI device with vendor ID 0x14e4 and device ID 0x5f69, 0x5f71, 0x5f72 or 0x5fa0. If one is present, it unloads brcmfmac_wcc, brcmfmac and hci_bcm4377 in that order. After resume it loads brcmfmac and brcmfmac_wcc, waits five seconds, then loads hci_bcm4377.

If the controller is absent, the service logs that the fix is not needed and does not unload a module. State files for modules successfully unloaded by the helper exist only until resume below /run/kait2en-suspend/.

The installer checks the running kernel log for two known Apple ACPI firmware errors. It only deploys an override when the error is present and the generated table passes validation with iasl:

/usr/local/lib/firmware/acpi/*.aml
/usr/local/lib/firmware/acpi/.kait2en-*.sha256
/etc/dracut.conf.d/t2-acpi-fix.conf
/var/backups/t2-acpi-fix/<timestamp>/

The backup contains every managed file that existed before deployment and a manifest. KAIT2EN only replaces or removes an ACPI table when its ownership marker contains the table's current SHA-256 checksum. Existing unmarked tables and modified managed tables are left unchanged and reported as conflicts.

Apple firmware from the installer USB drive

The guided installer copies Apple's own firmware for this Mac from the USB drive into the installed system, renamed to the file names the Linux drivers ask for:

/usr/lib/firmware/brcm/brcmfmac<chip>-pcie.apple,<board>*

Macs with the BCM4377 PCIe Bluetooth controller (14e4:5fa0) additionally get the two Bluetooth blobs. Every other T2 Mac drives Bluetooth over UART and gets nothing here:

/usr/lib/firmware/brcm/brcmbt<chip><stepping>-apple,<board>[-<vendor>].bin
/usr/lib/firmware/brcm/brcmbt<chip><stepping>-apple,<board>[-<vendor>].ptb

The exact names are taken from what the driver asked for in the kernel log. The outcome of the Bluetooth step is recorded in the installed system at:

/var/log/kait2en/bluetooth-firmware.log

Desktop applications

t2-fan-control and t2-smc-control are built from the checkout and installed system-wide under /usr/local. t2-dgpu-control is installed only when DMI identifies a MacBook Pro and PCI discovery finds both Intel and AMD display devices.

Application Installed files
T2 Fan Control /usr/local/bin/t2-fancontrol-gtk, /usr/local/share/applications/org.t2fancontrol.gtk.desktop, /usr/local/share/icons/hicolor/scalable/apps/org.t2fancontrol.gtk.svg, /usr/local/lib/systemd/system/t2-fancontrol.service
T2 SMC Control /usr/local/bin/t2-smc-control, /usr/local/share/applications/org.t2smccontrol.gtk.desktop, /usr/local/share/icons/hicolor/scalable/apps/org.t2smccontrol.gtk.svg, /usr/local/lib/systemd/system/kait2en-t2-smc-charge-limit.service
T2 GPU Control /usr/local/bin/t2-dgpu-control, /usr/local/libexec/t2-dgpu-control-helper, /usr/local/libexec/t2-dgpu-control-status, /usr/local/share/applications/org.t2dgpucontrol.gtk.desktop, /usr/local/share/icons/hicolor/scalable/apps/org.t2dgpucontrol.gtk.svg, /usr/local/lib/systemd/system/kait2en-dgpu-off.service, /usr/local/lib/systemd/system/kait2en-dgpu-suspend.service, /usr/local/lib/systemd/system/kait2en-amdgpu-profile.service, /usr/local/lib/systemd/system/kait2en-amdgpu-profile-resume.service, /usr/share/polkit-1/actions/org.t2dgpucontrol.gtk.policy, /usr/share/polkit-1/actions/org.t2dgpucontrol.gtk.status.policy

T2 SMC Control creates /etc/t2-smc-control/config.txt only after a charge limit is saved. Its system service restores that value at boot. T2 Fan Control's service starts immediately and persists fan curves across boot and resume. T2 GPU Control enables its units only when the corresponding options are applied in the app. Its privileged helper validates the hybrid GPU layout and accepts only the fixed operations exposed by the UI.

react-drm is installed for the desktop user only when the DMI product name is one of MacBookPro15,1, MacBookPro15,2, MacBookPro15,3, MacBookPro15,4, MacBookPro16,1, MacBookPro16,2, MacBookPro16,3 or MacBookPro16,4:

~/react-drm/
~/.config/systemd/user/react-drm.service
/etc/udev/rules.d/99-react-drm.rules

The installer adds that user to the video and input groups. When the active desktop reported by the user's systemd environment contains gnome, it also installs Window Monitor Pro below ~/.local/share/gnome-shell/extensions/ for application-aware controls. Every other DMI product name exits this step before installing react-drm dependencies or files.