玩转Lenovo 10e Chromebook Tablet:安装ubuntu arm

玩转Lenovo 10e Chromebook Tablet:安装ubuntu arm

canoziia
2023-06-25 / 1 评论 / 1,380 阅读 / 正在检测是否收录...

玩转 Lenovo 10e Chromebook Tablet:安装 ubuntu arm

准备材料

  • 蓝牙鼠标
  • 8G 及以上 U 盘,可以接到 type c 口(有拓展坞也行,就没必要蓝牙鼠标)
  • 一台其他电脑,用于刻录和查资料

解锁平板

拿到机器的时候自带的是 ChromeOS 系统,并且只能从 ChromeOS 启动。为了刷入系统,需要开启开发者模式并打开 USB 启动。进入开发者模式会清除全部用户数据。

关闭机器,同时按住电源键,音量+和音量-5 秒钟并松开,可以看到屏幕亮起,然后再同时按下音量+和音量-,就进入了一个菜单,用音量键移动并选择“关闭系统验证”,点击电源键确认,就进入了开发者模式。

启动后,将在全新的 chromeos 欢迎页面上看到“启用调试模式”。这时会有个框,让你输入密码,可以留空。打开调试模式,进入 chromeos 桌面,并按下 Ctrl+Alt+T 打开 crosh。在 crosh 中输入 shell,回车,可以看到进入了 shell,用户为 chronos。

按 Ctrl+Alt+F2 进入命令行,输入用户名 root,密码 test0000 登录。在 root 的命令行中输入 enable_dev_usb_boot,就打开了 USB 启动。关机。

下载并安装镜像

ubuntu arm 有两种安装方式:直接安装到 emmc 或者安装在 USB/SD 卡。由于 10e 没有 sd 卡槽,直接安装在 emmc 比较方便。在本章节之后,全部都是按照 emmc 编写的,但可以举一反三。

项目地址:https://github.com/hexdump0815/imagebuilder

进入 github 链接点进 releases,找到我们的 cpu mt8183 对应的镜像。 https://github.com/hexdump0815/imagebuilder/blob/main/systems/chromebook_kukui/readme.md

如果要安装在 emmc,需要下载最新和倒数第二新两个镜像。如果只是在 usb/sd 卡中安装,只需要下载最新镜像。

安装在 usb/sd 卡:将镜像刻录到 U 盘/SD 卡中即可。

安装在 emmc:将旧镜像刻录到 U 盘。

插入设备,选择 usb 启动。然后可以看到已经启动到 ubuntu 界面。默认是进入 xfce 桌面,可以点击小齿轮选择 ubuntu on wayland 进入 gnome。密码是 changeme。

以 root 权限运行/scripts/extend-rootfs.sh 扩展根文件系统

复制/下载最新镜像到 usb 中。

# 请根据自己chromebook情况选择设备!一般arm设备是mmcblk0
zcat xxx.img.gz | dd of=/dev/mmcblk0 bs=1M status=progress

这样就完成了安装。安装到 emmc 的。拔掉 usb 并重启;安装到 sd 卡的退出登录。

重命名用户

在登陆界面 Ctrl+Alt+F2,进入 tty2,用 linux 用户登录到控制台,密码 changeme。然后输入 sudo passwd root,将 root 密码更改成你想要的。改完后输入 exit 退出登录,再用 root 用户密码登录。

运行/scripts/rename-default-user.sh xxx,把默认用户 linux 换成你的名字。

设置 btrfs 并安装 timeshift

通过观察会发现,这个镜像采用的是 btrfs 作为根分区。btrfs 可以进行快照,从而很简单的恢复备份。一般而言,ubuntu 系列的系统可以采用 timeshift 进行快照/恢复。但是 timeshift 不支持作者默认的挂载结构,需要我们手动更改。

timeshift 支持的结构:分区下仅有@@home两个子卷,将@挂载为/,将@home挂载为/home。并且要求 btrfs 卷默认挂载subvolid=5 (FS_TREE)

先查看现在作者默认的目录结构:

cd /
btrfs subvol list
# ID 123 gen 3359 top level 5 path swap
# 发现只有一个swap,记下ID后的数字123。

也就是说默认直接把卷的根挂载到/。并且 timeshift 不太支持这种 swap(忘记哪看到的了),因此我们要关闭 swap。

swapoff /swap/
cd / && btrfs subvol delete --subvolid swap的id /
vim /etc/fstab # 删去含swap的那一行

然后我们再创建@和 home 子卷

cd /
btrfs subvolume create @home   # 创建@home子卷
cp -a --reflink home/. @home/. # 复制文件到@home

btrfs subvol snapshot / /@     # 创建并复制文件到@

这时目录已经建好,只需要更改内核命令行修改启动参数即可。更改命令行需要手动修改 boot 分区。如果是 amd64 估计用不着这么麻烦,可以直接在/etc/kernel/cmdline 改

