目前写了一点过程中折腾过的东西,非常WIP,可以先凑合看看。
## 调整与优化
### 用户名更改
如果不想用默认的 `cpi` 用户名,则可以考虑原地修改用户名到自己的常用用户名
首先,给 `root` 用户上一个临时密码。
```bash
sudo passwd
```
输入完两遍密码之后,注销桌面会话,然后按 Ctrl+Alt+F1 进入 Linux Console。
以 `root` 的身份用刚才设置的密码登录。
```bash
# 首先确保终止掉 cpi 用户的所有会话,否则无法修改用户信息。
loginctl kill-user cpi
# 修改用户的用户名到 username 并移动之前的主目录到对应的新路径下。
usermod -d /home/username -m -l username cpi
# 更新用户的主组名称对应到新的用户名。
groupmod -n username cpi
# 可选: 修改用户的密码。如果不修改,默认密码是 cpi
passwd username
# 最后确认一下所有信息是否正确,尤其是检查用户是否属于 sudo 组。如果没有这个组就无法用 sudo 了。
id username
# 可选: 删除刚才设定的 root 登录密码。
passwd -d root
# 重启图形界面的显示管理器并登出。将会回到图形界面登录画面。
systemctl restart lightdm && logout
```
最后,以新的用户名密码登录到桌面。
### 软件源配置
默认走的 Ubuntu Ports 官方源的速度很慢,可以考虑一个国内源。比如中科大的。
`/etc/apt/sources.list`
```ini
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
#deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
#deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
#deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
#deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
```
下载缺失的两个GPG公钥
```bash
# Armbian
curl 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xdf00faf1c577104b50bf1d0093d6889f9f0e78d5' | sudo tee /etc/apt/trusted.gpg.d/armbian.asc
# GitHub CLI
curl 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2c6106201985b60e6c7ac87323f3d4ea75716059' | sudo tee /etc/apt/trusted.gpg.d/githubcli.asc
```
修改 `/etc/apt/sources.list.d/githubcli.list` 让GitHub CLI的源使用刚才下载的最新的公钥。
```ini
deb http://cli.github.com/packages stable main
```
最后更新到最新的系统。
```bash
sudo apt update
sudo apt upgrade
```
### SSH服务器
如果需要启用SSH服务器,则需要先启动SSH服务器,删掉一个阻止启动SSH的占位文件,然后再启用。
```bash
sudo systemctl enable ssh
sudo rm -f /etc/ssh/sshd_not_to_be_run
sudo systemctl start ssh
```
这部分是 Armbian 引入的修改。相同的操作也可以利用 `armbian-config` 来完成。
### A06: 性能调整
这部分内容适用于A06版本。A04版本也有对应的工具可以使用。
A06 使用的是 RK3399 方案。在 uConsole 下,默认的配置是 4 个 A53 核心运行在 1008MHz 下,两个 A72 核心关闭,GPU运行在 200MHz 下。
要允许轻松调整机器的性能,可以安装原本为 DevTerm 开发的 Gearbox 。
```bash
sudo apt install devterm-gearbox-a06
```
直接运行 `a06-gearbox` 可以查看当前的系统的性能配置。
要修改性能配置,可以运行
```bash
sudo a06-gearbox -s 3
```
其中,3 代表性能级别,取值范围是 1 ~ 6 。
各个性能级别的配置如下:
```
+-----------------------------------+-----------------+-----------+
| Cortex-A53 | Cortex-A72 | Mali-T860 |
+--------+--------+--------+--------+--------+--------+-----------+
| CPU 0 | CPU 1 | CPU 2 | CPU 3 | CPU 4 | CPU 5 | GPU |
+---+--------+--------+--------+--------+--------+--------+-----------+
| 1 | 600 MHz| OFF | OFF | OFF | OFF | OFF | 200 MHz |
+---+--------+--------+--------+--------+--------+--------+-----------+
| 2 | 800 MHz| 800 MHz| OFF | OFF | OFF | OFF | 200 MHz |
+---+--------+--------+--------+--------+--------+--------+-----------+
| 3 |1008 MHz|1008 MHz|1008 MHz|1008 MHz| OFF | OFF | 400 MHz |
+---+--------+--------+--------+--------+--------+--------+-----------+
| 4 | OFF | OFF | OFF | OFF |1008 MHz|1008 MHz| 400 MHz |
+---+--------+--------+--------+--------+--------+--------+-----------+
| 5 | OFF | OFF | OFF | OFF |1200 MHz|1200 MHz| 600 MHz |
+---+--------+--------+--------+--------+--------+--------+-----------+
| 6 |1416 MHz|1416 MHz|1416 MHz|1416 MHz|1800 MHz|1800 MHz| 800 MHz |
+---+--------+--------+--------+--------+--------+--------+-----------+
```
此工具的帮助文件内说明的各个性能级别的适用场景:
1. 最低性能模式,适合简单的文本写作。具有最长的电池续航能力。
2. 适用于浏览一般网页等任务,具有较长的电池续航能力。
3. 适用于大多数2D游戏和模拟器游戏的使用场景。默认配置文件。
4. 适用于玩3D游戏与视频播放的使用场景。
5. 适用于性能优先的应用的使用场景。
6. 最佳性能模式,显著增加耗电与发热。
### PolicyKit 修复
默认提供的系统内的 PolicyKit 组件不完整,缺少了桌面相关的支持组件,这会导致语言支持和登录界面的设置项不能正确打开。
要补全 PolicyKit 支持,需要安装一些软件包。
```bash
sudo apt install policykit-desktop-privileges policykit-1-gnome
```
完成后请注销并重新登录一次桌面。
### 桌面中文化配置
默认情况下这个 XFCE 桌面环境即使是正常的做了语言配置也无法进入中文显示的状态。
下面将会逐步说明如何恢复完整的中文语言状态。
在进行此项之前,请务必确认:
1. 已经联网
2. 已经修改了软件源
3. 已经修复了PolicyKit组件不完整的问题
在进行下面的配置之前,建议先开启 Gearbox 的模式 6(最佳性能模式),因为 `locale-gen` 生成语言配置文件的时候是一个吃单核心性能的任务,其他模式下速度可能会非常慢。
首先,编辑 `~/.xsessionrc` 和 `~/.bashrc` ,去掉这两个文件尾部对 `LANG` `LANGUAGE` 等语言环境变量的设置。删除下面的这几行:
```bash
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
```
然后安装语言支持选项工具:
```bash
sudo apt install language-selector-gnome
```
安装完成后,就可以找到语言支持设置了: Applications - Settings - Language Support
第一次打开的时候会提示语言支持不完整。忽略。如果遇到打不开或者打开出错的情况,请检查 PolicyKit 是否已经修复。
然后,在语言设置中,先选中中文,然后删除全部其他语言。在点击确定之前,请务必确认已经联网且已经修改过软件源(不然会很慢)。
点击确定应用更改,会开始删除和安装软件包。安装完成之后,把中文拖动到第一项,最后点击应用到系统全局设置。
完成后,注销并重新登录即可生效,此时桌面应该就是中文的了。
### 鼠标滚轮到轨迹球映射
如果想把轨迹球当作鼠标滚轮使用,可以考虑基于 `libinput` 的鼠标滚轮模拟方案和鼠标中键模拟方案。
`libinput` 提供了对鼠标滚轮到鼠标中键+鼠标移动的模拟映射,但有一个问题:uConsole 上面的鼠标中键是鼠标轨迹球本身。一直压着轨迹球下去然后搓轨迹球本身对轨迹球组件本身的寿命可不是什么好事。所以可以同时启用 `libinput` 的鼠标中键模拟,将同时按下鼠标左右键作为鼠标中键使用。当同时启用这两个时,按住鼠标左右键,然后用轨迹球上下移动,即可实现鼠标滚轮的操作。可选的,还可以启用自然鼠标滚动功能,能够让搓鼠标滚轮的移动方向如同在触摸屏上拖动手指一样符合直觉。
**这么做的一个缺点是:鼠标中键本身的功能将被禁用。** 如果你比较习惯于在终端里面用按轨迹球(鼠标中键)的方式来粘贴文字,使用这个映射将会阻止按压轨迹球作为鼠标中键的功能。不过这个修改的范围应当仅影响 uConsole 内置键盘本身的功能,对外接输入设备没有影响,因此外接鼠标的鼠标中键应该能正常工作。
要实现这个功能,首先需要安装 `xinput` 包。
```bash
sudo apt install xinput
```
然后编辑用户主目录下之前删掉了语言环境变量的 `.xsessionrc` 配置文件,增加下面的内容:
`~/.xsessionrc`
```bash
# 启用鼠标滚轮模拟(中键+鼠标移动=滚轮)
xinput --set-prop 'ClockworkPI uConsole Mouse' 'libinput Scroll Method Enabled' 0 0 1
# 启用鼠标中键模拟(左键+右键=中键)
xinput --set-prop 'ClockworkPI uConsole Mouse' 'libinput Middle Emulation Enabled' 1
# 可选:启用自然鼠标滚动支持
xinput --set-prop 'ClockworkPI uConsole Mouse' 'libinput Natural Scrolling Enabled' 1
```
P.S.: 如果可以的话,希望有人能修改一下 [键盘模块的固件](https://github.com/clockworkpi/uConsole/tree/master/Code/uconsole_keyboard),直接把这个功能做到硬件里面去,这样就不需要用户自己去修改这些东西了。
### 锁屏与电源管理
目前锁屏部分建议使用默认的 Xscreensaver,电源管理选项里的屏幕自动亮度降低可以使用。
但电源管理部分不建议开启显示电源管理(关闭屏幕这些)和自动待机休眠等功能,因为目前这些功能可能导致锁屏或者自动待机之后无法唤醒。
具体的解决方案目前还在探索中。
### LTE模块
#### 上网
需要注意的是,A06 版本的 uConsole 和 CM4 版本的在启动LTE模块上的操作是不同的。
本文只介绍 A06 的一些玩法。
##### A06: 基本操作
首先安装用于快速补充网络管理器内的无线宽带提供商信息的软件包:
```bash
sudo apt install mobile-broadband-provider-info
```
然后,启动模块。
```bash
sudo uconsole-4g enable
```
启动之后,Modem Manager 很可能无法第一时间识别到模块,因此重启一下 Modem Mnager。
```bash
sudo systemctl restart ModemManager.service
```
完成这一步之后,就可以在网络管理器里面看到 LTE 模块了。接下来是新增一个网络连接,类型是移动宽带。然后根据自己的 SIM 卡的运营商选择合适的 APN。
比如,中国联通的卡一般使用默认的 `3gnet` 。设置完成后第一次使用可能会询问密码。该密码对应的是 `uninet` 用户名,密码也是 `uninet` 。可选的,也有用户名 `3gnet` 密码 `3gnet` 的组合。
设置完成后,就可以通过网络管理器连接到移动宽带来上网了。
##### A06: 使用 systemd 管理模块电源和 Modem Manager
在使用这个之前,建议先完成基本操作里的相关设置准备。
使用此方法会导致在关机时可能会多出半分钟左右的延迟。但好处是你可以让 LTE 模块开机自动启动,且通过 systemd 管理 LTE 模块时自动帮你处理 Modem Manager 的启动了。
新增两个 systemd 配置文件。
1. `/etc/systemd/system/uConsoleLTE.service`: 将 `uconsole-4g` 改写成了 systemd 服务配置文件的版本。
```ini
[Unit]
Description=uConsole LTE Module
After=polkit.service
Requires=polkit.service
Before=ModemManager.service
PropagatesReloadTo=ModemManager.service
[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutStartSec=20
TimeoutStopSec=35
# Setup PWRKEY pin
ExecStartPre=/usr/bin/gpio mode 34 out
# Setup RESET pin
ExecStartPre=/usr/bin/gpio mode 33 out
# Set RESET pin to high
ExecStartPre=/usr/bin/gpio write 33 1
# Set PWRKEY pin to high
ExecStartPre=/usr/bin/gpio write 34 1
# Delay for module to properly reseted
ExecStartPre=/usr/bin/sleep 2
# Set RESET pin to low
ExecStartPre=/usr/bin/gpio write 33 0
# Wait for module to boot up
ExecStart=/usr/bin/sleep 13
# Wait for ModemManager to properly shutdown.
ExecStop=/usr/bin/sleep 5
# Setup PWRKEY pin
ExecStop=/usr/bin/gpio mode 34 out
# Set PWRKEY pin to low
ExecStop=/usr/bin/gpio write 34 0
# Set PWRKEY pin to high
ExecStop=/usr/bin/gpio write 34 1
# Delay for module to properly send power off signal
ExecStop=/usr/bin/sleep 3
# Set PWRKEY pin to low
ExecStop=/usr/bin/gpio write 34 0
# Delay for module to power off
ExecStop=/usr/bin/sleep 20
[Install]
WantedBy=multi-user.target
```
2. `/etc/systemd/system/ModemManager.service` : 一个修改后的 Modem Manager 服务配置文件。对此文件的修改允许 Modem Manager 随着 `uConsoleLTE` 的状态来进行对应变更。(修改的部分是新增了一个 `BindsTo`的设置。)
```ini
[Unit]
Description=Modem Manager
After=polkit.service
Requires=polkit.service
ConditionVirtualization=!container
BindsTo=uConsoleLTE.service
[Service]
Type=dbus
BusName=org.freedesktop.ModemManager1
ExecStart=/usr/sbin/ModemManager
StandardError=null
Restart=on-abort
CapabilityBoundingSet=CAP_SYS_ADMIN CAP_NET_ADMIN
ProtectSystem=true
ProtectHome=true
PrivateTmp=true
RestrictAddressFamilies=AF_NETLINK AF_UNIX AF_QIPCRTR
NoNewPrivileges=true
User=root
[Install]
WantedBy=multi-user.target
```
写入两个配置文件之后,应用更改并启用LTE模块。
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now uConsoleLTE.service ModemManager.service
```
现在,在开机时,LTE 模块会自动启动,关机时也会安全关闭 LTE 模块。
#### 接打电话
这个算是简单的一项。
Gnome 组件里面有一个叫 Gnome Calls 的软件,提供了一个拨号盘和通话界面。
```bash
sudo apt install gnome-calls
```
这个软件在首次启动之后就应该能注册到自动启动了。下次来电话的时候就能看到电话接听的界面了。
拨打和接听电话之前,需要把耳机插到机器左边的 LTE 模块上的耳机孔里才能使用。你需要接一个 3.5mm 的 TRRS 插头的有线耳机,且接线需要对应 TRRS - LRMG 的线序 :L=左, R=右, M=麦克风, G=接地,换句话说:国标插头。(不过根据售卖地区不同,这个接线搞不好也可能是美标的 TRRS - LRGM 。)
机器里面没有把 LTE 模块的音频接到主板上,也没有接到喇叭上,甚至机器里面连个麦克风都没带,因此也就别想着用蓝牙耳机接打电话或者用免提通话了。实际上不接外设的情况下主板的系统里面甚至根本就看不到任何一个音频输入设备。可以说是终极隐私保护了。🤣
如果你觉得默认 Gnome 软件都在使用亮色主题很难受的话,可以一条命令变成暗色主题:
```bash
gsettings set org.gnome.desktop.interface color-scheme prefer-dark
```
#### 收发短信
收发短信可以使用 ModemManager-GUI 。
由于 Ubuntu 22.04 引入的一个 bug,导致 ModemManager-GUI 无法正确启动,因此需要进行一下处理才能工作。
首先,安装 ModemManager-GUI
```bash
sudo apt install modem-manager-gui
```
安装完成后不要急于打开。首先运行这个命令:
```bash
sudo mv /usr/lib/aarch64-linux-gnu/modem-manager-gui/modules/libmodcm_nm09.so /usr/lib/aarch64-linux-gnu/modem-manager-gui/modules/libmodcm_nm09.so_
```
这个命令将会把 ModemManager-GUI 的 Network Manager 0.9 版本的支持库改名,让 ModemManager-GUI 找不到这个支持库。 该支持库对系统内已安装的 Network Manager 的支持有问题,会导致启动 ModemManager-GUI 后崩溃。由于没有这个支持库,之后在 ModemManager-GUI 内将无法对 LTE 的网络连接进行管理(连接开关、流量使用统计),但你仍然可以用网络管理器来控制 LTE 的网络连接。
操作完成之后,打开 ModemManager-GUI ,首次启动提供的默认设置是可以直接使用的。
在默认情况下,ModemManager-GUI不会随系统自动启动,如果来了短信但没有启动的话,会导致短信收不到。另外由于没有配置通知命令,因此收到短信也不会弹出通知。下面将修正这两个问题。
进入主界面,然后菜单栏 Edit - Preferences。
1. “行为”标签页下,勾选 “关闭时隐藏窗口到托盘” 和 “添加程序到自启动列表”。
2. “短信”标签页下,在“自定义指令”的“指令”内填写:
```bash
notify-send --icon /usr/share/modem-manager-gui/pixmaps/sms-tb.png -t 60000 '%n' '%t'
```
完成后点击 应用 。
在关闭 ModemManager-GUI 的窗口时会询问是否最小化到托盘。选择最小化到托盘并不再提醒。
目前因为图标包里面没有通知的相关的图标,ModemManager-GUI 在托盘里的图标是个空白的。可以安装一个额外的图标主题来解决这个问题。
```bash
sudo apt install numix-icon-theme
```
在系统的外观设置里应用新的图标主题就可以看到托盘里的铃铛图标表示的 ModemManager-GUI 了。
### 字体调整
字体设置在 设置 - 外观 的 字体选项卡下面。
有的时候中文显示比较难看的话也可以在这里修改字体。
默认的DPI数值是 150 可能对一些人来说太大了,可以考虑改成 100 或者 110 。
##### XFCE终端 + 文泉驿等宽微米黑
使用XFCE的终端模拟器,又想用文泉驿等宽微米黑作为终端等宽字体,但终端又因为文泉驿等宽微米黑字体没有把自身标记成等宽字体导致无法选择。这个问题的解决方式是,在这个系统的字体外观设置里面,设置等宽字体到 文泉驿等宽微米黑 并选择一个合适的字号,然后再 XFCE终端设置里的 外观 选项卡里,勾选 使用系统字体 即可生效。
## 性能与功耗的观测与测试
### 传感器信息
安装 `lm-sensor` 软件包之后,可以从 `sensors` 命令看到
1. CPU 温度
2. 电源管理芯片检测到的电池电压、工作电流
3. GPU 温度
### 睡眠功耗
目前测试下来的睡眠模式功耗在 1.6W 左右。但由于目前待机睡眠功能存在问题,不建议使用自动的待机模式。手动启用待机模式目前还没遇到什么问题。
### 电源保护、温度保护行为
目前从实际使用上发现,如果电池工作时的放电功率过高时导致的电池电压下降的很严重时,电源管理芯片会强制关闭输出,这能起到对电池的保护作用。
同样的,如果用 Gearbox 设置了较高的性能级别,在环境温度过高或散热不良的环境下有可能会触发过热保护。
### 各个性能级别的功耗统计
(WIP)
## 一些参考资源
uConsole 官方仓库: https://github.com/clockworkpi/uConsole
uConsole 官方Wiki: https://github.com/clockworkpi/uConsole/wiki
uConsole 官方论坛: https://forum.clockworkpi.com/c/uconsole/
ClockworkPi 老 Wiki: https://wiki.clockworkpi.com/index.php/Main_Page
目前 uConsole 的 Wiki 是在 GitHub 上的,而官网那里的老 Wiki 那里目前没有 uConsole 的相关内容。但针对 A06/A04 Core 的一些资料仍然可以参考 DevTerm 的相关信息。
SIM7600 模块技术手册: https://fcc.report/FCC-ID/2AJYU-8PYA007/4857209.pdf
顺带一提,LTE 模块自动启动的 systemd 配置文件单独发了一个 [Github Gist](https://gist.github.com/SuperMarioSF/baea9fc13fc320e5a002c58cf107bd10) 。