I installed the Ubuntu 25.10 ISO, added the PPA and installed linux-qcom-x1e.
As an alternative to the power profiles, this is what I use to limit charging to 90% and adapt the GPU and CPU frequencies automatically based on the presence of USB charging: https://github.com/dblueman/scripting/blob/main/x1-efficiency-tuning
My Lenovo Slim7x comes out of suspend immediately after entering; I’m putting more info into https://bugs.launchpad.net/ubuntu-concept/+bug/2120769; does suspend persist on other laptops?
Very interesting… definitely wish frequency scaling and such “just work” optimally out the box. But seems promising for proper battery life! I suppose toggling 4…11 cores off on battery could make up most of the gap between windows battery performance? will have to try
My thinking - gnome already has some mechanisms, but no clue to what extent they work on this platform. I suppose gnome power-saver don’t actually change the frequency at all (“may enable some power saving options, such as aggressively dimming the screen”). You can set it to do power-saver on low battery threshold, but seemingly no way to select profile based on AC/batt state.
❯ powerprofilesctl query-battery-aware
Dynamic changes from charger and battery events: True
❯ cat /etc/UPower/UPower.conf
...
# Whether battery percentage based policy should be used.
UsePercentageForPolicy=true
...
# When UsePercentageForPolicy is true, the levels at which UPower will consider the battery low
PercentageLow=20.0
comes out of suspend immediately after entering
That’s exactly what I experienced. Seemingly also periodically wake up every ~2 minutes. Haven’t noticed it as much recently (6.18.0-9-qcom-x1e)…but still need to debug properly before relying on suspend. thanks for making that bug!
Doesn’t modifying the CPU governor fix the frequency issue? I use TLP and based on charger presence it changes the governor and max frequency. This allows me to set a 800-1400MHz range while on battery, which helps a lot while on the road.
The question is whether 4 cores with the max at 3.4GHz, or 8 or 12 cores with the max at somewhere less than 3.4 GHz is better for battery life while still being snappy and usable.
I tried to figure out what happens with the frequencies for the 3 different power profiles on Windows, but there seemed to be no differences on my Slim 7x.
1.keeping restarting at the Ubuntu grub without any dtb. *
2.if you use a surface laptop 7(or a not full surface pro11 dtb) dtb to the iso, and not set the timeout=0, it still keep restarting.*
3.if you use the dtb and set the timeout=0, it can stop restarting, but it can’t show anything on the screen. Even I set boot to text mode and disable GPU Acceleration, it is still a black screen.*
These are the 3 fatal issues of surface pro11 Ubuntu and other Distros. My skill can only try editing the grub.cfg. From April to now, I still don’t know the reasons of the issues.
I hope Snapdragon X Elite Devices like surface pro11 can run Ubuntu well soon.
I finally did actual testing and suspend is working fine on my slim 7x. manual and lid-close suspends entered deep sleep, paused the clock for ~10 minutes each time, woke cleanly on keyboard/lid input, and drained battery at ~3W.
The best I can seem to manage for idle power/ light workload is ~6W.
hibernation doesn’t seem to be allowed by kernel
cat /sys/power/state
freeze mem
cat /sys/power/resume
cat: /sys/power/resume: No such file or directory
I did also notice a pretty consistent WIFI issue. The loop goes like this and repeats
disconnect from AP
ath12k_pci 0004:01:00.0: failed to pull fw stats: -71
ath12k_pci 0004:01:00.0: failed to pull fw stats: -71
ath12k_pci 0004:01:00.0: time out while waiting for get fw stats
authenticate with
send auth to
authenticated
and sometimes on boot network interface is missing, not sure if that is related though.
I have same problem, battery care keeps reverting back on and cant get it to charge past 80%. Also it seems to enable “Lenovo Smart Charging” in windows also and there is no option (yet) in Lenovo Vantage to toggle it on or off
Thanks to everyone contributing to this project. I’m neither a developer nor a Linux pro – I’m just a data guy who dislikes Microsoft – and I greatly appreciate the hours put into this.
I bought a Dell XPS 13 (9345) before checking whether Dell supported Linux for Snapdragon systems. I’m running the 6.17.0-8-qcom-x1e kernel with Plucky 25.04. Following the instructions in the original post here, my system works okay, with these obvious problems (many are mentioned above):
Internal speakers don’t work
Internal camera doesn’t work
Internal microphone doesn’t work
Nightlight mode doesn’t work
Limited power management options
I had 2 questions:
Should I update to 25.10 or will that cut off access to this project?
Are there known fixes to the problems listed above?
There’s already a patch for Night Light. If you can figure out how to build a custom kernel with the patch applied then you can use it right now. Otherwise, it seems to be stalled - hopefully might be in 6.19. Request to the Ubuntu Concept people to add this patch to their PPA.
I am new to this forum and am looking for Ubuntu 25.10 fixes/upgrades to run on my ASUS Zenbook UX3407QA. My system run very well with some devices not working:
Speakers and sound
My keyboard backlight runs bright and dark
No WiFi Interface QCNFA765
No battery state info
No screen brightness control from Function Keys
No CPU Temperature Display
No camera
No sleep or hibernate modes
All of which I am trying to get working but my boot seems not to be a problem. Getting the system to recognize my SD card on USB was tricky. Here is a copy of my grub2 file:
DO NOT EDIT THIS FILE
It is automatically generated by grub-mkconfig using templates
from /etc/grub.d and settings from /etc/default/grub
BEGIN /etc/grub.d/00_header
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
if [ “${initrdfail}” = 2 ]; then
set initrdfail=
elif [ “${initrdfail}” = 1 ]; then
set next_entry=“${prev_entry}”
set prev_entry=
save_env prev_entry
if [ “${next_entry}” ]; then
set initrdfail=2
fi
fi
if [ “${next_entry}” ] ; then
set default=“${next_entry}”
set next_entry=
save_env next_entry
set boot_once=true
else
set default=“0”
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option=“–id”
else
menuentry_id_option=“”
fi
export menuentry_id_option
if [ “${prev_saved_entry}” ]; then
set saved_entry=“${prev_saved_entry}”
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z “${boot_once}” ]; then
saved_entry=“${chosen}”
save_env saved_entry
fi
}
function initrdfail {
if [ -n “${have_grubenv}” ]; then if [ -n “${partuuid}” ]; then
if [ -z “${initrdfail}” ]; then
set initrdfail=1
if [ -n “${boot_once}” ]; then
set prev_entry=“${default}”
save_env prev_entry
fi
fi
save_env initrdfail
fi; fi
}
function recordfail {
set recordfail=1
if [ -n “${have_grubenv}” ]; then if [ -z “${boot_once}” ]; then save_env recordfail; fi; fi
}
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root c858ac97-8ec6-4cee-a19d-f95aa5d7ebce
font=“/usr/share/grub/unicode.pf2”
fi
if loadfont $font ; then
set gfxmode=auto
load_video
insmod gfxterm
fi
terminal_output gfxterm
if [ “${recordfail}” = 1 ] ; then
set timeout=30
else
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=hidden
set timeout=0
Fallback hidden-timeout code in case the timeout_style feature is
unavailable.
elif sleep --interruptible 0 ; then
set timeout=0
fi
fi
END /etc/grub.d/00_header
BEGIN /etc/grub.d/05_debian_theme
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
END /etc/grub.d/05_debian_theme
BEGIN /etc/grub.d/10_linux
function gfxmode {
set gfxpayload=“${1}”
if [ “${1}” = “keep” ]; then
set vt_handoff=vt.handoff=7
else
set vt_handoff=
fi
}
if [ “${recordfail}” != 1 ]; then
if [ -e ${prefix}/gfxblacklist.txt ]; then
if [ ${grub_platform} != pc ]; then
set linux_gfx_mode=keep
elif hwmatch ${prefix}/gfxblacklist.txt 3; then
if [ ${match} = 0 ]; then
set linux_gfx_mode=keep
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=keep
fi
else
set linux_gfx_mode=text
fi
export linux_gfx_mode
menuentry ‘Ubuntu’ --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option ‘gnulinux-simple-c858ac97-8ec6-4cee-a19d-f95aa5d7ebce’ {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root c858ac97-8ec6-4cee-a19d-f95aa5d7ebce
linux /boot/vmlinuz-6.17.0-8-generic root=UUID=c858ac97-8ec6-4cee-a19d-f95aa5d7ebce ro clk_ignore_unused pd_ignore_unused cma=128M efi=noruntime quiet splash console=tty0 crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M $vt_handoff
initrd /boot/initrd.img-6.17.0-8-generic
}
submenu ‘Advanced options for Ubuntu’ $menuentry_id_option ‘gnulinux-advanced-c858ac97-8ec6-4cee-a19d-f95aa5d7ebce’ {
menuentry ‘Ubuntu, with Linux 6.17.0-8-generic’ --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option ‘gnulinux-6.17.0-8-generic-advanced-c858ac97-8ec6-4cee-a19d-f95aa5d7ebce’ {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root c858ac97-8ec6-4cee-a19d-f95aa5d7ebce
echo ‘Loading Linux 6.17.0-8-generic …’
linux /boot/vmlinuz-6.17.0-8-generic root=UUID=c858ac97-8ec6-4cee-a19d-f95aa5d7ebce ro clk_ignore_unused pd_ignore_unused cma=128M efi=noruntime quiet splash console=tty0 crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M $vt_handoff
echo ‘Loading initial ramdisk …’
initrd /boot/initrd.img-6.17.0-8-generic
}
menuentry ‘Ubuntu, with Linux 6.17.0-8-generic (recovery mode)’ --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option ‘gnulinux-6.17.0-8-generic-recovery-c858ac97-8ec6-4cee-a19d-f95aa5d7ebce’ {
recordfail
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root c858ac97-8ec6-4cee-a19d-f95aa5d7ebce
echo ‘Loading Linux 6.17.0-8-generic …’
linux /boot/vmlinuz-6.17.0-8-generic root=UUID=c858ac97-8ec6-4cee-a19d-f95aa5d7ebce ro recovery nomodeset clk_ignore_unused pd_ignore_unused cma=128M efi=noruntime
echo ‘Loading initial ramdisk …’
initrd /boot/initrd.img-6.17.0-8-generic
}
}
END /etc/grub.d/10_linux
BEGIN /etc/grub.d/10_linux_zfs
END /etc/grub.d/10_linux_zfs
BEGIN /etc/grub.d/20_linux_xen
END /etc/grub.d/20_linux_xen
BEGIN /etc/grub.d/30_os-prober
END /etc/grub.d/30_os-prober
BEGIN /etc/grub.d/30_uefi-firmware
if [ “$grub_platform” = “efi” ]; then
fwsetup --is-supported
if [ “$?” = 0 ]; then
menuentry ‘UEFI Firmware Settings’ $menuentry_id_option ‘uefi-firmware’ {
fwsetup
}
fi
fi
END /etc/grub.d/30_uefi-firmware
BEGIN /etc/grub.d/35_fwupd
END /etc/grub.d/35_fwupd
BEGIN /etc/grub.d/40_custom
This file provides an easy way to add custom menu entries. Simply type the
menu entries you want to add after this comment. Be careful not to change
the ‘exec tail’ line above.
END /etc/grub.d/40_custom
BEGIN /etc/grub.d/41_custom
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z “${config_directory}” -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg
fi
In windows the only solution I found is to power off the laptop and keep power button pressed about 15-30 seconds, that will reset Smart Charging and let you charge to 100%.
Hi Carl, I assume your mention “my system runs very well” means that you are booting Ubuntu OK, which means your grub file is OK. I’m afraid the list of functions that don’t work is what we all have to endure until some hero in the open source community manages to get one or more of these working.
Wondering if anyone else has tried enabling internal speakers on the latest kernel (Ubuntu 25.10, X1E PPA, 6.18). It seems to be far fewer steps than previously.
Change 84 to 5 in /usr/share/alsa/ucm2/codecs/qcom-lpass/wsa-macro/four-speakers/init.conf and /usr/share/alsa/ucm2/codecs/qcom-lpass/wsa-macro/init.conf
Make sure system volume slider is low! (around 10-20%)
Sound works and quality is fairly good. My Lenovo Slim 7x has 2x tweeters and 2x woofers.
hi, are you saying besides the “internal speakers and camera” that the power management options are working for you? what kind of battery life are you getting? comparable to what you would expect if you would’ve done the same workload on windows?
Well, for me internal speakers and camera is higher priority than power management and so on.
If I have internal speakers and camera (and of course - microphone, but I hope when we speak about internal speakers the microphone is implied), then, I can:
Call to my collegues with switched on camera
I can speak with them using only the laptop without anything else
That should work.
As for power management, even if your battery will work 4 hours instead of, for example 6, you can connect power adapter.