# cat /proc/cmdline
# root@changeme:~# cat /proc/cmdline
# cros_secure cros_secure console=tty1 root=PARTUUID=88xxxxc6-dddd-6341-b468-4a50b1d53e06/PARTNROFF=3 rootwait ro fsck.fix=yes fsck.repair=yes net.ifnames=0 ipv6.disable=1 fw_devlink=off noresume apparmor=0
cat /proc/cmdline > /boot/cmdline
# 先获取当前内核命令行,然后在最后增加rootflags=subvol=@参数,并可以将ipv6.disable改成0开启ipv6。效果如下
# cros_secure cros_secure console=tty1 root=PARTUUID=88xxxxc6-dddd-6341-b468-4a50b1d53e06/PARTNROFF=3 rootwait ro fsck.fix=yes fsck.repair=yes net.ifnames=0 ipv6.disable=0 fw_devlink=off noresume apparmor=0 rootflags=subvol=@
cd /boot
ls # 查看内核版本名
export kver=xxx # 目前大概是 6.1.11-stb-mt8+
cp -v vmlinux.kpart-${kver} vmlinux.kpart-${kver}.old
cp Image-${kver} Image
lz4 -f Image Image.lz4
cp initrd.img-${kver} initrd.img.xz
dd if=/dev/zero of=bootloader.bin bs=512 count=1
ls dtb-${kver}/*.dtb | xargs printf " -b %s" | xargs mkimage -D "-I dts -O dtb -p 2048" -f auto -A arm64 -O linux -T kernel -C lz4 -a 0 -d Image.lz4 kernel.itb
vbutil_kernel --pack vmlinux.kpart --keyblock /usr/share/vboot/devkeys/kernel.keyblock --signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk --version 1 --config cmdline --bootloader bootloader.bin --vmlinuz kernel.itb --arch arm
cp -v vmlinux.kpart /boot/vmlinux.kpart-${kver}
rm -f Image Image.lz4 initrd.img.xz cmdline bootloader.bin kernel.itb vmlinux.kpart

# single boot only testing:
# 这里是测试内核是否能启动,我测试过没问题,所以大家可以跳过这一块,不需要运行
dd if=/boot/vmlinux.kpart-${kver} of=/dev/mmcblk0p2 bs=4096
cgpt add -i 2 -S 0 -T 1 -P 15 /dev/mmcblk0

# worked, then for permanent:
# 最后dd写入内核
dd if=/boot/vmlinux.kpart-${kver} of=/dev/mmcblk0p1 bs=4096

到这里先别着急重启。还需要改/etc/fstab。根据 timeshift 的说法,他的要求特别严格:除了上面的要求以外,还要 fstab 的/和/home 分区必须是用 UUID 或者/dev/mmcblk0p0 这样的形式指定。我们的系统默认是通过 label。大家需要更改。对于这台机子,把里面的 LABEL=rootpart 改成/dev/mmcblk0p4。fstab 需要大致如下,注意里面的 subvol=@,subvol=@home

LABEL=bootpart /boot ext4 defaults,noatime,nodiratime,errors=remount-ro 0 2
/dev/mmcblk0p4 / btrfs defaults,ssd,compress-force=zstd,noatime,nodiratime,subvol=@ 0 1
/dev/mmcblk0p4 /home btrfs defaults,ssd,compress-force=zstd,noatime,nodiratime,subvol=@home 0 0
#/swap/file.0 none swap sw 0 0

更改完 fstab,再用命令设置默认卷

btrfs subvolume set-default 5 /

现在重启,重启之后应该就把@挂载到/,@home 挂载到/home 了。大家如果成功启动并登录就说明是正常的。这一步如果正常,就可以删除在原先磁盘根目录下除了@和@home 的所有文件。

mount /dev/mmcblk0p4 /mnt
cd /mnt && ls
# 现在能看到mnt下有原来根目录文件以及@和@home。删除除这两个以外所有文件。

安装 timeshift

apt install timeshift

到这里 timeshift 就能用了。大家可以先不急着快照,因为屏幕旋转问题还没解决。

修复屏幕旋转角度错误

这个问题是加速度传感器与屏幕方向不匹配。创建一个/etc/udev/hwdb.d/61-sensor-local.hwdb

vim /etc/udev/hwdb.d/61-sensor-local.hwdb
# 内容如下
# sensor:modalias:platform:cros-ec-accel:*
#   ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1

这里的意思是匹配 chromebook 的加速度传感器,并且设置传感器指示的正确方向。然后运行

systemd-hwdb update
udevadm trigger -v -p DEVNAME=/dev/iio:device1
systemctl restart iio-sensor-proxy
monitor-sensor # 如果是在正常横屏情况下显示left-up一般就成功了

拆下键盘,测试下屏幕旋转是否正常。一般就正常了。到这里旋转解决了。

安装 ubuntu-desktop 并卸载多余环境

这里可以根据自己需要操作。想要 ubuntu 的就装 ubuntu-desktop,要 kde 就装 kde,自己解决。安装完后卸载掉多余的桌面环境和包。本文里只写一下安装 ubuntu-desktop 的命令。

apt install ubuntu-desktop
dpkg-reconfigure gdm3 # 选择登陆管理器为gdm3
apt purge *xfce* *lightdm* # 卸载xfce和lightdm

重启即生效。可以看到标志性的 ubuntu 登陆界面。

关于升级系统

从 22.04 往上升级的话,会出现屏幕在刚开机的时候一直是黑的的问题。不知道为啥。可以写一个脚本放在/etc/init/当中,在系统启动时自动重启 gdm。到时候找到 bug 再做其他处理。

root@tab10e:~# cat /etc/init/temporarily-restart-gdm.conf

# 文件内容如下
description     "restart gdm before login"

start on startup

task
exec systemctl restart gdm

系统美化

这个网络上教程一大把,大家可以按照自己口味来。关键词 ubuntu 美化教程

关于电源按钮功能

如果你拿来当一台普通平板使用,想要他在不用时保持超长续航,那么需要设置电源按钮功能为挂起。如果你想要把它拿来当一台一只在线的服务器带屏用(比如把 homeassistant 装在里面),那么显然电源按钮不能一按就挂起或者关机。但是 ubuntu 的电源按钮功能只有 suspend、poweroff、ignore 三种,如果我们不想 suspend,只想按电源关闭屏幕,就需要一些操作。

可以用 acpid 监听电源按钮事件。

apt install acpid

首先 Ubuntu on wayland 关闭屏幕比较困难(X11 相对简单),我们需要用那个当前登录的账户来执行命令,因此需要安装 doas

apt install doas
vim /etc/doas.conf
# 内容如下
permit nopass root

这个配置允许 root 以任何用户身份执行命令,应该没什么安全问题。
然后创建一个脚本/path-your-script/powerbutton.sh

#!/bin/bash
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
export XDG_RUNTIME_DIR=/run/user/1000
mode=$(busctl --user get-property org.gnome.Mutter.DisplayConfig /org/gnome/Mutter/DisplayConfig org.gnome.Mutter.DisplayConfig PowerSaveMode)
logger "busctl --user get-property org.gnome.Mutter.DisplayConfig /org/gnome/Mutter/DisplayConfig org.gnome.Mutter.DisplayConfig PowerSaveMode $mode"
if [ "$mode" = "i 0" ]; then # monitor on, turn off monitor
    busctl --user set-property org.gnome.Mutter.DisplayConfig /org/gnome/Mutter/DisplayConfig org.gnome.Mutter.DisplayConfig PowerSaveMode i 3
elif [ "$mode" = "i 1" ] || [ "$mode" = "i 2" ] || [ "$mode" = "i 3" ]; then # monitor off, turn on monitor
    busctl --user set-property org.gnome.Mutter.DisplayConfig /org/gnome/Mutter/DisplayConfig org.gnome.Mutter.DisplayConfig PowerSaveMode i 0
elif [ "$mode" = "i -1" ]; then # unknown, turn off monitor
    busctl --user set-property org.gnome.Mutter.DisplayConfig /org/gnome/Mutter/DisplayConfig org.gnome.Mutter.DisplayConfig PowerSaveMode i 3
fi

这个脚本中 1000 是你的登录用户的 uid,自己查看是多少。如果只有一个用户,一般就是 1000

apt install acpid

vim /etc/acpi/events/powerbutton
# 写入如下内容
event=button/power
action=doas -u xxx /path-your-script/powerbutton.sh
# 到这里结束

systemctl restart acpid

然后在设置里面把电源按钮功能改成无就行了。

docker安装

和普通系统完全一样,参考网络即可

杂项

在 wayland 下,firefox 用命令行启动时需要加环境变量,否则看起来比较不清晰(直接点击快捷方式没这个问题)

MOZ_ENABLE_WAYLAND=1 firefox-esr

同理在 wayland 下 chrome 也需要添加 flags 才能变得清晰。

chrome --enable-features=UseOzonePlatform --ozone-platform=wayland

如果想在启动 firefox 之后自动按 f11,在 X11 下可以用注释掉的内容(xdotool),wayland 下没有好办法,只能用 kiosk 模式

#!/bin/bash
# X11用xdotool
# /usr/lib/firefox-esr/firefox-esr "http://127.0.0.1:8123" &
# xdotool search --sync --onlyvisible --class "Firefox" windowactivate key F11 # 要先安装xdotool

# wayland暂时没法F11全屏
MOZ_ENABLE_WAYLAND=1 /usr/lib/firefox-esr/firefox-esr --kiosk "http://127.0.0.1:8123"
5

评论 (1)

取消
  1. 头像
    顾然台
    Android · Google Chrome

    谢谢大哥

    回复