Lenovo IdeaPad Flex 5 13IML05 Chromebook

HardwarePCI/USB IDWorking?
GPU8086:9b41Yes
SSD144d:a809Yes
MicroSD card readerYes
KeyboardYes
Keyboard backlightYes
WiFi8086:02f0Yes
Bluetooth8087:0026Yes
Speakers8086:02c8Yes
MicrophoneYes
3.5mm jackPartial
Touchpad06cb:cde1Yes
Touchscreen27c6:0e32Yes
Stylus27c6:0e32Untested
Webcam174f:244fYes

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

Warning:
  • 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).
Note:
  • 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.
  1. Disable Firmware Write Protection by booting without battery or using SuzyQable.
  2. Enable Developer Mode.
  3. Use MrChromebox's Firmware Utility Script.

Arch Linux installation

Warning:

If you plan to use F2FS, read about the power management issue first.

Note:
  • 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

Note:
  • 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:

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.

See also

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.