Lenovo IdeaPad Flex 5 13IML05 Chromebook
Hardware | PCI/USB ID | Working? |
---|---|---|
GPU | 8086:9b41 |
Yes |
SSD | 144d:a809 |
Yes |
MicroSD card reader | Yes | |
Keyboard | Yes | |
Keyboard backlight | Yes | |
WiFi | 8086:02f0 |
Yes |
Bluetooth | 8087:0026 |
Yes |
Speakers | 8086:02c8 |
Yes |
Microphone | Yes | |
3.5mm jack | Partial | |
Touchpad | 06cb:cde1 |
Yes |
Touchscreen | 27c6:0e32 |
Yes |
Stylus | 27c6:0e32 |
Untested |
Webcam | 174f:244f |
Yes |
Installation
This Chromebook does not support Legacy Boot Mode. Even if you try to invoke it by pressing CTRL+L
on the Developer Mode boot screen, it will show two options without a choice. Therefore it is necessary to flash a custom firmware.
UEFI firmware flashing
- This step relies on third-party scripts and firmware and may damage your hardware or data.
- After performing this step, it will not be possible to use ChromeOS (unless you flash the original firmware back).
- If you decide to boot without the battery to disable Firmware Write Protection, remove the battery according to the official manual and do not connect it back until the new firmware is flashed.
- If your Chromebook has turned into a brick, you can try to unbrick it by flashing the original firmware with a special cable called SuzyQable.
- Disable Firmware Write Protection by booting without battery or using SuzyQable.
- Enable Developer Mode.
- Use MrChromebox's Firmware Utility Script.
Arch Linux installation
If you plan to use F2FS, read about the power management issue first.
- Use UEFI-compatible bootloaders (e.g. systemd-boot).
- The SSD disk is
/dev/nvme0n1
.
Use auditctl(8) to suppress audit messages that appear every second:
# auditctl -e0
Follow the Installation guide.
Power management
As of January 20, 2022, the power management is broken in the Linux kernel (5.16.1). It is also broken in the official linux-lts (5.15.15) package.
The Chromebook hangs when closing the lid, restarting, and shutting down.
An older kernel linux-lts510AUR can be used as a workaround.
The issue appears to be resolved as of kernel version 5.19.16 or earlier.
Lid sensor
As of kernel version 5.19.16 or perhaps earlier, the lid sensor causes the system to wakeup shortly after suspending, regardless of whether the lid is closed.
A workaround is to disable wakeup events from the lid sensor. An example udev rule:
/etc/udev/rules.d/lid.rules
# Disable wakeups from lid sensor ACTION=="add", SUBSYSTEM=="acpi", KERNEL=="PNP0C0D:00", ATTR{power/wakeup}="disabled"
Sound
- The 3.5mm jack will only work with headphones. In all cases will be used Chromebook's microphone.
- Headphones connected to the 3.5mm jack will have minor noise, so it is recommended to use Bluetooth instead.
Install the following packages:
- sof-firmware - sound driver
- pulseaudio - PulseAudio
- pulseaudio-alsa - required to connect ALSA with PulseAudio
- acpid - acpid is required to make work the 3.5mm jack
Describe the sound card using the ALSA configuration file:
/etc/asound.conf
# Devices for PulseAudio pcm.speakers "hw:0,5" pcm.microphone "plughw:0,1" pcm.headphones "hw:0,0" # Force ALSA based applications (e.g. speaker-test(1)) to use PulseAudio pcm.!default pulse ctl.!default pulse
Force PulseAudio to use the devices defined above:
/etc/pulse/default.pa.d/devices.pa
# This line is required for Bluetooth load-module module-switch-on-connect load-module module-alsa-sink device=speakers sink_name=speakers load-module module-alsa-source device=microphone load-module module-alsa-sink device=headphones sink_name=headphones
Find and delete or comment out the following block of code to prevent conflicts:
/etc/pulse/default.pa
### Automatically load driver modules depending on the hardware available .ifexists module-udev-detect.so load-module module-udev-detect .else ### Use the static hardware detection module (for systems that lack udev support) load-module module-detect .endif
Create the following script to automatically switch sinks with acpid because of the 3.5mm jack:
/etc/acpi/headphones_jack.sh
# License: 0BSD #!/bin/bash function get_active_pulseaudio_users_ids { active_pulseaudio_users_ids=`ps -C pulseaudio -o ruid=` } function set_up_environment { local user_id="$1" export HOME=`getent passwd $user_id | cut -d: -f6` export PULSE_RUNTIME_PATH="/var/run/user/$user_id/pulse" } function set_sink { local user_id="$1" local sink_name="$2" sudo -u "#$user_id" -E pacmd set-default-sink $sink_name } if [ "$2" == "HEADPHONE" ]; then get_active_pulseaudio_users_ids for user_id in $active_pulseaudio_users_ids; do set_up_environment $user_id if [ "$3" == "plug" ]; then set_sink $user_id "headphones" else set_sink $user_id "speakers" fi done fi
Make the script executable.
Register the script as a listener:
/etc/acpi/events/headphones_jack
event=jack/headphone action=/etc/acpi/headphones_jack.sh %e
Enable acpid.service
The sound should work after reboot.
Touchscreen
As of January 12, 2022, the Linux kernel (5.15.13) uses the wrong module for the touchscreen due to a bug.
Therefore, it is necessary to block it:
/etc/modprobe.d/blacklist.conf
blacklist elants_i2c
The kernel will load the correct module after reboot.