Lenovo IdeaPad Flex 3 CB 11IGL05 Chromebook

From ArchWiki
Hardware PCI/USB ID Working?
GPU 8086:3185 Yes
MicroSD card reader Yes
Keyboard Yes
WiFi 8086:31dc Yes
Bluetooth 8087:0aaa Yes
Audio 8086:3198 Yes
Touchpad 04f3:00a2 Yes
Touchscreen Yes
Webcam 30c9:001c Yes

Firmware

This device is not supported by fwupd. To change or update the firmware, follow the instructions in Chrome OS devices/Custom firmware.

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 before the installation.

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 (use original power supply) or using SuzyQable.
  2. Enable Developer Mode.
  3. Use MrChromebox's Firmware Utility Script.

Accessibility

The appearance of the SeaBIOS is pretty simple and not very colorful, so it might work well with OCR software because it is completely in text mode.

Note: Blind users should request the help of a sighted person to change BIOS settings

Installation

Note:
  • Use UEFI-compatible boot loaders.
  • The MMC disk is /dev/mmcblk0.

Use auditctl(8) to suppress audit messages that appear every second:

# auditctl -e0

Follow the Installation guide.

Audio

Install the following packages:

Create the following script to switch sinks with acpid when plugging in a 3.5mm jack headset:

/etc/acpi/headphones_jack.sh
#!/bin/bash
case "$1" in
    jack/headphone)
        case "$2" in
            HEADPHONE)
                case "$3" in plug)
                    for i in `users` #adjust the sink for all active users
                    do
                        userid=`id -u $i` #get the ID for a user
                        sudo -u "$i" XDG_RUNTIME_DIR=/run/user/$userid pacmd set-default-sink alsa_output.pci-0000_00_0e.0-platform-glk_da7219_mx98357a.HiFi__hw_sofglkda7219max_1__sink
                    done
                    ;;
                esac 
                ;;
        esac
        ;;
esac

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.

Function keys

Default assignment

This Chromebook model [1] has many of the Chromebook special keys and they are mostly assigned correctly. The Search key is assigned to Super by default.

Key Visible? Marked? Effect
previous Yes Yes Previous/Back
next Yes Yes Next
refresh Yes Yes Refresh/Reload
full screen Yes 1 Yes No default action -> adjust to F11
overview Yes Yes "Scale" action --> adjust to PrintScreen
decrease brightness Yes Yes Decrease Brightness
increase brightness Yes Yes Increase Brightness
mute Yes Yes Mute toggle
decrease volume Yes Yes Decrease Volume
increase volume Yes Yes Increase Volume
lock Yes Yes Sleep
Search Yes Yes Assigned "Left Meta" = Super
  1. This key is visible to kernel/udev but not within X11.

The following table gives an overview of the underlying default keycodes. This information is needed to change the configuration.

See Keyboard input for more information

Chromebook special key Scancode Keycode Keysym
previous ea 158 KEY_BACK
next e9 159 KEY_FORWARD
refresh e7 173 KEY_REFRESH
full screen 91 372 KEY_ZOOM
overview 92 120 KEY_SCALE
decrease brightness 94 224 KEY_BRIGHTNESSDOWN
increase brightness 95 225 KEY_BRIGHTNESSUP
mute ea0 113 KEY_MUTE
decrease volume ae 114 KEY_VOLUMEDOWN
increase volume b0 115 KEY_VOLUMEUP
lock 5d 142 KEY_SLEEP

Adjust non-responsive keys for Xorg

There is only one key that is completely unresponsive in Xorg, because the keycode is above 255: KEY_ZOOM has a keycode of 371. By changing this key to an unused key with a lower keycode we can resolve this issue.

Create the following file as root:

/etc/udev/hwdb.db/60-keyboard.hwdb
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
 KEYBOARD_KEY_91=coffee

rebuild the database

# systemd-hwdb update
# udevadm trigger

After reboot you will see this change in the table above:

Chromebook special key Scancode Keycode Keysym
full screen 91 152 KEY_SCREENLOCK

Create additional key bindings

To also have function keys, Chromebook shortcuts (page-up, home, delete, ...) by using a combination of the Search key (that is assigned meta or Super by default) as an overlay, there are many options:

xbindkeys, sxhkd, desktop environments keyboard shortcuts,...

A good option is keyd, because this way all the bindings work in console, Xorg and Wayland without any delay.

After installing, create the following file:

/etc/keyd/chromebook.conf
[ids]
*

[main]
coffee = f11 # reassign the coffee/scrollock key to F11 to emulate full-screen within most window managers
scale = print # reassign the scale key to printscreen

[meta] #assign the leftmeta (search) key as an overlay key, do not forget to hold the "search" key to use the shortcuts below
back = f1
forward = f2
refresh = f3
coffee = f4
scale = f5
brightnessdown = f6
brightnessup = f7
mute = f8
volumedown = f9
volumeup = f10
up = pageup
down = pagedown
left = home
right = end
backspace = delete

Enable/start keyd.service.

This makes it possible to go to a console tty by holding Ctrl+Alt+Search+Back (which is translated to Ctrl+Alt+F1) And also to come back to graphical mode by holding Ctrl+Alt+Search+BrightnessUp(which is translated to Ctrl+Alt+F7)

See also