This concerns[orig. arch.]
- Release
- 1 March 2019
- OEM
- Lenovo
- Model
- Lenovo 300e Chromebook 2nd Gen (Intel)[orig. arch.]
- Code name
- Phaser360
- Board name(s)
- Octopus
- Base board
- octopus
- User ABI
- x86_64
- Kernel
- 4.14
- Kernel ABI
- x86_64
- Platform
- Gemini Lake
- Form Factor
- Convertible
- First Release
- R72
which Lenovo tricked me into getting in 012. Debian on the Lenovo 300e 2nd-gen arm64 Chromebook.
But because it's an Intel platform with a Celeron N4000 and 4G of LPDDR4-2400 you can install Debian on it, at least hypothetically.
Script started on 2022-10-10 19:32:11+02:00 [TERM="xterm" TTY="/dev/pts/1" COLUMNS="170" LINES="48"]
# uname -a
Linux localhost 4.14.290-19334-gd1f3f46afcb0 #1 SMP PREEMPT Wed Oct 5 13:43:48 PDT 2022 x86_64 Intel(R) Celeron(R) N4000 CPU @ 1.10GHz GenuineIntel GNU/Linux
# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 39 bits physical, 48 bits virtual
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 122
Model name: Intel(R) Celeron(R) N4000 CPU @ 1.10GHz
Stepping: 1
CPU MHz: 2517.724
CPU max MHz: 2600.0000
CPU min MHz: 800.0000
BogoMIPS: 2188.80
Virtualization: VT-x
L1d cache: 48 KiB
L1i cache: 64 KiB
L2 cache: 4 MiB
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Mitigation; PTI
Vulnerability Mmio stale data: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm 3dnowprefetch cpuid_fault cat_l2 pti cdp_l2 ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust smep erms mpx rdt_a rdseed smap clflushopt intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts umip rdpid md_clear arch_capabilities
# cat /proc/cmdline
cros_secure console= loglevel=7 init=/sbin/init cros_secure drm.trace=0x106 root=PARTUUID=4b867d4a-3be5-4e4f-b215-69cb5aa8e633/PARTNROFF=1 rootwait rw dm_verity.error_behavior=3 dm_verity.max_bios=-1 dm_verity.dev_wait=0 dm="1 vroot none ro 1,0 5767168 verity payload=ROOT_DEV hashtree=#_DEV hashstart=5767168 alg=sha256 root_hexdigest=cc2fa57f4ecbb729a7eaf4dfb09b08fbdf81ceeb6405676935640336895953f6 salt=46019327766872fc31e9094de56e080cdd6bd6c3a33f950470861cd7f1faf1e8" noinitrd vt.global_cursor_default=0 kern_guid=4b867d4a-3be5-4e4f-b215-69cb5aa8e633 add_efi_memmap boot=local noresume noswap i915.modeset=1 gsmi.s0ix_logging_enable=1 intel_idle.slp_s0_check=1 intel_idle.slp_s0_seed=15
# findmnt
TARGET SOURCE FSTYPE OPTIONS
/ /dev/mmcblk0p5 ext2
|-/dev devtmpfs devtmpfs seclabel,size=1946524k,nr_inodes=486631,mode=755
| |-/dev/shm tmpfs tmpfs seclabel,size=1948668k
| `-/dev/pts devpts devpts seclabel,gid=5,mode=620,ptmxmode=666
|-/proc proc proc relatime
|-/sys sysfs sysfs seclabel
| |-/sys/fs/selinux selinuxfs selinuxfs relatime
| |-/sys/fs/pstore pstore pstore seclabel
| |-/sys/kernel/tracing tracefs tracefs seclabel
| |-/sys/kernel/debug debugfs debugfs seclabel,gid=605,mode=750
| | `-/sys/kernel/debug/tracing tracefs tracefs seclabel
| |-/sys/kernel/config configfs configfs relatime
| `-/sys/fs/cgroup none tmpfs seclabel,mode=755
| |-/sys/fs/cgroup/cpu cgroup cgroup cpu
| |-/sys/fs/cgroup/freezer cgroup cgroup freezer
| |-/sys/fs/cgroup/devices cgroup cgroup devices
| |-/sys/fs/cgroup/cpuacct cgroup cgroup cpuacct
| |-/sys/fs/cgroup/cpuset cgroup cgroup cpuset,noprefix,cpuset_v2_mode
| `-/sys/fs/cgroup/net_cls cgroup cgroup net_cls
|-/tmp tmpfs tmpfs nosymfollow,seclabel
|-/run tmpfs tmpfs seclabel,mode=755
| |-/run/chromeos-config/private /dev/loop0 squashfs seclabel
| |-/run/chromeos-config/v1 /dev/loop0[/v1/chromeos/configs/5] squashfs seclabel
| |-/run/namespaces tmpfs[/namespaces] tmpfs seclabel,mode=755
| | `-/run/namespaces/mnt_chrome nsfs[mnt:[4026532626]] nsfs
| |-/run/daemon-store/appsync-consent tmpfs[/daemon-store/appsync-consent]
| | tmpfs seclabel,mode=755
| |-/run/daemon-store/authpolicyd tmpfs[/daemon-store/authpolicyd] tmpfs seclabel,mode=755
| |-/run/daemon-store/cdm-oemcrypto tmpfs[/daemon-store/cdm-oemcrypto] tmpfs seclabel,mode=755
| |-/run/daemon-store/chaps tmpfs[/daemon-store/chaps] tmpfs seclabel,mode=755
| |-/run/daemon-store/crash tmpfs[/daemon-store/crash] tmpfs seclabel,mode=755
| |-/run/daemon-store/crosvm tmpfs[/daemon-store/crosvm] tmpfs seclabel,mode=755
| |-/run/daemon-store/debugd tmpfs[/daemon-store/debugd] tmpfs seclabel,mode=755
| |-/run/daemon-store/dlp tmpfs[/daemon-store/dlp] tmpfs seclabel,mode=755
| |-/run/daemon-store/kerberosd tmpfs[/daemon-store/kerberosd] tmpfs seclabel,mode=755
| |-/run/daemon-store/pvm tmpfs[/daemon-store/pvm] tmpfs seclabel,mode=755
| |-/run/daemon-store/session_manager tmpfs[/daemon-store/session_manager]
| | tmpfs seclabel,mode=755
| |-/run/daemon-store/shill tmpfs[/daemon-store/shill] tmpfs seclabel,mode=755
| |-/run/daemon-store/smbfs tmpfs[/daemon-store/smbfs] tmpfs seclabel,mode=755
| |-/run/daemon-store/smbproviderd tmpfs[/daemon-store/smbproviderd] tmpfs seclabel,mode=755
| |-/run/daemon-store/u2f tmpfs[/daemon-store/u2f] tmpfs seclabel,mode=755
| |-/run/daemon-store/uma-consent tmpfs[/daemon-store/uma-consent] tmpfs seclabel,mode=755
| |-/run/daemon-store/usb_bouncer tmpfs[/daemon-store/usb_bouncer] tmpfs seclabel,mode=755
| |-/run/debugfs_gpu debugfs[/dri/0] debugfs seclabel,gid=605,mode=750
| |-/run/imageloader imageloader tmpfs seclabel,mode=755
| `-/run/netns tmpfs[/netns] tmpfs seclabel,mode=755
| |-/run/netns/connected_netns_0 nsfs[net:[4026532871]] nsfs rw
| `-/run/netns/connected_netns_1 nsfs[net:[4026532944]] nsfs rw
|-/mnt/stateful_partition /dev/mmcblk0p1 ext4 seclabel,discard,resgid=20119,commit=600,data=ordered
| `-/mnt/stateful_partition/encrypted /dev/mapper/encstateful ext4 seclabel,discard,commit=600,data=ordered
|-/usr/share/oem /dev/mmcblk0p8 ext4 seclabel,data=ordered
|-/home /dev/mmcblk0p1[/home] ext4 nosymfollow,seclabel,discard,resgid=20119,commit=600,dat
| `-/home/chronos /dev/mapper/encstateful[/chronos] ext4 seclabel,discard,commit=600,data=ordered
|-/var /dev/mapper/encstateful[/var] ext4 seclabel,discard,commit=600,data=ordered
| |-/var/run tmpfs tmpfs seclabel,mode=755
| |-/var/lock tmpfs[/lock] tmpfs seclabel,mode=755
| `-/var/cache/dlc-images /dev/mmcblk0p1[/var_overlay/cache/dlc-images]
| ext4 seclabel,discard,resgid=20119,commit=600,data=ordered
|-/media media tmpfs seclabel
|-/usr/local /dev/mmcblk0p1[/dev_image] ext4 rw,nodev,seclabel,discard,resgid=20119,commit=600,data=ordered
|-/usr/share/chromeos-assets/speech_synthesis/patts
| /dev/loop2 squashfs seclabel
|-/usr/share/chromeos-assets/quickoffice/_platform_specific
| /dev/loop3 squashfs seclabel
`-/usr/share/cros-camera/libfs /dev/loop4 squashfs seclabel
# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/root ext2 2.8G 2.4G 358M 88% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 60M 1.8G 4% /dev/shm
tmpfs tmpfs 1.9G 72K 1.9G 1% /tmp
tmpfs tmpfs 1.9G 704K 1.9G 1% /run
/dev/loop0 squashfs 384K 384K 0 100% /run/chromeos-config/private
/dev/mmcblk0p1 ext4 21G 173M 20G 1% /mnt/stateful_partition
/dev/mmcblk0p8 ext4 12M 24K 12M 1% /usr/share/oem
/dev/mapper/encstateful ext4 6.0G 14M 6.0G 1% /mnt/stateful_partition/encrypted
media tmpfs 1.9G 0 1.9G 0% /media
none tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop2 squashfs 98M 98M 0 100% /usr/share/chromeos-assets/speech_synthesis/patts
imageloader tmpfs 1.9G 0 1.9G 0% /run/imageloader
/dev/loop3 squashfs 10M 10M 0 100% /usr/share/chromeos-assets/quickoffice/_platform_specific
/dev/loop4 squashfs 6.0M 6.0M 0 100% /usr/share/cros-camera/libfs
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 268K 1 loop /run/chromeos-config/private
loop1 7:1 0 6.1G 0 loop
`-encstateful 254:1 0 6.1G 0 dm /mnt/stateful_partition/encrypted
loop2 7:2 0 97.3M 0 loop /usr/share/chromeos-assets/speech_synthesis/patts
loop3 7:3 0 9.2M 0 loop /usr/share/chromeos-assets/quickoffice/_platform_specific
loop4 7:4 0 6M 1 loop /usr/share/cros-camera/libfs
mmcblk0 179:0 0 29.1G 0 disk
|-mmcblk0p1 179:1 0 20.9G 0 part /mnt/stateful_partition
|-mmcblk0p2 179:2 0 32M 0 part
|-mmcblk0p3 179:3 0 4G 0 part
|-mmcblk0p4 179:4 0 32M 0 part
|-mmcblk0p5 179:5 0 4G 0 part /
|-mmcblk0p6 179:6 0 512B 0 part
|-mmcblk0p7 179:7 0 512B 0 part
|-mmcblk0p8 179:8 0 16M 0 part /usr/share/oem
|-mmcblk0p9 179:9 0 512B 0 part
|-mmcblk0p10 179:10 0 512B 0 part
|-mmcblk0p11 179:11 0 8M 0 part
`-mmcblk0p12 179:12 0 32M 0 part
mmcblk0boot0 179:16 0 4M 1 disk
mmcblk0boot1 179:32 0 4M 1 disk
zram0 253:0 0 5.4G 0 disk [SWAP]
# lsblk -f
NAME FSTYPE LABEL FSAVAIL FSUSE% MOUNTPOINT
loop0 squashfs 0 100% /run/chromeos-config/private
loop1
`-encstateful ext4 5.9G 0% /mnt/stateful_partition/encrypted
loop2 squashfs 0 100% /usr/share/chromeos-assets/speech_synthesis/patts
loop3 squashfs 0 100% /usr/share/chromeos-assets/quickoffice/_platform_specific
loop4 squashfs 0 100% /usr/share/cros-camera/libfs
mmcblk0
|-mmcblk0p1 ext4 19.2G 1% /mnt/stateful_partition
|-mmcblk0p2
|-mmcblk0p3 ext4 ROOT-A
|-mmcblk0p4
|-mmcblk0p5 ext2 ROOT-A 357.3M 87% /
|-mmcblk0p6
|-mmcblk0p7
|-mmcblk0p8 ext4 OEM 11.1M 0% /usr/share/oem
|-mmcblk0p9
|-mmcblk0p10
|-mmcblk0p11
`-mmcblk0p12 vfat EFI-SYSTEM
mmcblk0boot0
mmcblk0boot1
zram0 [SWAP]
# losetup
NAME AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/loop1 0 0 /mnt/stateful_partition/encrypted.block 1 512
/dev/loop4 1 1 /usr/share/cros-camera/g3_libs.squash 0 512
/dev/loop2 1 0 /usr/share/chromeos-assets/speech_synthesis/patts.squash 0 512
/dev/loop0 1 1 /usr/share/chromeos-config/configfs.img 0 512
/dev/loop3 1 0 /usr/share/chromeos-assets/quickoffice/quickoffice.squash 0 512
# blkid
/dev/loop0: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
/dev/mmcblk0p1: UUID="b3770f19-2ac7-402d-9e3c-5c04e3e157fa" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="STATE" PARTUUID="65aa1ffe-16f2-b94d-a870-7292e5e5ec6f"
/dev/mmcblk0p2: PARTLABEL="KERN-A" PARTUUID="9b216b4b-ac57-c640-8eb7-d356af8426b7"
/dev/mmcblk0p3: LABEL="ROOT-A" SEC_TYPE="ext2" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="ROOT-A" PARTUUID="3675549b-e624-9143-b3af-c414e1e02117"
/dev/mmcblk0p4: PARTLABEL="KERN-B" PARTUUID="4b867d4a-3be5-4e4f-b215-69cb5aa8e633"
/dev/mmcblk0p5: LABEL="ROOT-A" BLOCK_SIZE="4096" TYPE="ext2" PARTLABEL="ROOT-B" PARTUUID="6c2204d6-92d1-2d4b-9ce4-1eced2227559"
/dev/mmcblk0p8: LABEL="OEM" UUID="9db5d778-0ac8-43be-b4dd-b8cd77248ba3" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="OEM" PARTUUID="c89b9d8a-130a-1c42-903e-4a00373cbe78"
/dev/mmcblk0p11: PARTLABEL="RWFW" PARTUUID="49257a5e-f084-5d40-8655-7b44ce3aa92a"
/dev/mmcblk0p12: SEC_TYPE="msdos" LABEL_FATBOOT="EFI-SYSTEM" LABEL="EFI-SYSTEM" UUID="563B-40A9" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI-SYSTEM" PARTUUID="e87e055b-5f6a-4647-8176-4f0f50bdadd6"
/dev/mapper/encstateful: UUID="91e91d32-94d2-457f-a4a7-05db62492040" BLOCK_SIZE="4096" TYPE="ext4"
# cat /etc/os-release
ID_LIKE=chromiumos
GOOGLE_CRASH_ID=ChromeOS
NAME=Chrome OS
ID=chromeos
HOME_URL=https://www.chromium.org/chromium-os
BUG_REPORT_URL=https://crbug.com/new
VERSION=106
VERSION_ID=106
BUILD_ID=15054.98.0
# cat /etc/fstab
# ^D
exit
Script done on 2022-10-10 19:37:30+02:00 [COMMAND_EXIT_CODE="0"]
(all the boring common mountopts stripped; note also how the console login is somehow TERM=xterm); the UUIDs amount to
encstateful
mmcblk0p1
mmcblk0p8
mmcblk0p12
Chrultrabook lists this device as explicitly supported as
- Device Name
- Lenovo 300e Chromebook Gen 2/IdeaPad Flex 3
NEC Chromebook Y1- Board Name
- PHASER360
- RW_LEGACY
Firmware- ✅
- UEFI Firmware
(Full ROM)- ✅
- WP Method
- CR50 (battery)
- Windows Notes
- Audio driver is paid.
- Linux Notes
- Supported
- MacOS Notes
- No MacOS support.
so this has been done before and this is thus largely a replication post, mirroring the chrultrabook documentation structure:
Why the model is in the uname I cannot tell you, but it is there. As seen above, it matches /proc/cpuinfo.
How to find your architecture and How to find your CPU model similarly recommend ctrl+alt+t to open the "decroded shell". This still doesn't do anything, and ctrl+alt+→ (not the arrow key) is required.
How to find your CPU model recommends cat /proc/cpuinfo | grep "model name". Why it's not grep "model name" /proc/cpuinfo is beyond me.
GeminiLake: Legacy boot mode/alternative firmware menu works but does not show payload list
which is irrelevant.
has already been done in 012. Debian on the Lenovo 300e 2nd-gen arm64 Chromebook.
- Tip
- You do not have to disable write protect if flashing RW_Legacy.
- Warning
- The RW_LEGACY firmware is for users who want to dual-boot ChromeOS + Linux, or users who want to run Linux without having to open the device/disable the firmware write-protect (and are OK with the accompanying limitations).
- Removes the developer mode boot ("OS verification is OFF") screen
- UEFI firmware contains updated EC firmware as well, which brings additional fixes on most Chromebooks (mainly keyboard related)
- Tip
- The (UEFI) Full ROM firmware is the best option for all users who no longer need/want to run ChromeOS (ie, want to run Linux/Windows/macOS exclusively), and who don't mind disabling write-protection on their device.
Unclear to me what "ie" means, but sign me up, brother. Here's hoping it also fixes the scandi keyboard.
The internal link from within google documentation is a 404. Obviously. Neither the fake nor the real Lenovo product page carry a manual of any sort, but a completely unrelated Lenovo page does, and it also has videos-as-in-37-second-MP4s that show where the latches are, because sexion "1020 Base cover assembly" of the manual says "Pry up latches and remove the base cover assembly." but doesn't show where the latches are. But the video does.
- Run MrChromebox's firmware utility script within VT-2 (ctrl + alt + f2 (right arrow)).
- Type
cd; curl -LO mrchromebox.tech/firmware-util.sh && sudo bash firmware-util.sh
and press Enter.
This is weird and borders on dangerous. Maybe? The website says
IMPORTANT
Due to recent changes in ChromeOS' security settings, you may need to use a new set of commands to run the Firmware Utility Script under ChromeOS. Running it under Linux can use the same old one-line command.
…
Also, you must execute these commands **as a normal/non-root user**. Running them as root will break things. DO NOT RUN 'SUDO SU' BEFORE RUNNING THE SCRIPT CMD BELOW.
To download and run this script under ChromeOS or Linux, from a terminal/shell type:
cd; curl -LO mrchromebox.tech/firmware-util.sh && sudo bash firmware-util.sh
and press enter.
…
REALLY READ THIS: Under ChromeOS, starting with R117, this script must be run from a VT2 terminal (from login screen: CTRL+ALT+F2, login 'chronos'); it cannot be run from a crosh shell (CTRL+ALT+T when logged in) due to the removal of sudo, or from a crostini (penguin) terminal; […].
So: Are you supposed to run it as root under sudo? Run it as root straight from login? Or are you to not do that because it'll break your system? How is it gonna flash anything as non-root? If you log in as "chronos" are you supposed to drop the sudo it specs? Why does downstream Chrultrabook not comment on this at all and why does it not say which user you're supposed to log in as if it matters?
According to upstream this is all intentionally misleading,
and the purpose of the huge bizarre paragraph with a random user is to find a R/W mountpoint.
Just download it and run it as root
(copy it off the USB (sure, maybe under ~chronos, or mount -o remount,rw /
), since it wants to exclusively mount it)
instead of this rigamarole.
I downloaded the thingy (which redirected me twice, last step at pisshub) onto removable media (unclear to me how you'd download it from the target system in a privacy-preserving way):
localhost login: root
Password: root
localhost ~ # mount -r /dev/sda /media/removable
localhost ~ # cp /media/removable/firmware-util.sh ~chronos
'/media/removable/firmware-util.sh' -> '/home/chronos/user/firmware-util.sh'
localhost ~ # umount /media/removable
localhost ~ # ^D
logout
localhost login: chronos
Password:
Login incorrect
localhost login: chronos
Password: chronos
Login incorrect
localhost login: root
Password: root
localhost ~ # chromeos-setdevpassswd
Password: chronos
Verifying - Password: chronos
localhost ~ # ^D
logout
localhost login: chronos
Password: chronos
chronos@localhost ~ $ bash firmware-util.sh
MrChromebox Firmware Utility Script starting up
Downloading supporting files...
Error downloading one or more required files; cannot continue
The most natural question is "how does chromeos-setdevpasswd differ from passwd chronos"? Significantly:
The next-most natural question is "great.". Which isn't a question but "why the aren't there any errors?" is. Well, "MrChromebox's firmware utility script" is
#where the stuff is
script_url="https://raw.githubusercontent.com/MrChromebox/scripts/master/"
# …
#get support scripts
echo -e "\nDownloading supporting files..."
rm -rf firmware.sh >/dev/null 2>&1
rm -rf functions.sh >/dev/null 2>&1
rm -rf sources.sh >/dev/null 2>&1
$CURL -sLO ${script_url}firmware.sh
rc0=$?
$CURL -sLO ${script_url}functions.sh
rc1=$?
$CURL -sLO ${script_url}sources.sh
rc2=$?
if [[ $rc0 -ne 0 || $rc1 -ne 0 || $rc2 -ne 0 ]]; then
echo -e "Error downloading one or more required files; cannot continue"
exit 1
fi
source ./sources.sh
source ./firmware.sh
source ./functions.sh
# …
which raises so many more questions (why are the curls supposed to fail silently? why are the three rm
s not one? &c. &c. in the trimmed parts),
but that's neither here nor there,
and just meant I had to download https://raw.githubusercontent.com/MrChromebox/scripts/master/{sources,firmware,functions}.sh,
and, since all the other modules also run $CURL -s…
, apply
--- firmware.orig/firmware-util.sh
+++ firmware/firmware-util.sh
@@ -16,6 +16,7 @@
#ensure output of system tools in en-us for parsing
export LC_ALL=C
+curldir="$PWD"
#set working dir
if grep -q "Chrom" /etc/lsb-release ; then
@@ -31,28 +32,24 @@
echo -e "\nMrChromebox Firmware Utility Script starting up"
#check for cmd line param, expired CrOS certs
-if ! curl -sLo /dev/null https://mrchromebox.tech/index.html || [[ "$1" = "-k" ]]; then
- export CURL="curl -k"
-else
- export CURL="curl"
-fi
+export CURL=curl
+curl() {
+ printf 'curl %s\n' "$*" | tee -a ~chronos/curls
+ OPTIND=1
+ curl_file=
+ while getopts sLOo: curl_flag; do
+ case "$curl_flag" in
+ [sLO]) ;;
+ o) curl_file="$OPTARG" ;;
+ esac
+ done
+ shift "$((OPTIND - 1))"
+ [ -n "$curl_file" ] || curl_file="${1##*/}"
+ [ -s "$curldir/$curl_file" ] && cp -v "$curldir/$curl_file" .
+}
-#get support scripts
-echo -e "\nDownloading supporting files..."
-rm -rf firmware.sh >/dev/null 2>&1
-rm -rf functions.sh >/dev/null 2>&1
-rm -rf sources.sh >/dev/null 2>&1
-$CURL -sLO ${script_url}firmware.sh
-rc0=$?
-$CURL -sLO ${script_url}functions.sh
-rc1=$?
-$CURL -sLO ${script_url}sources.sh
-rc2=$?
-if [[ $rc0 -ne 0 || $rc1 -ne 0 || $rc2 -ne 0 ]]; then
- echo -e "Error downloading one or more required files; cannot continue"
- exit 1
-fi
+cp "$curldir/"{sources,firmware,functions}.sh .
source ./sources.sh
source ./firmware.sh
source ./functions.sh
Which is possible due to the narrow flag vocabulary.
Some parts of flash_rwlegacy()
, like the boot order, degrade gracefully, which is not what we want.
Similarly, downgrade_touchpad_fw()
, which is meant to "offer to downgrade touchpad firmware on EVE" does the same.
But my laptop doesn't have "EVE" anywhere in the board name so no issue there.
All other curl uses hard-fail, and I turned around twice, for
https://www.mrchromebox.tech/files/{util/cbfstool.tar.gz,firmware/full_rom/coreboot_edk2-phaser360-mrchromebox_20231222.rom{,.sha1}}.
The first time I tried this, it told me
WARNING: your device currently has software write-protect enabled.
If you plan to flash the UEFI firmware, you must first disable it and reboot before flashing.
Would you like to disable sofware WP and reboot your device?
Press Y (then enter) to disable software WP and reboot, or just press enter to skip and continue. Y
and, naturally, rebooted instantly, so I lost the transcript.
But after the two expected errors, I got
Script started on 2022-10-06 00:00:07+02:00 [TERM="xterm" TTY="/dev/pts/2" COLUMNS="170" LINES="48"]
chronos@localhost ~ $ bash firmware-util.sh
MrChromebox Firmware Utility Script starting up
Downloading supporting files...
You need to run this script as root; use 'sudo bash <script name>'
chronos@localhost ~ $ sudo bash firmware-util.sh
Password:
MrChromebox Firmware Utility Script starting up
Downloading required tools...
curl -sLO https://www.mrchromebox.tech/files/util/cbfstool.tar.gz
'/home/chronos/user/cbfstool.tar.gz' -> './cbfstool.tar.gz'
Getting device/system info...
Checking WP state...
ChromeOS Device Firmware Utility Script [2024-01-07]
(c) Mr Chromebox <mrchromebox@gmail.com>
*********************************************************
** Device: Lenovo 300e/500e Chromebook 2nd Gen (PHASER360)
** Platform: Intel GeminiLake
** Fw Type: Stock ChromeOS w/RW_LEGACY
** Fw Ver: Google_Phaser.11297.342.0 (12/24/2021)
** Fw WP: Disabled
*********************************************************
** 1) Install/Update RW_LEGACY Firmware
** [WP] 2) Install/Update UEFI (Full ROM) Firmware
** [WP] 3) Set Boot Options (GBB flags)
** [WP] 4) Set Hardware ID (HWID)
*********************************************************
Select a numeric menu option or
R to reboot P to poweroff Q to quit
2
Install/Update UEFI Full ROM Firmware
IMPORTANT: flashing the firmware has the potential to brick your device,
requiring relatively inexpensive hardware and some technical knowledge to
recover.Not all boards can be tested prior to release, and even then slight
differences in hardware can lead to unforseen failures.
If you don't have the ability to recover from a bad flash, you're taking a risk.
You have been warned.
Also, flashing Full ROM firmware will remove your ability to run ChromeOS.
Do you wish to continue? [y/N] y
NOTICE: flashing your Chromebook is serious business.
To ensure recovery in case something goes wrong when flashing,
be sure to set the ccd capability 'FlashAP Always' using your
USB-C debug cable, otherwise recovery will involve disassembling
your device (which is very difficult in some cases).
If you wish to continue, type: 'I ACCEPT' and press enter.
I ACCEPT
NOTE: After flashing UEFI firmware, you will need to install a UEFI-compatible
OS; ChromeOS will no longer be bootable. See https://mrchromebox.tech/#faq
Press Y to continue or any other key to abort. Y
Connect the USB/SD device to store the firmware backup and press [Enter]
to continue. This is non-destructive, but it is best to ensure no other
USB/SD devices are connected.
Devices available:
1) Generic STORAGE_DEVICE (7.4 GB)
Enter the number for the device to be used for firmware backup: 1
Saving firmware backup as stock-firmware-PHASER360-20221006.rom
Firmware backup complete. Remove the USB stick and press [Enter] to continue.
Downloading Full ROM firmware
(coreboot_edk2-phaser360-mrchromebox_20231222.rom)
curl -sLO https://www.mrchromebox.tech/files/firmware/full_rom/coreboot_edk2-phaser360-mrchromebox_20231222.rom
'/home/chronos/user/coreboot_edk2-phaser360-mrchromebox_20231222.rom' -> './coreboot_edk2-phaser360-mrchromebox_20231222.rom'
curl -sLO https://www.mrchromebox.tech/files/firmware/full_rom/coreboot_edk2-phaser360-mrchromebox_20231222.rom.sha1
'/home/chronos/user/coreboot_edk2-phaser360-mrchromebox_20231222.rom.sha1' -> './coreboot_edk2-phaser360-mrchromebox_20231222.rom.sha1'
Persisting device HWID
VPD extracted from current firmware
Disabling software write-protect and clearing the WP range
Installing Full ROM firmware (may take up to 90s)
Full ROM firmware successfully installed/updated.
IMPORTANT:
The first boot after flashing may take substantially
longer than subsequent boots -- up to 30s or more.
Be patient and eventually your device will boot :)
Press [Enter] to return to the main menu.
Q
chronos@localhost ~ $ ^D
exit
Script done on 2022-10-06 00:04:21+02:00 [COMMAND_EXIT_CODE="32"]
- Tip
- If you unplugged the battery to disable write protect, you can plug it back in now. All subsequent flashing won't require it from now on.
- UEFI
- It can take up to a minute for display to come up on first POST. Do not interrupt the first boot.
I'm not trying to be flipping the shit running with a cable plugged in, I plugged the battery back after rebooting and proof-booting d-i.
Yeah, it took about that long. But the updater explicitly says it won't boot ChromeOS anymore. So I held off until I had a d-i image.
# Installing an OS
# Known Issues
# Linux
- Debian 12 (Bookworm) needs a custom kernel.
No it doesn't. Pretty sure. No one wants to document what they mean by this. And I got spam-blocked on the forum for no reason.
And by that I mean this is not mentioned in the documentation, and not in one (screenshot), two, three, four, five posts about this from Chrultrabook authors, in a few cases while questioned directly. Do they even know why?
It turns out they do on the sixth attempt: the catchily-designated MR!768 – [x86] Various drivers for ChromeOS devices. A trivial analysis shows this actually wants a kernel at least 6.6.3-1, so at time of writing "current sid", but hopefully it'll be in backports later.
# Making a Bootable USB
# Flashing with dd (Linux/macOS)
I'm snidely avoiding comment on the bit where it specs dd but uses no flags that would make it do anything different than cp.
No syncing of any kind is criminal, though.
# Installing Linux
- Tip
- Only Linux kernel 6.4 or newer is supported.
It doesn't say why. Well – why? (See above.)
# Recommended Distributions
- Warning
- Debian versions older than Debian 12 (Bookworm) are not supported. Debian 12 (Bookworm) requires a custom kernel, the audio script will automatically install it for you.
- No the fuck it won't.
- Bookworm ships (at time of writing, from stable-security) 6.1.69-1, and the current d-i image's kernel is branded "6.1.66-1 (2023-12-09)". So it must work. (See above, again.)
If it were up to me, since this is just about some modules, this box would be
- Warning
- Debian versions older than Debian 12 (Bookworm) are not supported. Debian 12 (Bookworm) itself requires the backports kernel for full functionality.
- Danger
- On Debian 12 (Bookworm), the audio script will try to download an install a third-party kernel image. Answer N at the "Would you like the script to automatically install this kernel?" prompt!
But for now just install the sid kernel.
# Installation
- Install as you would on any other computer.
I'm assuming this means you can safely dump the whole /dev/mmcblk0? Which I had pause about, but clearly I oughtn't've'd.
# Fixing Audio
# Fixing Audio
(yeah there's two nested identical sexions)
- Danger
- Using AVS on a device with max98357a will blow your speakers. You have been warned.
this machine does have this device (apparently this is the check, and apparently this only affects output to the built-in speakers, and the "audio script" will disable it automatically, maybe), and:
$ grep -w CONFIG_SND_SOC_INTEL_AVS /boot/config-6.1.0-9-amd64 /boot/config-6.6.9-amd64 /boot/config-6.1.0-9-amd64:# CONFIG_SND_SOC_INTEL_AVS is not set /boot/config-6.6.9-amd64:CONFIG_SND_SOC_INTEL_AVS=m
and, uncharacteristically, Linux doesn't spec what the modules are called, but it looks like snd-soc-avs, so booting the bookworm kernel is safe, but booting a later kernel wants
modprobe.blacklist=snd-soc-avs
in the cmdline.So, with no contraindications, and a very peculiar sense of drip
![]()
![]()
(yes, that is a 4:3 EDK2 on an almost-16:9 monitor):
![]()
and I installed sid normally. ChromeOS used discard, so I added this to the mount options as well. Installing GRUB into the removable media path was not necessary. This yields #1060325.
Apparently, pressing alt and ˂ or ˃ (the arrow keys) cycles between the available VTs. This is useful because there are no function keys, and alt and ← or → (not the arrow keys) doesn't do anything.
I also persisted the blacklist after first boot and fixed the touchpad because the default decroded-ass no-tap-to-click behaviour is more infuriating than you'd think in a.d. 2023.
chrust$ cat /etc/modprobe.d/avs.conf # https://docs.chrultrabook.com/docs/installing/installing-linux.html#fixing-audio-1 # DANGER: Using AVS on a device with max98357a will blow your speakers. You have been warned. blacklist snd-soc-avs chrust$ cat /etc/X11/xorg.conf.d/touchpad.conf Section "InputClass" Identifier "Touchpads normal" MatchIsTouchpad "on" Option "Tapping" "on" EndSection
# Post Install
- Tip
- Install Chrultrabook Controller for fan controls, keyboard backlight controls, system information and more.
This machine has neither, and the "system information" in the screenshots appears to be the first three lines of dmesg.
# Linux
# General QOL Fixes
- Run the audio script if you haven't already.
Heed the Danger, of course, if you installed Bookworm. The script checks if you have an audio daemon installed (in my case wireplumber), so make sure you do install it first. But, yes, this does work:
chrust:/tmp$ git clone https://github.com/WeirdTreeThing/chromebook-linux-audio Cloning into 'chromebook-linux-audio'... Resolving deltas: 100% (256/256), done. chrust:/tmp$ cd chromebook-linux-audio/ chrust:/tmp/chromebook-linux-audio$ ./setup-audio [sudo] password for nabijaczleweli: WARNING: You may run into audio issues, even after running this script. Please report any issues on github. Installing SOF Installing SOF firmware Installing modprobe config Installing UCM configuration Cloning into '/tmp/chromebook-ucm-conf'... Resolving deltas: 100% (614/614), done. Increasing alsa headroom (fixes instability) Audio installed successfully! Reboot to finish setup. chrust:/tmp/chromebook-linux-audio# for f in $(zfs list -t snap -Ho name); do zfs diff -h $f; done M /etc/modprobe.d + /etc/modprobe.d/snd-sof.conf + /etc/wireplumber + /etc/wireplumber/main.lua.d + /etc/wireplumber/main.lua.d/51-increase-headroom.lua M /usr/lib/firmware/intel M /usr/share/lintian/overrides M /usr/share/alsa/ucm2/codecs M /usr/share/alsa/ucm2/codecs/hda M /usr/share/alsa/ucm2/common/pcm M /usr/share/alsa/ucm2/conf.d M /usr/share/alsa/ucm2/conf.d/acp3xalc5682m98 M /usr/share/alsa/ucm2/conf.d/sof-glkda7219ma M /usr/share/alsa/ucm2/platforms M /usr/share/alsa/ucm2/AMD/acp3xalc5682m98/acp3xalc5682m98.conf M /usr/share/alsa/ucm2/Intel/sof-glkda7219max/sof-glkda7219max.conf M /usr/share/alsa/ucm2/codecs/hda/hdmi.conf M /usr/share/alsa/ucm2/common/pcm/split.conf + /usr/lib/firmware/intel/sof
+ /usr/lib/firmware/intel/sof/community
+ /usr/lib/firmware/intel/sof/community/sof-apl.ri + /usr/lib/firmware/intel/sof/community/sof-cnl.ri + /usr/lib/firmware/intel/sof/community/sof-icl.ri + /usr/lib/firmware/intel/sof/community/sof-jsl.ri + /usr/lib/firmware/intel/sof/community/sof-tgl-h.ri + /usr/lib/firmware/intel/sof/community/sof-tgl.ri+ /usr/lib/firmware/intel/sof/intel-signed
+ /usr/lib/firmware/intel/sof/intel-signed/sof-adl-n.ri + /usr/lib/firmware/intel/sof/intel-signed/sof-adl-s.ri + /usr/lib/firmware/intel/sof/intel-signed/sof-adl.ri + /usr/lib/firmware/intel/sof/intel-signed/sof-apl.ri + /usr/lib/firmware/intel/sof/intel-signed/sof-cnl.ri + /usr/lib/firmware/intel/sof/intel-signed/sof-ehl.ri + /usr/lib/firmware/intel/sof/intel-signed/sof-icl.ri + /usr/lib/firmware/intel/sof/intel-signed/sof-jsl.ri + /usr/lib/firmware/intel/sof/intel-signed/sof-tgl-h.ri + /usr/lib/firmware/intel/sof/intel-signed/sof-tgl.ri+ /usr/lib/firmware/intel/sof/sof-apl.ldc
+ /usr/lib/firmware/intel/sof/sof-bdw.ldc + /usr/lib/firmware/intel/sof/sof-bdw.ri + /usr/lib/firmware/intel/sof/sof-byt.ldc + /usr/lib/firmware/intel/sof/sof-byt.ri + /usr/lib/firmware/intel/sof/sof-cht.ldc + /usr/lib/firmware/intel/sof/sof-cht.ri + /usr/lib/firmware/intel/sof/sof-cnl.ldc + /usr/lib/firmware/intel/sof/sof-icl.ldc + /usr/lib/firmware/intel/sof/sof-jsl.ldc + /usr/lib/firmware/intel/sof/sof-tgl-h.ldc + /usr/lib/firmware/intel/sof/sof-tgl.ldc+ /usr/lib/firmware/intel/sof-ipc4 + /usr/lib/firmware/intel/sof-ipc4/mtl + /usr/lib/firmware/intel/sof-ipc4/mtl/community + /usr/lib/firmware/intel/sof-ipc4/mtl/community/sof-mtl.ri + /usr/lib/firmware/intel/sof-ipc4/mtl/intel-signed + /usr/lib/firmware/intel/sof-ipc4/mtl/intel-signed/sof-mtl.ri+ /usr/lib/firmware/intel/sof-ace-tplg
+ /usr/lib/firmware/intel/sof-ace-tplg/sof-hda-generic-2ch.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-hda-generic-4ch.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-hda-generic-idisp.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-hda-generic.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-cs42l43-l0-cs35l56-l12.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-max98357a-rt5682-ssp2-ssp0-2ch-pdm1.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-max98357a-rt5682-ssp2-ssp0.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-max98357a-rt5682.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-rt1019-rt5682.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-rt1318-l12-rt714-l0.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-rt711-4ch.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-rt711-l0-rt1316-l23-rt714-l1.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-rt712-l0-rt1712-l3.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-rt713-l0-rt1316-l12-rt1713-l3.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-rt713-l0-rt1316-l12.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-rt722-l0.tplg + /usr/lib/firmware/intel/sof-ace-tplg/sof-mtl-sdw-cs42l42-l0-max98363-l2.tplg+ /usr/share/doc/firmware-sof-signed + /usr/share/doc/firmware-sof-signed/changelog.Debian.gz + /usr/share/doc/firmware-sof-signed/copyright + /usr/share/lintian/overrides/firmware-sof-signed+ /usr/lib/firmware/intel/sof-tplg
+ /usr/lib/firmware/intel/sof-tplg/sof-acp.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-cs35l41.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-es8336-dmic2ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-es8336-dmic2ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-es8336-dmic2ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-es8336-dmic4ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-es8336-dmic4ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-es8336-dmic4ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-es8336-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-es8336-ssp1-hdmi-ssp02.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-es8336-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-es8336-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-es8336.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98357a-rt5682-2way.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98357a-rt5682-4ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98357a-rt5682-rtnr.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98357a-rt5682-waves-2way.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98357a-rt5682-waves.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98357a-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98360a-da7219.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98360a-nau8825.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98360a-rt5682-2way.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98360a-rt5682-4ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98360a-rt5682-rtnr.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98360a-rt5682-waves.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98360a-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98373-nau8825-dts.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98373-nau8825.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98390-rt5682-google-aec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98390-rt5682-rtnr.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98390-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-max98390-ssp2-rt5682-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-nau8318-nau8825.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-nau8825.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-nocodec-ci.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-nocodec-hdmi-ssp02.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt1015-nau8825.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt1019-nau8825.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt1019-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt1316-l1-mono-rt714-l0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt1316-l12-rt714-l0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt1316-l2-mono-rt714-l0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt1316-l2-mono-rt714-l3.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt5650.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt711-4ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt711-l0-rt1308-l12-rt715-l3.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt711-l0-rt1316-l12-rt714-l3.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt711-l0-rt1316-l13-rt714-l2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt711-l0-rt1316-l2-2ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt711-l0-rt1316-l2-4ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt711-l0-rt1316-l3-2ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt711-l2-rt1316-l01-rt714-l3.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt711-l2-rt1316-l01.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-rt711.tplg + /usr/lib/firmware/intel/sof-tplg/sof-adl-sdw-max98373-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-da7219.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-demux-pcm512x.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336-dmic2ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336-dmic2ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336-dmic2ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336-dmic2ch-ssp5.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336-dmic4ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336-dmic4ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336-dmic4ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336-dmic4ch-ssp5.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336-ssp5.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-es8336.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-keyword-detect.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-nocodec-ci.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-pcm512x-master-44100.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-pcm512x-master.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-pcm512x.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-rt298.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-tdf8532.tplg + /usr/lib/firmware/intel/sof-tplg/sof-apl-wm8804.tplg + /usr/lib/firmware/intel/sof-tplg/sof-bdw-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-bdw-rt286.tplg + /usr/lib/firmware/intel/sof-tplg/sof-bdw-rt5640.tplg + /usr/lib/firmware/intel/sof-tplg/sof-bdw-rt5677.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-cx2072x-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-cx2072x.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-da7213-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-da7213.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-es8316-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-es8316.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-max98090.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-rt5640-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-rt5640.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-rt5645-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-rt5645.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-rt5651-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-rt5651.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-rt5670-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-rt5670.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-rt5682-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-byt-wm5102-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cht-cx2072x.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cht-da7213.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cht-es8316.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cht-max98090.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cht-nau8824.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cht-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cht-rt5640.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cht-rt5645.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cht-rt5651.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cht-rt5670.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cht-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-da7219-max98357a.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-da7219-max98390.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-demux-rt5682-max98357a.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-demux-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-es8336-dmic2ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-es8336-dmic2ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-es8336-dmic2ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-es8336-dmic4ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-es8336-dmic4ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-es8336-dmic4ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-es8336-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-es8336-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-es8336-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-rt1011-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-rt5682-kwd.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-rt5682-max98357a.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-rt700-2ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-rt700-4ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-rt700.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-rt711-rt1308-mono-rt715.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cml-rt711-rt1308-rt715.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cnl-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-cnl-rt274.tplg + /usr/lib/firmware/intel/sof-tplg/sof-ehl-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-ehl-rt5660-nohdmi.tplg + /usr/lib/firmware/intel/sof-tplg/sof-ehl-rt5660.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-cs42l42.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-da7219-kwd.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-da7219.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336-dmic2ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336-dmic2ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336-dmic2ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336-dmic2ch-ssp5.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336-dmic4ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336-dmic4ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336-dmic4ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336-dmic4ch-ssp5.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336-ssp5.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-es8336.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-glk-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-hda-generic-1ch-pdm1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-hda-generic-1ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-hda-generic-2ch-kwd.tplg + /usr/lib/firmware/intel/sof-tplg/sof-hda-generic-2ch-pdm1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-hda-generic-2ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-hda-generic-3ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-hda-generic-4ch-kwd.tplg + /usr/lib/firmware/intel/sof-tplg/sof-hda-generic-4ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-hda-generic-idisp-2ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-hda-generic-idisp-4ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-hda-generic-idisp.tplg + /usr/lib/firmware/intel/sof-tplg/sof-hda-generic.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-dmic-4ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-es8336-dmic2ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-es8336-dmic2ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-es8336-dmic2ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-es8336-dmic4ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-es8336-dmic4ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-es8336-dmic4ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-es8336-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-es8336-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-es8336-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-rt5682-kwd.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-rt700-2ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-rt700-4ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-rt700.tplg + /usr/lib/firmware/intel/sof-tplg/sof-icl-rt711-rt1308-rt715.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8-compr-wm8960-mixer.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8-cs42888-mixer.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8-cs42888.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8-drc-wm8960.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8-eq-fir-wm8960.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8-eq-iir-wm8960.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8-nocodec-sai.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8-wm8960-kwd.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8-wm8960-mixer.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8-wm8960.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8mp-compr-wm8960-mixer.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8mp-drc-wm8960.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8mp-eq-fir-wm8960.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8mp-eq-iir-wm8960.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8mp-wm8904.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8mp-wm8960-kwd.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8mp-wm8960-mixer.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8mp-wm8960.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8ulp-9x9-btsco.tplg + /usr/lib/firmware/intel/sof-tplg/sof-imx8ulp-btsco.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-cs42l42-mx98360a.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-da7219-mx98360a.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-es8336-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-da7219.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-es8336-dmic2ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-es8336-dmic2ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-es8336-dmic2ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-es8336-dmic4ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-es8336-dmic4ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-es8336-dmic4ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-es8336-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-es8336-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-es8336-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-rt5682-mx98360a.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-rt5682-rt1015-xperi.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-rt5682-rt1015.tplg + /usr/lib/firmware/intel/sof-tplg/sof-jsl-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-mt8186-mt6366-da7219-max98357.tplg + /usr/lib/firmware/intel/sof-tplg/sof-mt8186-mt6366-rt1019-rt5682s.tplg + /usr/lib/firmware/intel/sof-tplg/sof-mt8195-mt6359-max98390-rt5682-google-aec-rtnr.tplg + /usr/lib/firmware/intel/sof-tplg/sof-mt8195-mt6359-max98390-rt5682-rtnr.tplg + /usr/lib/firmware/intel/sof-tplg/sof-mt8195-mt6359-max98390-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-mt8195-mt6359-rt1019-rt5682-dts.tplg + /usr/lib/firmware/intel/sof-tplg/sof-mt8195-mt6359-rt1019-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rn-rt5682-max98360.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rn-rt5682-rt1019.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rpl-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rpl-rt1316-l12-rt714-l0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rpl-rt711-4ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rpl-rt711-l0-rt1316-l12-rt714-l3.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rpl-rt711-l0-rt1316-l12.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rpl-rt711-l0-rt1318-l12-rt714-l3.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rpl-rt711-l0-rt1318-l12.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rpl-rt711-l0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rpl-rt711-l2-rt1316-l01-rt714-l3.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rpl-rt711-l2-rt1316-l01.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rpl-rt711-l2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-rpl-rt711.tplg + /usr/lib/firmware/intel/sof-tplg/sof-smart-amplifier-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-es8336-dmic2ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-es8336-dmic2ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-es8336-dmic2ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-es8336-dmic4ch-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-es8336-dmic4ch-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-es8336-dmic4ch-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-es8336-ssp0.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-es8336-ssp1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-es8336.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-h-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-max98357a-rt5682-pdm1-drceq.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-max98357a-rt5682-pdm1-google-aec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-max98357a-rt5682-pdm1.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-max98357a-rt5682-rtnr.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-max98357a-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-max98373-rt5682-igonr.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-max98373-rt5682-xperi.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-max98373-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-nocodec-ci.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-nocodec-hdmi-ssp15.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-nocodec.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-rt1011-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-rt1308-ssp2-hdmi-ssp15.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-rt5682-ssp0-max98373-ssp2-xperi.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-rt5682-ssp0-max98373-ssp2.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-rt711-4ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-rt711-l0-rt1316-l1-mono-rt714-l3.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-rt711-rt1308-2ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-rt711-rt1308-4ch.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-rt711-rt1308-mono-rt715.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-rt711-rt1308-rt715.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-rt711-rt1316-rt714.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-rt715-rt711-rt1308-mono.tplg + /usr/lib/firmware/intel/sof-tplg/sof-tgl-sdw-max98373-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-whl-demux-rt5682.tplg + /usr/lib/firmware/intel/sof-tplg/sof-whl-rt5682-kwd.tplg + /usr/lib/firmware/intel/sof-tplg/sof-whl-rt5682.tplg+ /usr/lib/firmware/intel/sof/community/sof-adl-n.ri
+ /usr/lib/firmware/intel/sof/community/sof-adl-s.ri + /usr/lib/firmware/intel/sof/community/sof-adl.ri + /usr/lib/firmware/intel/sof/community/sof-cfl.ri + /usr/lib/firmware/intel/sof/community/sof-cml.ri + /usr/lib/firmware/intel/sof/community/sof-ehl.ri + /usr/lib/firmware/intel/sof/community/sof-glk.ri + /usr/lib/firmware/intel/sof/community/sof-rpl-s.ri + /usr/lib/firmware/intel/sof/community/sof-rpl.ri+ /usr/lib/firmware/intel/sof/intel-signed/sof-cfl.ri
+ /usr/lib/firmware/intel/sof/intel-signed/sof-cml.ri + /usr/lib/firmware/intel/sof/intel-signed/sof-glk.ri + /usr/lib/firmware/intel/sof/intel-signed/sof-rpl-s.ri + /usr/lib/firmware/intel/sof/intel-signed/sof-rpl.ri+ /usr/lib/firmware/intel/sof-ipc4/mtl/sof-mtl.ri+ /usr/lib/firmware/intel/sof/sof-adl-n.ldc
+ /usr/lib/firmware/intel/sof/sof-adl-n.ri + /usr/lib/firmware/intel/sof/sof-adl-s.ldc + /usr/lib/firmware/intel/sof/sof-adl-s.ri + /usr/lib/firmware/intel/sof/sof-adl.ldc + /usr/lib/firmware/intel/sof/sof-adl.ri + /usr/lib/firmware/intel/sof/sof-apl.ri + /usr/lib/firmware/intel/sof/sof-cfl.ldc + /usr/lib/firmware/intel/sof/sof-cfl.ri + /usr/lib/firmware/intel/sof/sof-cml.ldc + /usr/lib/firmware/intel/sof/sof-cml.ri + /usr/lib/firmware/intel/sof/sof-cnl.ri + /usr/lib/firmware/intel/sof/sof-ehl.ldc + /usr/lib/firmware/intel/sof/sof-ehl.ri + /usr/lib/firmware/intel/sof/sof-glk.ldc + /usr/lib/firmware/intel/sof/sof-glk.ri + /usr/lib/firmware/intel/sof/sof-icl.ri + /usr/lib/firmware/intel/sof/sof-jsl.ri + /usr/lib/firmware/intel/sof/sof-rpl-s.ldc + /usr/lib/firmware/intel/sof/sof-rpl-s.ri + /usr/lib/firmware/intel/sof/sof-rpl.ldc + /usr/lib/firmware/intel/sof/sof-rpl.ri + /usr/lib/firmware/intel/sof/sof-tgl-h.ri + /usr/lib/firmware/intel/sof/sof-tgl.ri+ /usr/share/alsa/ucm2/conf.d/sof-nau8825
+ /usr/share/alsa/ucm2/conf.d/sof-nau8825/HiFi.kano.conf + /usr/share/alsa/ucm2/conf.d/sof-nau8825/HiFi.osiris.conf + /usr/share/alsa/ucm2/conf.d/sof-nau8825/sof-nau8825.conf+ /usr/share/alsa/ucm2/conf.d/sof-ssp_amp
+ /usr/share/alsa/ucm2/conf.d/sof-ssp_amp/HiFi.vell.conf + /usr/share/alsa/ucm2/conf.d/sof-ssp_amp/sof-ssp_amp.conf+ /usr/share/alsa/ucm2/conf.d/sof-bxtda7219ma
+ /usr/share/alsa/ucm2/conf.d/sof-bxtda7219ma/HiFi.conf + /usr/share/alsa/ucm2/conf.d/sof-bxtda7219ma/sof-bxtda7219ma.conf+ /usr/share/alsa/ucm2/conf.d/avs_da7219
+ /usr/share/alsa/ucm2/conf.d/avs_da7219/HiFi.conf + /usr/share/alsa/ucm2/conf.d/avs_da7219/avs_da7219.conf+ /usr/share/alsa/ucm2/conf.d/avs_dmic
+ /usr/share/alsa/ucm2/conf.d/avs_dmic/HiFi.conf + /usr/share/alsa/ucm2/conf.d/avs_dmic/avs_dmic.conf+ /usr/share/alsa/ucm2/conf.d/avs_max98357a
+ /usr/share/alsa/ucm2/conf.d/avs_max98357a/HiFi.conf + /usr/share/alsa/ucm2/conf.d/avs_max98357a/avs_max98357a.conf+ /usr/share/alsa/ucm2/conf.d/avs_max98373
+ /usr/share/alsa/ucm2/conf.d/avs_max98373/HiFi.conf + /usr/share/alsa/ucm2/conf.d/avs_max98373/avs_max98373.conf+ /usr/share/alsa/ucm2/conf.d/avs_max98927
+ /usr/share/alsa/ucm2/conf.d/avs_max98927/HiFi.conf + /usr/share/alsa/ucm2/conf.d/avs_max98927/avs_max98927.conf+ /usr/share/alsa/ucm2/conf.d/avs_nau8825
+ /usr/share/alsa/ucm2/conf.d/avs_nau8825/HiFi.conf + /usr/share/alsa/ucm2/conf.d/avs_nau8825/avs_nau8825.conf+ /usr/share/alsa/ucm2/conf.d/avs_rt5663
+ /usr/share/alsa/ucm2/conf.d/avs_rt5663/HiFi.conf + /usr/share/alsa/ucm2/conf.d/avs_rt5663/avs_rt5663.conf+ /usr/share/alsa/ucm2/conf.d/avs_ssm4567-adi
+ /usr/share/alsa/ucm2/conf.d/avs_ssm4567-adi/HiFi.conf + /usr/share/alsa/ucm2/conf.d/avs_ssm4567-adi/avs_ssm4567-adi.conf+ /usr/share/alsa/ucm2/conf.d/hdaudioB0D2
+ /usr/share/alsa/ucm2/conf.d/hdaudioB0D2/HiFi.conf + /usr/share/alsa/ucm2/conf.d/hdaudioB0D2/hdaudioB0D2.conf+ /usr/share/alsa/ucm2/conf.d/sof-rt5682s-rt1
+ /usr/share/alsa/ucm2/conf.d/sof-rt5682s-rt1/HiFi.conf + /usr/share/alsa/ucm2/conf.d/sof-rt5682s-rt1/sof-rt5682s-rt1.conf+ /usr/share/alsa/ucm2/conf.d/sof-cml_max9839
+ /usr/share/alsa/ucm2/conf.d/sof-cml_max9839/HiFi.conf + /usr/share/alsa/ucm2/conf.d/sof-cml_max9839/sof-cml_max9839.conf+ /usr/share/alsa/ucm2/conf.d/sof-cml_rt1011_
+ /usr/share/alsa/ucm2/conf.d/sof-cml_rt1011_/HiFi.conf + /usr/share/alsa/ucm2/conf.d/sof-cml_rt1011_/sof-cml_rt1011_.conf+ /usr/share/alsa/ucm2/conf.d/sof-cmlda7219ma
+ /usr/share/alsa/ucm2/conf.d/sof-cmlda7219ma/HiFi.conf+ /usr/share/alsa/ucm2/conf.d/sof-cmlda7219ma/sof-cmlda7219ma.conf
+ /usr/share/alsa/ucm2/conf.d/sof-glkda7219ma/HiFi.conf+ /usr/share/alsa/ucm2/conf.d/sof-glkrt5682ma
+ /usr/share/alsa/ucm2/conf.d/sof-glkrt5682ma/HiFi.conf + /usr/share/alsa/ucm2/conf.d/sof-glkrt5682ma/sof-glkrt5682ma.conf+ /usr/share/alsa/ucm2/conf.d/sof-da7219max98
+ /usr/share/alsa/ucm2/conf.d/sof-da7219max98/HiFi.conf + /usr/share/alsa/ucm2/conf.d/sof-da7219max98/sof-da7219max98.conf+ /usr/share/alsa/ucm2/conf.d/sof-rt5682s-hs-
+ /usr/share/alsa/ucm2/conf.d/sof-rt5682s-hs-/HiFi.conf + /usr/share/alsa/ucm2/conf.d/sof-rt5682s-hs-/sof-rt5682s-hs-.conf+ /usr/share/alsa/ucm2/conf.d/mt8183_da7219_r
+ /usr/share/alsa/ucm2/conf.d/mt8183_da7219_r/HiFi.conf + /usr/share/alsa/ucm2/conf.d/mt8183_da7219_r/mt8183_da7219_rt1015p.conf+ /usr/share/alsa/ucm2/conf.d/mt8183_mt6358_t
+ /usr/share/alsa/ucm2/conf.d/mt8183_mt6358_t/HiFi.conf + /usr/share/alsa/ucm2/conf.d/mt8183_mt6358_t/mt8183_mt6358_ts3a227_max98357.conf+ /usr/share/alsa/ucm2/conf.d/HD-Audio Generic
+ /usr/share/alsa/ucm2/conf.d/HD-Audio Generic/HD-Audio Generic.conf + /usr/share/alsa/ucm2/conf.d/HD-Audio Generic/HiFi.conf+ /usr/share/alsa/ucm2/conf.d/acp3xalc5682101
+ /usr/share/alsa/ucm2/conf.d/acp3xalc5682101/HiFi.conf + /usr/share/alsa/ucm2/conf.d/acp3xalc5682101/acp3xalc5682101.conf + /usr/share/alsa/ucm2/conf.d/acp3xalc5682m98/HiFi.conf+ /usr/share/alsa/ucm2/conf.d/HDA ATI HDMI
+ /usr/share/alsa/ucm2/conf.d/HDA ATI HDMI/HDA ATI HDMI.conf + /usr/share/alsa/ucm2/conf.d/HDA ATI HDMI/HiFi.conf+ /usr/share/alsa/ucm2/codecs/cs42l42 + /usr/share/alsa/ucm2/codecs/cs42l42/init.conf + /usr/share/alsa/ucm2/codecs/hda/hdmi234.conf + /usr/share/alsa/ucm2/codecs/hda/hdmi2345.conf + /usr/share/alsa/ucm2/codecs/hda/hdmi345.conf + /usr/share/alsa/ucm2/codecs/hda/hdmi567.conf+ /usr/share/alsa/ucm2/conf.d/acpd7219m98357
+ /usr/share/alsa/ucm2/conf.d/acpd7219m98357/HiFi.conf + /usr/share/alsa/ucm2/conf.d/acpd7219m98357/acpd7219m98357.conf+ /usr/share/alsa/ucm2/codecs/max98357a
+ /usr/share/alsa/ucm2/codecs/max98357a/speaker.conf+ /usr/share/alsa/ucm2/codecs/max98373
+ /usr/share/alsa/ucm2/codecs/max98373/init.conf + /usr/share/alsa/ucm2/codecs/max98373/speaker.conf+ /usr/share/alsa/ucm2/codecs/max98390
+ /usr/share/alsa/ucm2/codecs/max98390/init.conf+ /usr/share/alsa/ucm2/codecs/rt1011
+ /usr/share/alsa/ucm2/codecs/rt1011/init.conf + /usr/share/alsa/ucm2/codecs/rt1011/speaker.conf+ /usr/share/alsa/ucm2/codecs/rt1015
+ /usr/share/alsa/ucm2/codecs/rt1015/init.conf + /usr/share/alsa/ucm2/codecs/rt1015/speaker.conf+ /usr/share/alsa/ucm2/codecs/rt1015p
+ /usr/share/alsa/ucm2/codecs/rt1015p/speaker.conf+ /usr/share/alsa/ucm2/codecs/rt1019
+ /usr/share/alsa/ucm2/codecs/rt1019/init.conf+ /usr/share/alsa/ucm2/codecs/rt1019p
+ /usr/share/alsa/ucm2/codecs/rt1019p/speaker.conf+ /usr/share/alsa/ucm2/platforms/intel-sof + /usr/share/alsa/ucm2/platforms/intel-sof/platform.conf+ /usr/share/alsa/ucm2/codecs/rt5682s
+ /usr/share/alsa/ucm2/codecs/rt5682s/headset.conf + /usr/share/alsa/ucm2/codecs/rt5682s/init.conf+ /usr/share/alsa/ucm2/conf.d/sof-rt5682
+ /usr/share/alsa/ucm2/conf.d/sof-rt5682/HiFi.conf + /usr/share/alsa/ucm2/conf.d/sof-rt5682/codecs.conf + /usr/share/alsa/ucm2/conf.d/sof-rt5682/rt5682-headset.conf + /usr/share/alsa/ucm2/conf.d/sof-rt5682/rt5682-init.conf + /usr/share/alsa/ucm2/conf.d/sof-rt5682/sof-rt5682.confM /var/cache/apt M /var/cache/apt/archives M /var/cache/apt/archives/partial + /var/cache/apt/archives/firmware-sof-signed_2023.12-1_all.deb + /var/lib/dpkg/info/firmware-sof-signed.md5sums + /var/lib/dpkg/info/firmware-sof-signed.postinst + /var/lib/dpkg/info/firmware-sof-signed.postrm + /var/lib/dpkg/info/firmware-sof-signed.preinst + /var/lib/dpkg/info/firmware-sof-signed.list M /var/log/apt M /var/log/apt/term.log M /var/log/apt/history.log M /var/log/dpkg.log chrust:/tmp/chromebook-linux-audio$ cat /etc/modprobe.d/snd-sof.conf options snd-intel-dspcfg dsp_driver=3 chrust:/tmp/chromebook-linux-audio$ cat /etc/wireplumber/main.lua.d/51-increase-headroom.lua rule = { matches = { { { "node.name", "matches", "alsa_output.*" }, }, }, apply_properties = { ["api.alsa.headroom"] = 4096, }, } table.insert(alsa_monitor.rules,rule)+ /usr/share/alsa/ucm2/conf.d/sof-cs42l42
+ /usr/share/alsa/ucm2/conf.d/sof-cs42l42/HiFi.conf + /usr/share/alsa/ucm2/conf.d/sof-cs42l42/sof-cs42l42.confAnd after a reboot I could play aloud my album, all without the Dangerous driver.
- Run the cros-keyboard-map script to remap top row FX keys.
This is actually much less annoying than the Home/End/PgUp/PgDn situation, which on normal small keyboards is Fn+←/→/↑/↓, but this is not mapped to alt+˂/˃/˄/˅ here, which sucks shit. No Delete is pretty bad as well. The top row is, accd'g to
xev
,
- esc
Escape
- ←
XF86Back
- →
XF86Forward
- ⟳
XF86Reload
- nothing?
XF86LaunchA
- ☀️
XF86MonBrightnessDown
- ☀️
XF86MonBrightnessUp
- 🔇
XF86AudioMute
- 🔉
XF86AudioLowerVolume
- 🔊
XF86AudioRaiseVolume
- 🔒
XF86Sleep
(🔒 is the Suspend Key and handled by logind by default; to see it you need to unmap it in /etc/systemd/logind.conf; I settled on
[Login] HandlePowerKey=hibernate HandleSuspendKey=ignore HandleSuspendKeyLongPress=ignore.) Caps Lock is replaced with
- 🔍
Super_L
Why 🔉/🔊 are on the keyboard when there are physical buttons for them (or vice versa) is beyond me, too.
The upstream instructions say to run install.sh, but on Debian that installs keyd off unchecked HEAD (which until three weeks ago dumped shit into /usr, and the installer checks for /usr/bin/keyd and will do it again; it continues to run unadorned
groupadd keyd
to add a system group!), first cloning it to no-where, and generates a config with# make vivaldi keys act like vivaldi keys when super isn't held for scancode in physmap: # Map zoom to f11 since most applications wont listen to zoom if vivaldi_scancode_to_keyd(scancode) == "zoom": mapping = "f11" else: mapping = vivaldi_scancode_to_keyd(scancode) config += f"{vivaldi_scancode_to_keyd(scancode)} = {mapping}\n" # map lock button to coffee config += "\nf13=coffee\nsleep=coffee\n"
This would be excessive, but we can't actually even see
and the standard remapping facilities are insufficiently expressive anyway.
There's a 2024-01-04 ITP for keyd with no linked dsc, but it features on mentors.d.n, which, well, if I posted I could never show my face in public again (and it takes over a minute for one python program at 100% CPU on my big host, so there's no way it'd ever finish building on a shitty Celeron), but this is what mentors is for, so let's accept keyd is not in Debian:
nabijaczleweli@chrust:~$ git clone http://github.com/rvaiya/keyd Cloning into 'keyd'... warning: redirecting to https://github.com/rvaiya/keyd/ Resolving deltas: 100% (2214/2214), done. nabijaczleweli@chrust:~$ sudo mv keyd/ /usr/local/src/ [sudo] password for nabijaczleweli: nabijaczleweli@chrust:~$ cd /usr/local/src/keyd/ nabijaczleweli@chrust:/usr/local/src/keyd$ git log -1 commit dcbb68b12f71245121035b730b50872802a259b4 Author: Takahashi, Naoki <102382754+tkna91@users.noreply.github.com> Date: Wed Dec 20 02:38:10 2023 +0900 Add description of KEYD_DEBUG nabijaczleweli@chrust:/usr/local/src/keyd$ CFLAGS=-march=native LDFLAGS=-flto make mkdir bin cp scripts/keyd-application-mapper bin/ sed -e 's#@PREFIX@#/usr/local#' keyd.service.in > keyd.service cc -DVERSION=\"v2.4.3\ \(dcbb68b\)\" -I/usr/local/include -L/usr/local/lib -Wall -Wextra -Wno-unused -std=c11 -DSOCKET_PATH=\"/var/run/keyd.socket\" -DCONFIG_DIR=\"/etc/keyd\" -DDATA_DIR=\"/usr/local/share/keyd\" -D_FORTIFY_SOURCE=2 -D_DEFAULT_SOURCE -Werror=format-security -march=native -O3 src/*.c src/vkbd/uinput.c -lpthread -o bin/keyd -flto src/daemon.c: In function ‘add_listener’: src/daemon.c:84:33: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 84 | write(con, layer->type == LT_LAYOUT ? "/" : "+", 1); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/daemon.c:85:33: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 85 | write(con, layer->name, strlen(layer->name)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/daemon.c:86:33: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 86 | write(con, "\n", 1); | ^~~~~~~~~~~~~~~~~~~ nabijaczleweli@chrust:/usr/local/src/keyd$ sudo make install mkdir -p /etc/keyd mkdir -p /usr/local/bin/ mkdir -p /usr/local/share/keyd/ mkdir -p /usr/local/share/keyd/layouts/ mkdir -p /usr/local/share/man/man1/ mkdir -p /usr/local/share/doc/keyd/ mkdir -p /usr/local/share/doc/keyd/examples/ groupadd keyd install -m755 bin/* /usr/local/bin/ install -m644 docs/*.md /usr/local/share/doc/keyd/ install -m644 examples/* /usr/local/share/doc/keyd/examples/ install -m644 layouts/* /usr/local/share/keyd/layouts install -m644 data/*.1.gz /usr/local/share/man/man1/ install -m644 data/keyd.compose /usr/local/share/keyd/ nabijaczleweli@chrust:/usr/local/src/keyd$ getent group keyd keyd:x:1001: nabijaczleweli@chrust:/usr/local/src/keyd$ sudo delgroup keyd info: Removing group `keyd' ... nabijaczleweli@chrust:/usr/local/src/keyd$ sudo addgroup keyd info: Selecting GID from range 100 to 999 ... info: Adding group `keyd' (GID 109) ... root@chrust:/usr/local/src/keyd# for f in $(zfs list -t snap -Ho name | grep keyd); do zfs diff -h $f; done M /etc/ M /etc/group- M /etc/gshadow- - /etc/group - /etc/gshadow + /etc/group + /etc/gshadow + /etc/keyd M /etc/systemd/system/sysinit.target.wants + /etc/systemd/system/sysinit.target.wants/keyd.service M /usr/local/share M /usr/local/share/man M /usr/local/bin M /usr/local/lib M /usr/local/src + /usr/local/src/keyd (&c.) + /usr/local/lib/systemd + /usr/local/lib/systemd/system + /usr/local/lib/systemd/system/keyd.service + /usr/local/share/man/man1 + /usr/local/share/doc/keyd/examples + /usr/local/bin/keyd + /usr/local/bin/keyd-application-mapper + /usr/local/share/keyd/layouts/af + /usr/local/share/keyd/layouts/al + /usr/local/share/keyd/layouts/am (and hundreds more, elided for brevity here) + /usr/local/share/keyd + /usr/local/share/keyd/layouts + /usr/local/share/doc + /usr/local/share/doc/keyd + /usr/local/share/doc/keyd/CHANGELOG.md + /usr/local/share/doc/keyd/DESIGN.md + /usr/local/share/doc/keyd/examples/capslock-esc-basic.conf + /usr/local/share/doc/keyd/examples/capslock-escape-with-vim-mode.conf + /usr/local/share/doc/keyd/examples/international-glyphs.conf + /usr/local/share/doc/keyd/examples/macos.conf + /usr/local/share/doc/keyd/examples/meta-esc.conf + /usr/local/share/doc/keyd/examples/nav-layer.conf + /usr/local/share/man/man1/keyd-application-mapper.1.gz + /usr/local/share/man/man1/keyd.1.gz + /usr/local/share/keyd/keyd.compose
and
nabijaczleweli@chrust:~$ git clone http://github.com/WeirdTreeThing/cros-keyboard-map Cloning into 'cros-keyboard-map'... warning: redirecting to https://github.com/WeirdTreeThing/cros-keyboard-map/ Resolving deltas: 100% (26/26), done. nabijaczleweli@chrust:~$ cd cros-keyboard-map/ nabijaczleweli@chrust:~/cros-keyboard-map$ git log -1 commit 25b0e9c2a10fc834d414b427c40d572fb38cda14 Author: WeirdTreeThing <bradyn127@protonmail.com> Date: Tue Dec 12 17:40:08 2023 -0500 Add support for Chimera Linux nabijaczleweli@chrust:~/cros-keyboard-map$ grep -n usr/bin/keyd install.sh 26:if ! [ -f /usr/bin/keyd ]; then nabijaczleweli@chrust:~/cros-keyboard-map$ sed -i 's:.*usr/bin/keyd.*:if false; then:' install.sh nabijaczleweli@chrust:~/cros-keyboard-map$ sed -n 26p install.sh if false; then nabijaczleweli@chrust:~/cros-keyboard-map$ ./install.sh Generating config Installing config [sudo] password for nabijaczleweli: Enabling keyd Created symlink /etc/systemd/system/sysinit.target.wants/keyd.service → /usr/local/lib/systemd/system/keyd.service. Installing libinput configuration Done nabijaczleweli@chrust:~/cros-keyboard-map$ sudo mv $PWD /usr/local/src/ root@chrust:~/cros-keyboard-map# for f in $(zfs list -t snap -Ho name | grep keymap); do zfs diff -h $f; done M /etc/ + /etc/libinput + /etc/libinput/local-overrides.quirks M /etc/keyd + /etc/keyd/cros.conf M /etc/systemd/system/sysinit.target.wants + /etc/systemd/system/sysinit.target.wants/keyd.service M /usr/local/src + /usr/local/src/cros-keyboard-map (&c.)
Now that we've installed a key- and mouse-logger, it doesn't actually work, Thankfully, there's a monitoring interface in the form of
keyd monitor
; so, pressing all of the top row, then 🔍, then the side buttons (filtered for down events):device added: 0001:0001 AT Translated Set 2 keyboard (/dev/input/event0) device added: 04f3:00be Elan Touchpad (/dev/input/event7) device added: 06cb:1a10 SYTS7817:00 06CB:1A10 (/dev/input/event9) +1041019475 ms AT Translated Set 2 keyboard 0001:0001 enter up +672 ms AT Translated Set 2 keyboard 0001:0001 esc down +201 ms AT Translated Set 2 keyboard 0001:0001 back down +192 ms AT Translated Set 2 keyboard 0001:0001 forward down +149 ms AT Translated Set 2 keyboard 0001:0001 refresh down +135 ms AT Translated Set 2 keyboard 0001:0001 zoom down +155 ms AT Translated Set 2 keyboard 0001:0001 scale down +128 ms AT Translated Set 2 keyboard 0001:0001 brightnessdown down +107 ms AT Translated Set 2 keyboard 0001:0001 brightnessup down +113 ms AT Translated Set 2 keyboard 0001:0001 mute down +175 ms AT Translated Set 2 keyboard 0001:0001 volumedown down +139 ms AT Translated Set 2 keyboard 0001:0001 volumeup down +519 ms AT Translated Set 2 keyboard 0001:0001 sleep down +191 ms AT Translated Set 2 keyboard 0001:0001 leftmeta down +173 ms AT Translated Set 2 keyboard 0001:0001 volumedown down +480 ms AT Translated Set 2 keyboard 0001:0001 volumeup down
# systemctl start keyd
device added: 0fac:0ade keyd virtual keyboard (/dev/input/event14) device added: 0fac:1ade keyd virtual pointer (/dev/input/event15) +324 ms keyd virtual keyboard 0fac:0ade esc down +157 ms keyd virtual keyboard 0fac:0ade back down +141 ms keyd virtual keyboard 0fac:0ade forward down +124 ms keyd virtual keyboard 0fac:0ade refresh down +87 ms keyd virtual keyboard 0fac:0ade f11 down +104 ms keyd virtual keyboard 0fac:0ade scale down +139 ms keyd virtual keyboard 0fac:0ade brightnessdown down +129 ms keyd virtual keyboard 0fac:0ade brightnessup down +147 ms keyd virtual keyboard 0fac:0ade mute down +147 ms keyd virtual keyboard 0fac:0ade volumedown down +316 ms keyd virtual keyboard 0fac:0ade volumeup down +263 ms keyd virtual keyboard 0fac:0ade coffee down +221 ms keyd virtual keyboard 0fac:0ade leftmeta down +773 ms keyd virtual keyboard 0fac:0ade volumedown down +339 ms keyd virtual keyboard 0fac:0ade volumeup downSo the only thing that changed was
into F11, And the volume buttons on the side are seemingly indistinguishable from 🔉/🔊.
After a debugging session where I thought my keyd was broken (it had been, but unrelatedly), it turns out the generated mapping is just bonkers. I wasn't gonna include it here because it differs per-model, but the generated /etc/keyd/cros.conf is:
[ids] 0001:0001 [main] f1 = back f2 = forward f3 = refresh f4 = f11 f5 = scale f6 = brightnessdown f7 = brightnessup f8 = mute f9 = volumedown f10 = volumeup back = back forward = forward refresh = refresh zoom = f11 scale = scale brightnessdown = brightnessdown brightnessup = brightnessup mute = mute volumedown = volumedown volumeup = volumeup f13=coffee sleep=coffee [meta] f1 = f1 f2 = f2 f3 = f3 f4 = f4 f5 = f5 f6 = f6 f7 = f7 f8 = f8 f9 = f9 f10 = f10 back = f1 forward = f2 refresh = f3 zoom = f4 scale = f5 brightnessdown = f6 brightnessup = f7 mute = f8 volumedown = f9 volumeup = f10 [alt] backspace = delete brightnessdown = kbdillumdown brightnessup = kbdillumup f6 = kbdillumdown f7 = kbdillumup [control] f5 = print scale = print [control+alt] backspace = C-A-delete
(Rember that lines that start with "
f123 =
" are no-ops, since the keyboard by default generates the special keys.)Yes: this has the ☕, but also identity-maps everything, and you unfuck it by holding 🔍 (the objectively-incorrect mode). Except
, which is in the would-be-F4 position, but it's mapped to F11. 🔒 is mapped to ☕ despite being where Delete usually is, and Delete is achieved with alt+⟵.
I feel like I could do better with
[ids] 0001:0001 [main] # ← back = f1 # → forward = f2 # ⟳ refresh = f3 # tableau zoom = f4 # fast rectangle scale = f5 # small ☀️ brightnessdown = f6 # ☀️ brightnessup = f7 # 🔇 mute = f8 # 🔉 volumedown = f9 # 🔊 volumeup = f10 # 🔒 sleep = delete # 🔍 remains as leftmeta [meta] # tableau zoom = print back = back forward = forward refresh = refresh scale = scale brightnessdown = brightnessdown brightnessup = brightnessup mute = mute volumedown = volumedown volumeup = volumeup sleep = sleep
looks the most like a screen, hence it's mapped to PrtSc. Specifically
, but also ←, →, and ⟳ are prime real estate for mapping something useful to. ctrl+alt+
even works to switch to VT4, and ctrl+alt+🔒 to salute!
With this, the optimal /etc/systemd/logind.conf becomes just the usual
[Login] HandlePowerKey=hibernateIt's also tempting to solve the Home/End/PgUp/PgDn situation here instead of with xmodmap, so appending this to the updated /etc/keyd/cros.conf works like one'd expect (but
[meta]
is better for i3 usage; also note that you can't make another file and have it patch the big one, because at most one file can match each device):[alt] left = home right = end up = pageup down = pagedown
I had to find out the hard way that keyd, by default, mangles Shift_R and Control_R into Shift_L and Control_L. Appending this is necessary to make them work correctly:
# https://github.com/rvaiya/keyd/issues/618 [main] rightcontrol = rightcontrol rightshift = rightshift
Overall, low value-add factor here. The quirks file is nice though. Let's hope it's upstreamed before it breaks, like upstream guarantees it will.
# CELES Post Install Workaround
If you experience issues in applications such as Parsec, or […]Okay but that's so true though?
# Using Ectool
ectool is a utility that is used to interface with the ChromeOS Embedded Controller. It is used to communicate with the embedded controller from userspace and vice versa.Boy I sure hope to use this program to communicate with the embedded controller! I would love to communicate with the ChromeOS Embedded Controller through this program.
Also: no link and it's not in by that name in Debian. Is it the same one as /sbin/ectool from coreboot-utils? Unknowable.
# Conclusions
# pog moments
- normal computer
- normal debian just works
- overall a sensible walk-through
- privacy preserved (ChromeOS didn't ever see the network)
- fun bunny on POST
# cringe-ass nae-nae baby moments
- PXE-booting from a USB-C dongle doesn't work
- small patch and a few round-trips required to actually ensure privacy is preserved
- the recommended keyboard mapping is so bizarre I straight-up thought keyd was broken
- Chrultrabook stance is that users should give up their privacy to make following the guide more convenient (this is used as a justification for a mild editorial oddity and the impetus to retain it is stronger than to simplify the page)
- Chrultrabook and its upstreams appear allergic to actually documenting crucial security-sensitive and stated-as-device-bricking information in the text and actively avoid providing it when questioned
- this extends to Chrultrabook authors posting misinformation at least twice (screenshot), presumably because of this lack of documentation
- were I to guess, this is also probably why they consider users "not technical enough" 🤢 to follow a longer thing they may understand than a magical one-liner
- forum's fucking Discourse
- I ran out of words to put links on for the last one
- I liked her talk but elly threatened to ban me for
Shitting all over the non-profit project, documentation written by community and mentality "I know better than you" is exactly the kind of toxicity we don't want in our community.; one will do well to note we've interacted once on the forum and at most twice off the forum (of her accord) and both of those went fine. Odd behaviour, given that she's the one with the misinformation above, and, well, you've seen this post and you can click through to my mastussy thread and the forum post, none of these are particularly "shitting on", much less toxic. I don't even think I exhibit that mentality, really. Maybe this is a language barrier (we're both polish), seeing as I haven't gotten an actual warning or anything before (except for automatic Discourse bullshit), and another user with admin powers gladly unblocked me (also unprompted and of his own volition) more than once, well.# family guy funny moments
- guide sections are randomly-cased
- paid drivers meme real
Most of the issues out-lined above have been forwarded. That is also the reason for most of them having been discovered.
A good bug report never goes unpunished.
Nit-pick? Correction? Improvement? Annoying? Cute? Anything? Mail, post, or open!
0 words, 0 characters.
Creative text licensed under CC-BY-SA 4.0, code licensed under The MIT License.
This page is open-source, you can find it at GitHub, and contribute and/or yell at me there.
Like what you see? Consider giving me a follow over at social medias listed here, or maybe even a sending a buck liberapay donate or two patreon my way if my software helped you in some significant way?
Compiled with Clang 19's C preprocessor on 10.09.2025 21:18:14 UTC from src/blogn_t/012a-installing-debian-chromebook-lenovo-300e-gen2-intel.html.pp.
See job on builds.sr.ht.
RSS feed