mirror of
https://github.com/Cateners/tiny_computer.git
synced 2026-05-20 16:35:47 +08:00
adjust readme
This commit is contained in:
@@ -30,6 +30,8 @@ assets的文件来源如下:
|
||||
|
||||
其中tar、busybox和pulseaudio相关文件都是直接用了二进制文件。
|
||||
|
||||
更多信息可以在[这里](extra/readme)找到。
|
||||
|
||||
对debian容器进行了如下修改:
|
||||
- 使用tmoe安装了xfce环境和全套VNC;
|
||||
- 使用kali-undercover提供的Win10主题美化xfce;
|
||||
@@ -40,7 +42,7 @@ assets的文件来源如下:
|
||||
- 启动时会尝试挂载手机的一些字体目录(AppFiles/Fonts、Fonts和/system/fonts), 如果这些目录下有字体文件的话会一并加载到系统中,无需额外安装;
|
||||
- 最后采用tar.xz压缩,用split命令分成了xa*等多个文件(低内存设备一次性拷贝大文件会导致软件闪退)。
|
||||
|
||||
完整的容器制作过程可以在[这里](https://github.com/Cateners/build-tiny-rootfs)看到。
|
||||
完整的容器制作过程可以在[这里](extra/build-tiny-rootfs.md)看到。
|
||||
|
||||
数据包不再在assets中更新,而是随releases提供,主要是为了避免git越来越大
|
||||
|
||||
@@ -57,7 +59,7 @@ lib目录:
|
||||
|
||||
你需要配置好flutter和安卓sdk,然后克隆此项目。
|
||||
|
||||
在编译之前,需要在release中下载系统rootfs(或者[自行制作](https://github.com/Cateners/build-tiny-rootfs)),之后使用split命令分割,拷贝到assets。一般我将其分为98MB。
|
||||
在编译之前,需要在release中下载系统rootfs(或者[自行制作](extra/build-tiny-rootfs.md)),之后使用split命令分割,拷贝到assets。一般我将其分为98MB。
|
||||
|
||||
`split -b 98M debian.tar.xz`
|
||||
|
||||
|
||||
196
extra/build-tiny-rootfs.md
Normal file
196
extra/build-tiny-rootfs.md
Normal file
@@ -0,0 +1,196 @@
|
||||
# build-tiny-rootfs
|
||||
对小小电脑项目rootfs制作的说明
|
||||
|
||||
### 为什么不直接制作一个脚本呢?
|
||||
|
||||
因为我不会,所以只能用自然语言记录一下制作步骤。
|
||||
|
||||
## 制作步骤
|
||||
|
||||
### 安装Debian容器
|
||||
|
||||
- 安装Termux
|
||||
- 在Termux内安装tmoe
|
||||
- 在tmoe内安装Debian Bookworm的proot容器
|
||||
- 是否新建sudo用户-是-用户名tiny-密码tiny
|
||||
- 是否设置tiny为默认用户-是
|
||||
- 是否为root配置zsh-否
|
||||
- 是否删除zsh.sh等-是
|
||||
- 是否启动tmoe tools-是
|
||||
- 其余对话框默认直接按回车
|
||||
- 来到tmoe tool界面时取消,退出
|
||||
|
||||
### 安装其他软件
|
||||
|
||||
安装xfce部分是根据记忆写的,如果有误请指出。
|
||||
|
||||
桌面环境只安装一个。
|
||||
|
||||
#### 安装桌面环境(lxqt)
|
||||
|
||||
- 输入debian-i进入tmoe tools
|
||||
- 图形界面-rootless-lxqt-core
|
||||
- 不安装electron apps
|
||||
- 不安装chromium
|
||||
|
||||
- 按需调整
|
||||
|
||||
#### 安装桌面环境(xfce)
|
||||
|
||||
前面的部分和lxqt一致,只是选桌面环境时选了xfce-lite。
|
||||
|
||||
下面是额外的美化部分。推荐先安装软件再做这个,因为使用kali-undercover时可能有依赖报错,但我忘记是哪些依赖了。但后面安装的某个软件会帮我们把依赖补上。
|
||||
|
||||
- xfce美化
|
||||
- 前往kali源下载kali-undercover包并apt install安装
|
||||
- 修改kali-undercover脚本中检测xfce环境的地方,强制允许
|
||||
- 即注释第一个if里的exit 1
|
||||
- 执行kali-undercover
|
||||
- 按需调整
|
||||
- 注释.bashrc中把bash风格改为windows风格的语句
|
||||
- 调整状态栏
|
||||
- ......
|
||||
|
||||
#### 安装VNC
|
||||
|
||||
安装桌面环境后会自动进行这一步,使用tmoe tools全部安装即可。
|
||||
|
||||
- 选择tigervnc
|
||||
- 密码12345678
|
||||
|
||||
安装完成后,输入debian-i回到tmoe继续修改一些参数,主要目的是避免与termux的容器端口一致产生冲突
|
||||
|
||||
- 修改显示端口到5904
|
||||
- 远程桌面-tigervnc-显示端口-4
|
||||
- 修改novnc端口到36082
|
||||
- 远程桌面-novnc-端口-36082
|
||||
- 修改startnovnc启动脚本(避免每次启动novnc时打开浏览器,虽然不是windows)
|
||||
- 注释start_win10_edge_novnc_addr(大概在倒数第五行)
|
||||
|
||||
接下来对novnc应用补丁,以添加"通过滑块修改分辨率"等功能
|
||||
|
||||
- [下载novnc.patch](https://github.com/Cateners/noVNC/releases/tag/1.2)
|
||||
- 切换目录到/usr/local/etc/tmoe-linux/novnc
|
||||
- `patch -p1 < novnc.patch`
|
||||
- ```bash
|
||||
find . '(' \
|
||||
-name \*-baseline -o \
|
||||
-name \*-merge -o \
|
||||
-name \*-original -o \
|
||||
-name \*.orig -o \
|
||||
-name \*.rej \
|
||||
')' -delete
|
||||
```
|
||||
|
||||
|
||||
#### 修复tmoe不能下载软件
|
||||
|
||||
在我发布的xfce版本中,我给每个aria2c调用都添加了--async-dns=false参数。
|
||||
|
||||
先切换到tmoe目录`/usr/local/etc/tmoe-linux/git/share`,然后执行脚本`./replace.sh old-version`:
|
||||
```shell
|
||||
#!/bin/bash
|
||||
# 用法: ./replace.sh 目录
|
||||
# 该脚本会递归地在给定目录下的所有文件中替换文本
|
||||
# 原文本: aria2c --console-log-level
|
||||
# 新文本: aria2c --async-dns=false --console-log-level
|
||||
|
||||
# 检查参数是否正确
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "错误: 需要一个目录作为参数"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查目录是否存在
|
||||
if [ ! -d "$1" ]; then
|
||||
echo "错误: 目录 $1 不存在"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# 遍历目录下的所有文件
|
||||
find "$1" -type f | while read file; do
|
||||
# 使用sed命令替换文本
|
||||
sed -i 's/aria2c --console-log-level/aria2c --async-dns=false --console-log-level/g' "$file"
|
||||
echo
|
||||
done
|
||||
```
|
||||
|
||||
用完后删除replace.sh;
|
||||
|
||||
另外现在tmoe官方给出了[解决办法](https://gitee.com/mo2/linux/issues/I8BQG3),不过我测试似乎还是不行,所以就先这样了
|
||||
|
||||
#### 修改apt源
|
||||
|
||||
按需修改/etc/apt/sources.list,另外把non-free改为non-free-firmware
|
||||
|
||||
#### 安装火狐浏览器
|
||||
|
||||
`sudo apt install firefox-esr firefox-esr-l10n-zh-cn`
|
||||
|
||||
#### 安装输入法
|
||||
|
||||
- debian-i
|
||||
- 03秘密花园-10输入法-fcitx4-安装4libpinyin和6云拼音模块
|
||||
- 在图形界面应用找到fcitx配置-附加组件-云拼音-配置-云拼音来源,把Google改为百度,确认
|
||||
- 启动图形界面:输入startnovnc,会出现一个类似xxx.xxx.xxx.xxx:36082/vnc.html的网址,复制到本机的浏览器中输入vnc密码12345678就可以访问了。
|
||||
|
||||
#### 安装gdebi
|
||||
|
||||
这个软件包能使用户通过图形界面安装deb安装包
|
||||
|
||||
安装:`sudo apt install gdebi`
|
||||
|
||||
修改启动器:在/usr/share/applications/gdebi.desktop的Exec=后加上sudo
|
||||
|
||||
#### 安装VSCode
|
||||
|
||||
VSCode使用tmoe安装,正好测试一下不能下载软件的问题是否存在
|
||||
|
||||
- 2软件-2开发-1VSCode-1Official
|
||||
|
||||
tmoe还会安装gnome-keyring,由于之前我做xfce包时会造成VSCode反复弹窗更新密钥环所以被我卸载了,这个按需决定是否保留吧
|
||||
|
||||
#### 安装ffmpeg
|
||||
|
||||
这个是为了预览推流用的,按需安装
|
||||
|
||||
`sudo apt install ffmpeg`
|
||||
|
||||
### 其他修补
|
||||
|
||||
#### cmatrix
|
||||
|
||||
这个是给快捷指令的彩蛋。下载cmatrix的包,并将cmatrix文件提取放到/home/tiny/.local/bin里即可,记得添加执行权限
|
||||
|
||||
#### WPS
|
||||
|
||||
- 软件设置修改
|
||||
- 从官网下载WPS linux arm64 deb安装包,直接在图形界面点开用gdebi安装(正好测试一下gdebi是否能用)
|
||||
- 打开WPS-右上角设置-其他-切换窗口管理模式-整合模式改为多组件模式(否则一些设备在新建文档等操作时卡死,目前原因不明)
|
||||
- 使用gdebi(或自行)卸载WPS
|
||||
- 字体修补
|
||||
- 在你的Windows电脑里的C:\Windows\Fonts文件夹找到symbol.ttf、webdings.ttf、wingding.ttf、WINGDNG2.TTF、WINGDNG3.TTF、MTEXTRA.TTF字体并放到容器/usr/share/fonts的某个文件夹下(我新建了extra文件夹并把这些字体放到里面)
|
||||
- libtiff.so.5库修补
|
||||
- 切换到/lib/aarch64-linux-gnu文件夹,创建软链把libtiff.so.6链接到libtiff.so.5
|
||||
- 或者找libtiff.so.5的包并安装,这样可能更好一些
|
||||
|
||||
### 打包
|
||||
|
||||
- 首先退出容器,在容器挂载选项里取消对sd和termux的挂载,之后进入容器删除termux软连接
|
||||
- 在后面使用tar打包时,即使指定了exclude,tar也会尝试把它们打包进去
|
||||
- 这个很可能因为我自己没用对参数,如果你非常自信的话就不需要这么做,自行打包即可=v=
|
||||
- 在[这里](https://github.com/meefik/busybox/releases)下载提取busybox的可执行文件,并放到系统根目录
|
||||
- 我使用busybox的tar来打包,而不是容器自带的tar,原因是容器自带的tar会把硬链接打包成单独的文件,导致打包解包后占用多出1GB
|
||||
- 这个也很可能是我自己没用对参数,如果你非常自信就不用这么做......
|
||||
- 尽可能多地删除使用痕迹,包括但不限于
|
||||
- apt clean
|
||||
- /tmp下的文件,退出容器后删
|
||||
- tiny和root目录下的
|
||||
- .cache
|
||||
- .vnc/vnc.log, .vnc/x.log
|
||||
- .bash_history
|
||||
- .ICEauthority
|
||||
- .Xauthority
|
||||
- 等等
|
||||
- 切换到root用户,切换到根目录,`/busybox tar -Jcpvf /debian.tar.xz --exclude=debian.tar.xz --exclude=dev --exclude=proc --exclude=system --exclude=storage --exclude=apex --exclude=sys --exclude=media/sd --exclude=busybox --exclude=".l2s.*" /`
|
||||
|
||||
22
extra/readme
22
extra/readme
@@ -1,6 +1,24 @@
|
||||
## 这个readme介绍assets文件夹中文件的制作方式。
|
||||
|
||||
### assets.zip
|
||||
### assets.zip中的文件:
|
||||
|
||||
#### [容器文件xa*](build-tiny-rootfs.md)
|
||||
|
||||
### patch.tar.gz中的文件:
|
||||
|
||||
#### extra/getifaddrs_bridge_client_lib.so:
|
||||
|
||||
在安卓13以上的系统中,proot容器无权使用默认的getifaddrs,而这个库包含了一个getifaddrs实现。
|
||||
|
||||
linux在需要数据时,使用socket通知位于安卓的getifaddrs_bridge_server,让getifaddrs_bridge_server执行getifaddrs函数,并将结构体数据序列化后发送回linux端,这边接收数据并反序列化还原成指针结构体。简单来说就是用安卓的getifaddrs代替linux的getifaddrs。
|
||||
|
||||
源码和编译信息在getifaddrs_bridge文件夹查看。
|
||||
|
||||
#### caj, edraw
|
||||
|
||||
这些分别是cajviewer,亿图图示的补丁
|
||||
|
||||
- 亿图图示补丁的库文件是在小小电脑上下载了Qt对应版本源码后编译得到的;
|
||||
- 编译进行了两次,第一次直接编译,可以得到Gui和Widgets两个库。第二次编译带上XcbQpa,虽然会编译失败,但在这之前就可以得到XcbQpa的库。
|
||||
|
||||
|
||||
### patch.tar.gz
|
||||
@@ -354,7 +354,7 @@ class D {
|
||||
{"name":"卸载CAJViewer", "command":"sudo apt autoremove --purge -y net.cnki.cajviewer && bash /home/tiny/.local/share/tiny/caj/postrm"},
|
||||
{"name":"安装亿图图示", "command":"wget https://www.edrawsoft.cn/2download/aarch64/edrawmax_11.5.6-3_arm64.deb -O /tmp/edraw.deb && sudo apt update && sudo apt install -y /tmp/edraw.deb && bash /home/tiny/.local/share/tiny/edraw/postinst; rm /tmp/edraw.deb"},
|
||||
{"name":"卸载亿图图示", "command":"sudo apt autoremove --purge -y edrawmax libldap-2.4-2"},
|
||||
{"name":"安装QQ", "command":"wget https://dldir1.qq.com/qqfile/qq/QQNT/b69de82d/linuxqq_3.2.1-17153_arm64.deb -O /tmp/qq.deb && sudo apt update && sudo apt install -y /tmp/qq.deb && sed -i 's#Exec=/opt/QQ/qq %U#Exec=/opt/QQ/qq --no-sandbox %U#g' /usr/share/applications/qq.desktop; rm /tmp/qq.deb"},
|
||||
{"name":"安装QQ", "command":"wget https://dldir1.qq.com/qqfile/qq/QQNT/fd2e886e/linuxqq_3.2.2-18394_arm64.deb -O /tmp/qq.deb && sudo apt update && sudo apt install -y /tmp/qq.deb && sed -i 's#Exec=/opt/QQ/qq %U#Exec=/opt/QQ/qq --no-sandbox %U#g' /usr/share/applications/qq.desktop; rm /tmp/qq.deb"},
|
||||
{"name":"卸载QQ", "command":"sudo apt autoremove --purge -y linuxqq"},
|
||||
{"name":"修复无法编译C语言程序", "command":"sudo apt update && sudo apt reinstall -y libc6-dev"},
|
||||
{"name":"修复系统语言到中文", "command":"sudo localedef -c -i zh_CN -f UTF-8 zh_CN.UTF-8"},
|
||||
@@ -601,7 +601,7 @@ ln -sf \$DATA_DIR/busybox \$DATA_DIR/bin/gzip
|
||||
//这个是容器rootfs,被split命令分成了xa*
|
||||
//首次启动,就用这个,别让用户另选了
|
||||
//TODO: 这个字符串列表太丑陋了
|
||||
for (String name in ["xaa", "xab", "xac", "xad", "xae", "xaf", "xag", "xah", "xai"]) {
|
||||
for (String name in ["xaa", "xab", "xac", "xad", "xae", "xaf", "xag", "xah", "xai", "xaj"]) {
|
||||
//for (String name in ["xaa", "xab", "xac", "xad", "xae", "xaf", "xag", "xah", "xai", "xaj", "xak", "xal", "xam", "xan", "xao", "xap", "xaq"]) {
|
||||
await Util.copyAsset("assets/$name", "${G.dataPath}/$name");
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||
# In Windows, build-name is used as the major, minor, and patch parts
|
||||
# of the product and file versions while build-number is used as the build suffix.
|
||||
version: 1.0.10+2
|
||||
version: 1.0.11+1
|
||||
|
||||
environment:
|
||||
sdk: '>=3.1.0 <4.0.0'
|
||||
|
||||
Reference in New Issue
Block a user