Nura使用实例

镜像地址 https://images.nura.eco/bpo/v26.06/nokia-n900/ 安装方法参考Maemo Leste
sysinfo
n900:~$ inxi -F
System:
Host: n900 Kernel: 7.0.5 arch: armv7l bits: 32
Console: pty pts/0 Distro: postmarketOS v26.06
Machine:
Type: ARM System: Nokia N900 details: Nokia RX-51 board rev: 2204
Battery:
ID-1: bq27200-0 charge: 5.9 Wh (95.2%) condition: 6.2/6.2 Wh (99.7%)
health: calibration required
CPU:
Info: single core model: ARMv7 v7l variant: cortex-a8 bits: 32 type: UP
Speed: N/A min/max: 125/600 core: No per core speed data found.
Graphics:
Message: No ARM data found for this feature.
Display: unspecified server: N/A driver: N/A tty: 80x40
API: N/A Message: No API data available in console. Headless machine?
Info: Tools: x11: xprop
Audio:
Device-1: n900-audio driver: rx51_audio
API: ALSA v: k7.0.5 status: kernel-api
Network:
Message: No ARM data found for this feature.
IF-ID-1: usb0 state: down mac: f2:a3:bb:ed:b5:62
IF-ID-2: wlan0 state: up mac: 82:f0:89:72:93:0f
Drives:
Local Storage: total: 59.55 GiB used: 616.9 MiB (1.0%)
ID-1: /dev/mmcblk0 vendor: TDK model: TF32G size: 29.73 GiB
type: Removable
ID-2: /dev/mmcblk1 model: MMC32G size: 29.82 GiB type: Removable
Partition:
ID-1: / size: 28.38 GiB used: 566.2 MiB (1.9%) fs: ext4 dev: /dev/mmcblk0p2
ID-2: /boot size: 456.5 MiB used: 50.7 MiB (11.1%) fs: ext2
dev: /dev/mmcblk0p1
Swap:
ID-1: swap-1 type: zram size: 348 MiB used: 1.5 MiB (0.4%) dev: /dev/zram0
Sensors:
Src: /sys Message: No sensor data found in /sys/class/hwmon.
Info:
Memory: total: N/A available: 231.7 MiB used: 109.1 MiB (47.1%)
Processes: 110 Uptime: 51m Init: systemd Shell: ash (busybox) inxi: 3.3.39
n900:~$ free -h
total used free shared buff/cache available
Mem: 231.7M 79.3M 37.9M 2.3M 114.5M 142.2M
Swap: 348.0M 1.5M 346.5M
n900:~$ cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 331.77
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x1
CPU part : 0xc08
CPU revision : 3
Hardware : Nokia RX-51 board
Revision : 2204
Serial : 0000000000000000
n900:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk0 179:0 0 29.7G 0 disk
├─mmcblk0p1 179:1 0 487M 0 part /boot
└─mmcblk0p2 179:2 0 29.3G 0 part /
mmcblk1 179:16 0 29.8G 0 disk
├─mmcblk1p1 179:17 0 21G 0 part
├─mmcblk1p2 179:18 0 8G 0 part
└─mmcblk1p3 179:19 0 768M 0 part
mmcblk1boot0 179:32 0 512K 1 disk
mmcblk1boot1 179:48 0 512K 1 disk
nullb0 253:0 0 250G 0 disk
zram0 254:0 0 348M 0 disk [SWAP]
n900:~$ df -hai
Filesystem Inodes Used Available Use% Mounted on
proc 0 0 0 0% /proc
sysfs 0 0 0 0% /sys
dev 25.1K 515 24.6K 2% /dev
run 29.0K 894 28.1K 3% /run
configfs 0 0 0 0% /sys/kernel/config
devpts 0 0 0 0% /dev/pts
none 0 0 0 0% /sys/kernel/debug
/dev/mmcblk0p2 3.4M 13.8K 3.4M 0% /
securityfs 0 0 0 0% /sys/kernel/security
tmpfs 29.0K 1 29.0K 0% /dev/shm
cgroup2 0 0 0 0% /sys/fs/cgroup
bpf 0 0 0 0% /sys/fs/bpf
systemd-1 0 0 0 0% /proc/sys/fs/binfmt_misc
mqueue 0 0 0 0% /dev/mqueue
tracefs 0 0 0 0% /sys/kernel/tracing
none 1.0K 1 1023 0% /run/credentials/systemd-journald.service
fusectl 0 0 0 0% /sys/fs/fuse/connections
tmpfs 1.0M 6 1024.0K 0% /tmp
binfmt_misc 0 0 0 0% /proc/sys/fs/binfmt_misc
/dev/mmcblk0p1 121.5K 98 121.4K 0% /boot
none 1.0K 1 1023 0% /run/credentials/getty@tty1.service
tmpfs 5.8K 43 5.7K 1% /run/user/10000
n900:~$ SSH Server
account info: user 147147
n900:~$sudo apk add openssh-server
n900:~$sudo systemctl enable sshd
n900:~$sudo systemctl start sshd
n900:~$ systemctl status sshd
● sshd.service - OpenSSH Daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: dis>
Active: active (running) since Thu 2026-10-15 14:33:42 GMT; 20min ago
Invocation: 0899f59523634596b98d8201dbac52e4
Main PID: 1546 (sshd.pam)
Tasks: 1 (limit: 564)
Memory: 3.2M (peak: 4.2M)
CPU: 2.728s
CGroup: /system.slice/sshd.service
└─1546 "sshd.pam: /usr/sbin/sshd.pam -D [listener] 0 of 10-100 sta>
Oct 15 14:33:42 n900 systemd[1]: Started OpenSSH Daemon.
Oct 15 14:33:43 n900 sshd.pam[1546]: Server listening on 0.0.0.0 port 22.
Oct 15 14:33:43 n900 sshd.pam[1546]: Server listening on :: port 22.
Oct 15 14:35:51 n900 sshd-session.pam[1664]: Connection closed by authenticatin>
Oct 15 14:35:52 n900 sshd-session.pam[1669]: Connection closed by authenticatin>
Oct 15 14:35:59 n900 sshd-session.pam[1671]: Accepted keyboard-interactive/pam >
Oct 15 14:35:59 n900 sshd-session.pam[1671]: pam_unix(sshd:session): session op>
Oct 15 14:36:00 n900 sshd-session.pam[1671]: pam_unix(sshd:session): session cl>
Oct 15 14:36:09 n900 sshd-session.pam[1695]: Accepted publickey for user from 1>
Oct 15 14:36:09 n900 sshd-session.pam[1695]: pam_unix(sshd:session): session op>
n900:~$
cat > ~/hwinfo.py << 'EOF'
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import time
import platform
from pathlib import Path
def read_file(path, default="N/A"):
try:
with open(path, "r") as f:
return f.read().strip()
except Exception:
return default
def read_int(path, default=0):
try:
return int(read_file(path, "0"))
except Exception:
return default
def human_size(size):
for unit in ["B", "KB", "MB", "GB", "TB"]:
if size < 1024:
return f"{size:.1f} {unit}"
size /= 1024
return f"{size:.1f} PB"
def get_battery():
base = Path("/sys/class/power_supply/bq27200-0")
if not base.exists():
# 尝试自动查找
for p in Path("/sys/class/power_supply").iterdir():
if (p / "capacity").exists():
base = p
break
else:
return {"status": "未找到电池信息"}
capacity = read_file(base / "capacity")
status = read_file(base / "status")
voltage = read_int(base / "voltage_now") / 1000000
current = read_int(base / "current_now") / 1000 # µA → mA
temp = read_int(base / "temp") / 10
health = read_file(base / "health")
technology = read_file(base / "technology")
time_to_empty = read_file(base / "time_to_empty_now")
cycle = read_file(base / "cycle_count")
return {
"capacity": f"{capacity}%",
"status": status,
"voltage": f"{voltage:.3f} V",
"current": f"{current:.0f} mA",
"temperature": f"{temp:.1f} °C",
"health": health,
"technology": technology,
"time_to_empty": f"{time_to_empty} min" if time_to_empty != "N/A" else "N/A",
"cycle_count": cycle,
}
def get_cpu():
model = "N/A"
cores = 0
freqs = []
try:
with open("/proc/cpuinfo") as f:
for line in f:
if line.startswith("model name") or line.startswith("Processor"):
model = line.split(":")[1].strip()
if line.startswith("processor"):
cores += 1
except Exception:
pass
# CPU 频率
for i in range(cores or 1):
freq_path = f"/sys/devices/system/cpu/cpu{i}/cpufreq/scaling_cur_freq"
if os.path.exists(freq_path):
mhz = read_int(freq_path) / 1000
freqs.append(f"{mhz:.0f} MHz")
return {
"model": model,
"cores": cores or "N/A",
"frequency": ", ".join(freqs) if freqs else "N/A",
}
def get_memory():
meminfo = {}
try:
with open("/proc/meminfo") as f:
for line in f:
key, value = line.split(":")
meminfo[key.strip()] = int(value.strip().split()[0]) * 1024 # kB → bytes
except Exception:
return {}
total = meminfo.get("MemTotal", 0)
free = meminfo.get("MemFree", 0)
available = meminfo.get("MemAvailable", free)
buffers = meminfo.get("Buffers", 0)
cached = meminfo.get("Cached", 0)
used = total - available
return {
"total": human_size(total),
"used": human_size(used),
"available": human_size(available),
"buffers/cache": human_size(buffers + cached),
"usage": f"{(used / total * 100):.1f}%" if total else "N/A",
}
def get_disk():
import shutil
disks = []
try:
for line in open("/proc/mounts"):
parts = line.split()
if len(parts) < 3:
continue
device, mountpoint, fstype = parts[0], parts[1], parts[2]
if not device.startswith("/dev/") or fstype in ("proc", "sysfs", "devtmpfs", "tmpfs", "devpts"):
continue
try:
usage = shutil.disk_usage(mountpoint)
disks.append({
"device": device,
"mount": mountpoint,
"fstype": fstype,
"total": human_size(usage.total),
"used": human_size(usage.used),
"free": human_size(usage.free),
"usage": f"{(usage.used / usage.total * 100):.1f}%",
})
except Exception:
continue
except Exception:
pass
return disks
def get_temperature():
temps = []
thermal = Path("/sys/class/thermal")
if thermal.exists():
for zone in sorted(thermal.glob("thermal_zone*")):
t = read_int(zone / "temp")
if t > 1000: # 有些是毫摄氏度
t = t / 1000
typ = read_file(zone / "type", zone.name)
temps.append(f"{typ}: {t:.1f} °C")
return temps
def get_backlight():
bl_path = Path("/sys/class/backlight")
if not bl_path.exists():
return "N/A"
for bl in bl_path.iterdir():
brightness = read_file(bl / "brightness")
max_brightness = read_file(bl / "max_brightness")
if brightness != "N/A" and max_brightness != "N/A":
percent = int(brightness) * 100 // int(max_brightness)
return f"{brightness}/{max_brightness} ({percent}%)"
return "N/A"
def get_uptime():
try:
with open("/proc/uptime") as f:
seconds = float(f.read().split()[0])
days = int(seconds // 86400)
hours = int((seconds % 86400) // 3600)
minutes = int((seconds % 3600) // 60)
return f"{days}天 {hours}小时 {minutes}分钟"
except Exception:
return "N/A"
def get_network():
nets = []
net_path = Path("/sys/class/net")
if net_path.exists():
for iface in sorted(net_path.iterdir()):
if iface.name == "lo":
continue
operstate = read_file(iface / "operstate")
# 尝试获取 IP
ip = "N/A"
try:
import subprocess
out = subprocess.check_output(["ip", "-4", "addr", "show", iface.name],
stderr=subprocess.DEVNULL).decode()
for line in out.splitlines():
if "inet " in line:
ip = line.strip().split()[1]
break
except Exception:
pass
nets.append(f"{iface.name}: {operstate} {ip}")
return nets
def main():
print("=" * 50)
print(" Nokia N900 硬件信息")
print("=" * 50)
print(f"时间 : {time.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"主机名 : {platform.node()}")
print(f"系统 : {platform.system()} {platform.release()}")
print(f"架构 : {platform.machine()}")
print(f"运行时间 : {get_uptime()}")
print()
# 电池
print("【电池】")
bat = get_battery()
for k, v in bat.items():
print(f" {k:16}: {v}")
print()
# CPU
print("【CPU】")
cpu = get_cpu()
for k, v in cpu.items():
print(f" {k:16}: {v}")
print()
# 内存
print("【内存】")
mem = get_memory()
for k, v in mem.items():
print(f" {k:16}: {v}")
print()
# 磁盘
print("【磁盘】")
disks = get_disk()
if disks:
for d in disks:
print(f" {d['device']} → {d['mount']} ({d['fstype']})")
print(f" 总容量: {d['total']} 已用: {d['used']} 可用: {d['free']} 使用率: {d['usage']}")
else:
print(" 未获取到磁盘信息")
print()
# 温度
print("【温度】")
temps = get_temperature()
if temps:
for t in temps:
print(f" {t}")
else:
print(" 未获取到温度传感器")
print()
# 背光
print("【背光】")
print(f" 亮度 : {get_backlight()}")
print()
# 网络
print("【网络接口】")
nets = get_network()
if nets:
for n in nets:
print(f" {n}")
else:
print(" 未获取到网络接口")
print()
print("=" * 50)
if __name__ == "__main__":
main()
EOF
n900:~$ chmod +x hwinfo.py
n900:~$ ./hwinfo.py
==================================================
Nokia N900 硬件信息
==================================================
时间 : 2026-10-16 00:54:24
主机名 : n900
系统 : Linux 7.0.5
架构 : armv7l
运行时间 : 0天 10小时 39分钟
【电池】
capacity : 80%
status : Discharging
voltage : 3.840 V
current : -377 mA
temperature : 37.1 °C
health : Calibration required
technology : Li-ion
time_to_empty : 15780 min
cycle_count : 0
【CPU】
model : ARMv7 Processor rev 3 (v7l)
cores : 1
frequency : 600 MHz
【内存】
total : 231.7 MB
used : 107.4 MB
available : 124.3 MB
buffers/cache : 90.4 MB
usage : 46.4%
【磁盘】
/dev/mmcblk0p2 → / (ext4)
总容量: 28.4 GB 已用: 638.8 MB 可用: 26.3 GB 使用率: 2.2%
/dev/mmcblk0p1 → /boot (ext2)
总容量: 456.5 MB 已用: 50.7 MB 可用: 381.4 MB 使用率: 11.1%
【温度】
bq27200-0: 37.1 °C
【背光】
亮度 : 60/255 (23%)
【网络接口】
tailscale0: unknown 100.125.241.40/32
usb0: down N/A
wlan0: up 192.168.1.36/24
==================================================
n900:~$tailscale
n900:~$ curl -fsSL https://tailscale.com/install.sh | sh
n900:~$ sudo systemctl enable tailscaled
Created symlink '/etc/systemd/system/multi-user.target.wants/tailscaled.service' → '/usr/lib/systemd/system/tailscaled.service'.
n900:~$ sudo systemctl start tailscaled
n900:~$ sudo systemctl status tailscaled
● tailscaled.service - Tailscale node agent
Loaded: loaded (/usr/lib/systemd/system/tailscaled.service; enabled; preset: disabled)
Active: active (running) since Thu 2026-10-15 15:33:10 GMT; 19s ago
Invocation: b5e242db467f4042b361a5dee91cce4c
Docs: https://tailscale.com/docs/
Main PID: 3322 (tailscaled)
Status: "Needs login: "
Tasks: 11 (limit: 564)
Memory: 10M (peak: 10M)
CPU: 2.223s
CGroup: /system.slice/tailscaled.service
└─3322 /usr/sbin/tailscaled --state=/var/lib/tailscale/tailscaled.state --socket=/run/tailscale/tailscaled.sock --po>
Oct 15 15:33:13 n900 tailscaled[3322]: Backend: logs: be:ec6de73828218c242db16930a0975a598aba378f3014e3d815c68498b101ad7d fe:
Oct 15 15:33:13 n900 tailscaled[3322]: Switching ipn state NoState -> NeedsLogin (WantRunning=false, nm=false)
Oct 15 15:33:13 n900 tailscaled[3322]: health(warnable=wantrunning-false): error: Tailscale is stopped.
Oct 15 15:33:14 n900 tailscaled[3322]: blockEngineUpdates(true)
Oct 15 15:33:14 n900 tailscaled[3322]: wgengine: Reconfig: configuring router
Oct 15 15:33:14 n900 tailscaled[3322]: wgengine: Reconfig: user dialer
Oct 15 15:33:14 n900 tailscaled[3322]: wgengine: Reconfig: configuring DNS
n900:~$ sudo tailscale up
To authenticate, visit:
https://login.tailscale.com/a/18*******e01503c
Success.
n900:~$ tailscale status
100.125.241.40 n900 alairs@ linux -
n900:~$ 通过tailscale传送文件,e64是win系统,文件默认放到系统下载目录
n900:~$ tailscale status
100.125.241.40 n900 alairs@ linux -
100.105.83.21 e64 alairs@ windows active; relay "sfo", tx 3221464 rx 1372592
n900:~$ sudo tailscale file cp /home/user/apklist e64:
apklist 1.73MiB 88.51KiB/s 100.00% ETA 00:00:00
n900:~$一些使用方法
检查电源信息
# 查询电源设备
n900:~# ls /sys/class/power_supply/
bq24150a-0 bq27200-0 isp1704| 设备 | 芯片 | 作用 |
|---|---|---|
| bq27200-0 | TI BQ27200 | 电量计(Fuel Gauge)负责测量电池容量、百分比、电压、电流、剩余时间等 |
| bq24150a-0 | TI BQ24150 | 充电管理芯片负责控制充电电流、充电状态、过充保护等 |
| isp1704 | NXP ISP1704 | USB 收发器 / USB 电源检测负责检测 USB 是否插入、VBUS 电压,以及 USB 充电相关状态 |
- bq27200-0 → 看电池还剩多少电
- bq24150a-0 → 控制怎么给电池充电
- isp1704 → 检测有没有插 USB / 充电器
# 电量信息
n900:~# cat /sys/class/power_supply/bq27200-0/status
Discharging
n900:~# cat /sys/class/power_supply/bq27200-0/capacity
53
# 充电芯片
n900:~# cat /sys/class/power_supply/bq24150a-0/status
Not charging
n900:~# cat /sys/class/power_supply/bq24150a-0/online
0
# USB 相关
# 是否插了 USB / 充电器,插着1,没插0
n900:/sys/class/power_supply/isp1704# cat online
0
# 电源类型
n900:/sys/class/power_supply/isp1704# cat type
USB
# 最大电流(µA,除以1000得到mA)
n900:/sys/class/power_supply/isp1704# cat current_max
0电池综合信息,确保先安装了bc
echo "电量: $(cat /sys/class/power_supply/bq27200-0/capacity)%"
echo "状态: $(cat /sys/class/power_supply/bq27200-0/status)"
echo "电压: $(echo "scale=2; $(cat /sys/class/power_supply/bq27200-0/voltage_now)/1000000" | bc)V"
echo "温度: $(echo "scale=1; $(cat /sys/class/power_supply/bq27200-0/temp)/10" | bc)°C"调整屏幕亮度
# 检查背光设备
n900:~# ls /sys/class/backlight/
acx565akm
# 查询当前亮度
n900:~# cat /sys/class/backlight/acx565akm/brightness
1
# 查询最大亮度
n900:~# cat /sys/class/backlight/acx565akm/max_brightness
255
# 设置亮度
n900:~# echo 10 > /sys/class/backlight/acx565akm/brightness