Blog · November 20, 2025
Taming Fedora 43 on the Lenovo Yoga Pro 7
I recently decided to install Fedora 43 (Rawhide) on my new Lenovo Yoga Pro 7 (Aura Edition). The laptop hardware is amazing, it's running the Intel Core Ultra 7 255, but combining brand-new hardware with a bleeding-edge operating system meant that quite a few things broke out of the box.
Here is how I fixed the three biggest annoyances: getting facial recognition (Howdy) to work with Python 3.14, stopping the Wi-Fi from crashing after sleep, and keeping Bluetooth turned off by default.
1. Setting up Howdy (Facial Recognition)
The biggest hurdle here was Python 3.14. Fedora 43 ships with this new version, which broke the standard RPM packages for Howdy because they look for older Python versions. Standard pip installs also failed because the necessary C++ build tools weren't linked correctly.
The Fix
I had to build the dependencies from source and manually fix the permissions.
Step 1: Install Build Dependencies
First, I installed the tools needed to compile dlib and opencv.
sudo dnf install meson ninja-build cmake gcc-c++ libv4l-devel python3-devel inih-devel pam-devel
Step 2: Install Python Libraries
Since the system packages were outdated or incompatible, I used pip to build the libraries specifically for Python 3.14.
sudo pip3 install dlib opencv-python v4l2 keyboard elevate
Step 3: Build Howdy
I pulled the source code (using the development branch) and built it using meson.
sudo meson setup build
sudo ninja -C build install
Step 4: Fix Permissions & SELinux
This was the tricky part. The login screen manager (gdm) runs as a restricted user and couldn't read the libraries I installed in /usr/local.
I gave read/execute permissions to the gdm user for the site-packages folder.
I set SELinux to Permissive in /etc/selinux/config. Without this, SELinux blocked the camera access every time I tried to log in.
Step 5: Camera Configuration
My camera ID kept changing numbers (e.g., swapping between /dev/video2 and /dev/video4) every time the laptop woke from sleep. To fix this, I grabbed the persistent ID and put it in the config (sudo howdy config):
device_path = /dev/video2
use_cnn = false
Note: I kept use_cnn disabled. Without NVIDIA CUDA support, the CNN model makes the login process take 3-5 seconds. The default model is instant.
Step 6: Enable Authentication (PAM)
To actually unlock sessions with Howdy, I had to register the PAM module for both sudo and the login screen.
Add the line below to the very top of /etc/pam.d/sudo:
auth sufficient /lib64/security/pam_howdy.so
Then repeat the same addition at the top of /etc/pam.d/gdm-password so GDM prompts for facial recognition on the lock and login screens.
2. Fixing Wi-Fi Crashes After Sleep
The Problem
Every time the laptop woke from sleep, the Wi-Fi adapter (iwlwifi) would vanish. The logs showed 0xffffffff errors, which basically means the hardware disconnected from the motherboard and couldn't reset itself.
The Solution
I found the solution in a Reddit thread. Instead of messing with battery settings or kernel flags, the cleanest fix is a systemd service that unloads the Wi-Fi drivers before the laptop sleeps and reloads them after it wakes up. This prevents the crash from ever happening.
Create the file /etc/systemd/system/wifi-sleep-fix.service:
[Unit]
Description=Reload WiFi drivers around sleep
Before=sleep.target
StopWhenUnneeded=yes
[Service]
Type=oneshot
RemainAfterExit=yes
# Unload drivers before sleep
ExecStart=/usr/sbin/modprobe -r iwlmld iwlmvm iwlwifi
# Reload drivers on resume
ExecStop=/usr/sbin/modprobe -a iwlmld iwlmvm iwlwifi
[Install]
WantedBy=sleep.target
Enable it with:
sudo systemctl enable wifi-sleep-fix.service
3. Stopping Bluetooth Auto-Start
The Problem
Bluetooth kept turning itself on every time I restarted the computer, which just wastes battery. I initially thought this was related to TLP (power management), but it turned out to be the default behavior of the Bluetooth service itself.
The Solution
I edited the Bluetooth configuration file directly.
Open the config:
sudo nano /etc/bluetooth/main.conf
Find the [Policy] section and change AutoEnable to false:
[Policy]
AutoEnable=false
Now, Bluetooth stays off until I actually need it.