在Amazon Kindle上运行完整的桌面环境

2020-12-01 03:58:30

在我以前的文章中,我描述了在OpenWRT路由器上运行Arch的过程。今天,我将更进一步,在Amazon Kindle上本地运行Arch和完整的LXDE安装,可以直接通过触摸屏与之交互。有了Kindle的操作系统是Linux,这才有可能实现!

您可以在此处查看最终结果。抱歉,视频晃动-这是使用手机拍摄的,没有三脚架。

如果您想继续学习,请确保已预先扎根Kindle。这是必不可少的-没有它,就无法运行自定义脚本或二进制文件。

我正在第8代Kindle(KT3)上对此进行测试-但是,只要您有足够的存储空间并已扎根,它就应该可以用于所有最近的Kindle。如果要启动chroot的简单方法,还需要设置USB网络以进行SSH访问,还可以选择设置KUAL。

首先,首先:我们需要建立一个文件系统并将Arch安装解压缩到其中,然后我们可以将其chroot到其中。该文件系统将是一个将作为循环设备挂载的文件。我们之所以没有将Arch安装直接解压缩到Kindle上的目录中,是因为Kindle的存储文件系统为FAT32。 FAT32不支持符号链接等必需的功能,这会破坏Arch的安装。请注意,这也意味着您的chroot文件系统最大可以为4 GB。可以通过在chroot文件系统中挂载真实根目录来解决此问题,这仍然是解决问题的一种方法。但是我离题了。

首先,弄清楚文件系统实际上可以有多大。 SSH进入Kindle,查看您有多少可用空间:

$ ssh [email protected] kindle#df -k / mnt / base-us已使用的文件系统1K块可用用法%已安装在/ dev / loop / 0 3188640 361856 2826784 11%/ mnt / base-us

好像我们有大约2800000K(大约2.8G)的可用空间。让我们将文件系统设置为2.6G,足以托管我们的根文件系统和其他一些应用程序,例如LXDE。请注意,我将在PC上运行以下命令,并在以后转移文件系统。您也可以在Kindle上完成所有这些操作,但是这样做更简单,更快捷。

让我们创建一个所需大小的空白文件。我使用的是dd,但您也可以为此使用fallocate:

$ dd if = / dev / zero of = arch.img bs = 1024 count = 2600000 2600000 + 0记录in2600000 + 0记录out2662400000字节(2.7 GB,2.5 GiB)复制,6.92058 s,385 MB / s

让我们在其上创建文件系统。由于我们是在PC上执行此操作,因此需要将其设置为32位,并在文件系统上禁用metadata_csum和huge_file选项,因为Kindle的ext4内核不支持它们。

$ mkfs.ext4 -O ^ 64bit,^ metadata_csum,^ huge_file arch.img mke2fs 1.45.0(2019年3月6日)丢弃设备块:已完成使用650000个4k块和162560个inode创建文件系统文件系统UUID:a4e72620-368a-44b4- 81bb-9e66b2903523存储在块上的超级块备份:32768、98304、163840、229376、294912分配组表:已完成编写inode表:已完成创建日志(16384块):已完成写超级块和文件系统记帐信息:已完成

$ tune2fs -c 0 -i 0 arch.img tune2fs 1.45.0(2019年3月6日)将最大安装计数设置为-1将两次检查之间的间隔设置为0秒

我正在使用的Kindle具有基于Cortex-A9的处理器,因此让我们从此处下载ARMv7版本的Arch Linux ARM。您可以下载并解压缩,也可以同时下载并解压缩:

需要sudo来解压缩,因为它设置了许多具有root权限的文件。您可以忽略有关SCHILY.fflags的错误。使用ls -l rootfs /验证是否成功提取了文件。

让我们为文件系统准备Kindle。我选择在扩展名/ karch中托管文件系统,因为我想使用KUAL来轻松启动:

当我们在这里时,最好停止电源守护程序,以防止Kindle在传输文件系统和中断传输时进入睡眠模式:

完成后,再次使用SSH并设置我们的挂载点:

我决定设置自己的循环设备,因此可以为其命名,但是您可以忽略它,而选择使用/ dev / loop / 12或类似的设备。只要确保它尚未与mount一起使用即可。

kindle#安装-o绑定/ dev系统/ dev kindle#安装-o绑定/ dev / pts系统/ dev / pts kindle#安装-o绑定/ proc系统/ proc kindle#安装-o绑定/ sys系统/ sys kindle#挂载-o bind / tmp system / tmp kindle#cp / etc / hosts system / etc /

现在是时候切换到我们的新系统并将其设置为LXDE了。您还可以利用此机会来设置所需的任何应用程序,例如屏幕键盘:

kindle#chroot系统/ / bin / bash chroot#echo'en_US.UTF-8 UTF-8'> /etc/locale.gen chroot#locale-gen chroot#rm /etc/resolv.conf chroot#echo'名称服务器8.8。 8.8'> /etc/resolv.conf chroot#pacman-key --init#这会花点时间chroot#pacman-key --populate chroot#pacman -Syu --noconfirm chroot#pacman -S lxde xorg-server-xephyr -没有确认

我们使用Xephyr是因为它是启动和运行LXDE会话的最简单方法。由于Kindle本机使用X11,因此我们可以尝试使用它。可以使用chroot外的stop lab126_gui停止本机窗口管理器,但是Kindle将停止使用新数据更新屏幕,将其保留为空白–迫使您使用eips之类的东西来刷新屏幕。 X服务器仍然可以使用,但是您可以在其中运行自己的WM之后通过使用x11vnc之类的方法来确认这一点。 Xephyr在先前存在的X服务器中生成了一个新的X服务器,它效率不高,但容易得多。

但是,我们可以停止与本机GUI相关的所有其他操作,因为我们需要额外的内存,并且无论如何LXDE都无法运行它:

chroot#exit kindle#SERVICES =“框架枕头webreader kb contentpackd” kindle#用于$ {SERVICES}中的服务;停止$ {service};做完了

让我们重新输入系统,看看是否可以使LXDE运行。如果需要,请确保替换屏幕尺寸参数:

kindle#chroot系统/ / bin / bash chroot#export DISPLAY =:0 chroot#Xephyr:1 -title“ L:A_N:application_ID:xephyr” -screen 600x800 -cc 4 -nocursor&chroot#export DISPLAY =:1 chroot# lxsession和chroot#xrandr -o对

如果一切顺利,您应该在Kindle屏幕上看到LXDE。 -随便玩吧。我发现触摸屏非常准确,即使它使用的是IR LED系统而不是普通的数字转换器来检测触摸。

在chroot中完成后,可以发出Ctrl-C + Ctrl-D退出chroot。然后,我们可以通过执行以下操作来还原Kindle UI:

我已经提到过设置KUAL扩展程序来自动执行chroot的输入和退出。您可以在这里找到。如果您对此感兴趣,请确保先设置文件系统,然后将其复制到扩展名所在的目录中,并将其命名为arch.img。其他所有内容都不是必须的-扩展程序将为您完成。