长期以来,我一直是各种形式的 树莓派 电脑的忠实粉丝。我有很多个,每个都有服务器的角色。大多数时候,它们工作得非常好,而且我很安心,因为它们消耗的少量电力正在降低账单。
如果您以前读过我的博客,您可能读过我关于我如何将 桌面计算迁移 到 Pi 3 的文章。这在相当长一段时间内都运行良好,但我最终不得不接受编辑大型图形和多媒体文件是一个问题,所以我用 英特尔 NUC 替换了它。然而,我对 Pi 实验的渴望仍然存在,我决定做一个“假设”练习,看看它是否能在旅途中生存下来。就在那时,我把我的 Pi Zero 从备件箱里拖了出来。
为什么要携带树莓派旅行
“我为什么要这样做?难道趋势不是携带尽可能强大的设备旅行吗?”
好吧,事情是这样的。去年,我的雇主发布了一项法令,为了遵守其安全策略,我们将不再能够将笔记本电脑作为行李托运,不久之后,美国政府决定一概禁止在往返某些国家的手提行李中携带笔记本电脑,你知道的,为了安全。那么我们如何解决这个问题呢?明智的选择是不携带笔记本电脑旅行,并在目的地使用热桌式备用电脑。毕竟,现在一切都在云端,对吧?或者,您可以将重要的商业敏感数据存储在 CD/DVD 或记忆棒上,但前提是它已加密到一定标准,并且您雇主的数据处理政策允许这样做。
但问题是多方面的:如果您的角色需要能够随时随地修复软件/系统,并且您并不总是有“备用”笔记本电脑怎么办?当我(乘火车)旅行时,我不得不随身携带笔记本电脑,这在一整天中都是一种痛苦。还有丢失/被盗/损坏的问题。笔记本电脑可能很容易成为目标,它们可能会被遗忘在火车上,或者您可能会被抢劫。或者还有“邪恶女仆”情景,在这种情景中,有人会在您不知情的情况下干扰您的设备。这样的例子不胜枚举。
因此,以下是您可以使用 Pi Zero 便携式电脑获得的功能
- 它足够小,可以放在手提行李或口袋里。
- 它的价格非常便宜,只需 8 美元,如果您的电脑丢失/被盗/损坏,可以再买一台。
- 整个操作系统和数据都保存在一个像指甲盖一样小的“磁盘”上,它很便宜,而且很容易在各种零售店买到。如果需要,您可以从手机上借来的卡创建一张新卡。
- 一个完整的开发环境,能够离线或在线工作。它也可以充当 SSH 服务器,以便多人可以同时使用它。
- 安全存储:如果您有妄想症或乘坐某些航空公司的航班旅行,您可以取出“磁盘”并将其存放在钱包或随身携带。如果您的电脑在运输途中被盗,请去商店购买另一台:您已经设置好了操作系统。
- 网络兼容:在世界各地,都有特定国家/地区的 WiFi 频率,只需更改一个简单的文本文件,您就可以在几分钟内合规。
- 键盘独立:您可以使用兼容的蓝牙键盘,但是当您需要做更苛刻的事情时,您可以使用 On-The-Go 电缆将任何 USB 键盘插入备用的 USB 接口。
- 电源容忍度高:我的 3300mAh 移动电源可以为 Pi Zero 供电约 8 小时,但如果一切都失败了,您可以使用电视的 USB 接口为其供电。一般来说,如果电视有 HDMI,它也会有 USB 插座,而 Zero 的功耗仅约为 120mA。或者使用别人的手机充电器!
- 最后,如果您不幸丢失/损坏了“磁盘”,您可以轻松地创建另一个磁盘,方法是从云中的安全位置下载 2GB 映像并将其刻录到新卡上。试试用普通笔记本电脑做那件事。
这对我来说已经足够有动力了!
这是我的成品,用啤酒杯垫作比例尺。

我如何设置用于旅行的 Pi Zero
在我看来,廉价的 Pi Zero 一直有点奇怪。它配备了单核 CPU,内存只有 512MB,其中一部分必须与板载视频共享。目前基于 Debian Stretch 的 Raspbian OS 被吹捧为适用于带有基于 LXDE 的“Pixel”GUI 桌面的 Zero,而且实际上它可以加载和启动——但实际上,可怜的东西真的很难管理 GUI 和 运行有用的软件。
尽管如此,我还是决心好好尝试一下,并使用内存占用最小的应用程序进行设置。我已经使用 Pi 3 完成了这个循环,所以这更像是重复相同的操作——只是更加如此!考虑到这是一个公路战士的电脑,以下是我希望它具备的功能
网页浏览器 | 轻量级但注重隐私 |
电子邮件 | 支持 IMAP 并且无缝支持 GPG |
XMPP/Jabber 客户端 | 简洁明了的消息传递 |
VPN 客户端 | 记住,我在路上 |
Tor 客户端 | 总是很有用... |
音乐 | 我携带了一些 MP3,但互联网广播也很酷 |
多个桌面 | 小屏幕上很有用 |
编辑器/IDE | 嘿,这是一台工作的电脑! |
FTP/SFTP 客户端 | 嘿,这是一台工作的电脑! |
总而言之,对于我的目的来说,这是一个非常有用的捆绑包,如果我实现了一个平衡的环境,它实际上可能会工作。
硬件
硬件有点挑战。电池不是问题,因为我有很多不同容量的可充电电源组,所以这真的只是选择一天合适的电源组的问题。唯一的前提是电池应该能够在使用的同时充电,而我所有的 Jackery 品牌电池都可以做到这一点。
对于我的“磁盘”,我选择了内部标准的 32GB SanDisk Extreme microSDHC。它们非常可靠,而且尺寸足够大,可以容纳大量软件和数据,同时仍然价格实惠。
我预计视频输出将是 HDMI 输出,使用 Zero 的 mini-HDMI 接口。这非常适合我的目的,因为大多数酒店电视都使用此接口。音频也将通过 HDMI 传输。
剩下的是人机接口设备 (HID),而这,正如预期的那样,引起了最大的惊慌。我非常讨厌蓝牙,而且由于 Zero 的接口有限,我不得不咬紧牙关使用蓝牙键盘和鼠标,最好是组合式的——而且要小巧。如果您还随身携带一个巨大的键盘,那么拥有一个微型电脑就毫无意义了,因此我不愉快的探索开始了。
蓝牙的困境
Zero 板载的 USB 接口数量有限——只有一个,如果您考虑到电源接口,这显然意味着您的连接选项有限。您可以始终使用 USB 扩展集线器,但这会增加携带的东西——包括另一个电源。这基本上让您尝试通过蓝牙连接键盘和鼠标。我不相信关于它如何“轻松连接各种设备”的炒作,而且我与各种据称是标准设备的设备搏斗,试图让这些该死的东西愉快地协同工作。Pi 的部分问题(我认为)是 WiFi 和蓝牙之间存在一些意想不到的交互,导致奇怪的事情发生。我的问题是我能够使用键盘或鼠标连接到 Pi,但不能同时可靠地连接两者。是的,我有一系列据称符合标准的蓝牙设备,但没有一个决定一起正常工作。
在这一点上,我想知道是否有蓝牙撒玛利亚人热线,但没有,那么我到底该怎么办?!暂时,我求助于使用带有两个 USB 插座的 Apple USB 键盘;这对于设置很有用,但不适合在路上使用。最后,我花了几个小时浏览 eBay 和亚马逊,然后我找到了它:“3 合 1 迷你无线蓝牙键盘鼠标触摸板,适用于 Windows iOS Android UK - 背光、超薄、内置可充电电池、QWERTY。” 纸面上完美,但它会起作用吗?我寄出了钱,四天后,一个纤薄的包裹从中国寄来了。而且它真的很好用!!第一次,每次都像馅饼和薯条一样与 Pi 相处融洽。我立即又订购了一个——意外会发生,我不想陷入困境。
因此,在我的硬件阵容完成后,我可以安心地设置 Pi 了。
GUI 和 Pi
回到我的软件要求,我认真思考了最小的桌面环境,并选择了提供的 LXDE 桌面,我在其他几个项目中使用过它。虽然 Pi 在屏幕处理方面有点吃力,但总体而言,它的性能良好,我开始设置我的软件。
网页浏览器 1 | Midori:尺寸和现代性之间的良好折衷方案。支持私密浏览,并与 Pi 捆绑在一起 |
网页浏览器 2 | 图形模式下的 Links2:轻量级、快速、安全、可与代理一起使用 |
电子邮件 | Sylpheed:小巧、轻便,并且与 GPG 配合良好 |
XMPP/Jabber 客户端 | Profanity。它很棒! |
VPN 客户端 | OpenVPN |
Tor 客户端 | 哈!又是 Links2 |
音乐 | SMPlayer:MPlayer 的 GUI |
编辑器/IDE | Geany:小巧而轻便,但功能强大 |
图像查看器/编辑器 | Pinta |
FTP/SFTP 客户端 | Filezilla |
其他东西 |
|
Midnight Commander | 不仅仅是一个文件管理器(稍后详细介绍) |
Tor 代理服务器 | 始终开启,所以我可以根据需要使用 Tor |
Nmap | 我有时需要测试一些东西 |
vnStat | 监控 wlan0 接口上的数据使用情况 |
SSH/SFTP 服务器 | 此发行版的标准配置 |
UFW | 防火墙;再小心也不为过! |
Gopher 客户端 | Gopherspace!它仍然存在,我使用的是原始 Gopher 客户端! |
以上所有软件包都经过尝试、测试且非常稳定。网页浏览器决定是经过深思熟虑的:Zero 真的 没有能力处理现代 臃肿、广告泛滥的 网站,老实说,我有一部可以处理这类事情的手机。同样,运行 Tor 代理的决定:能够访问 Marianas Web 非常方便,并且使用 Links2 作为浏览器意味着风险最小。
Sylpheed 是一个成熟的软件包,我相信它在很大程度上已被 Claws 取代,但实际上对资源的要求较低。GPG 与它无缝集成,我可以轻松地交换签名/加密的消息。它可以很好地呈现纯文本和 HTML 消息,并且界面简洁明了。
我需要一个简单的 XMPP/Jabber 客户端。我发现许多此类应用程序的问题在于,它们试图整合多种消息传递标准,而我实际上只需要 XMPP。Profanity 非常理想,因为它只做一项工作并且做得非常好。
系统设置
我花了很多时间设置操作系统以获得最佳性能;由于我之前已经设置过许多树莓派,这项任务变得更容易了。在如此小的(内存)系统中,是否使用交换文件的决定并非轻率做出,不幸的是,使用 GUI 桌面意味着交换文件经常被使用。另一种选择是不使用交换文件,并希望系统不会过度冻结。我使用了建议的默认值 100MB。
然后我查看了日志记录。由于这应该是一个小型便携式系统,我认为进行广泛的日志记录没有多大意义,尤其因为它会对 SDHC 卡产生长期的负面影响。一种解决方案是尽可能禁用应用程序中的日志记录,并牺牲少量内存来创建 tmpfs 内存文件系统。这将具有额外的优势,即它将在每次启动时重新创建。因此,我计算出可以使用 8MB 用于此目的,并相应地更新了 /etc/fstab。这效果非常好。
tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=8m 0 0
我还必须更新 /etc/rc.local 以在启动时提供一些必要的目录;这使 rsyslog 和 Tor 守护程序保持正常运行。
mkdir -p /var/log/rsyslog
mkdir -p /var/log/tor/
mkdir -p /var/log/vnstat/
chown vnstat.root /var/log/vnstat/
chown debian-tor /var/log/tor/
完成所有这些设置后,这台小电脑几乎可以投入使用了。但有一个问题。我已经提到过 Zero 上内存的匮乏,即使 GUI 和应用程序被精简到极致,我仍然经常使用交换空间。更糟糕的是,我精心设置的桌面菜单遇到了问题。
Pi 桌面预装了大量软件,主要是为了满足其作为教育机器的最初目的。我早就决定编辑菜单以删除大量“垃圾”,并将其替换为我的应用程序列表,所以我启动了主菜单编辑器应用程序。通常,它的响应速度很快,但在资源匮乏的 Zero 上,当我进行更改时,它会出现令人担忧的延迟和停顿。最终,这意味着我的临时菜单已损坏,更糟糕的是,默认的 Pi 菜单已恢复。搜索有关此问题的帮助表明菜单系统很复杂,如果更新未正确保存,则将替换为默认设置。
我尽可能地查看了菜单的结构,并认为尝试将这些该死的东西分开比它本身的价值更麻烦。因此,我放弃了 LXDE/Pixel,并安装了 XFCE(及其更轻量级的 GUI)来代替它。这一次,菜单编辑器似乎更稳定,但当我进行更改时,我意识到是的,它又发生了。在那时,我大发雷霆,把我的玩具扔出了婴儿车。我已经到了我的公路战士设置的十字路口:除了菜单之外,它工作得非常好,而且我感觉在完成了所有这些工作之后,我无法回头,所以,我心情沉重地重新进行了彻底的思考。它应该是一台黑客机器,对吧?它是 Linux,对于许多志同道合的人来说,这意味着一个基于文本的界面,对吧?
所以我做了我必须做的事情:我放弃了那个可恶的 GUI!是的,回到 90 年代,甚至更早,像老板一样运行它。™ 我脑海中的主要问题是我将不再拥有漂亮、安全、图标驱动的应用程序和多个桌面来使用。我的 WiFi/网络切换器将不复存在,更糟糕的是,我必须尝试从命令行管理蓝牙。这将是一个重大的挑战,但我决定无论如何都要继续进行,并且我有一个 microSDHC 的克隆副本,以防我失去勇气。
再次设置
顺便说一句,如果我使用的是全规格的树莓派 3,我就不会遇到这种情况。但这是我的选择,所以…… 这个练习开局良好。我已经重新启动到终端登录提示符,并且蓝牙键盘正在工作,所以我能够登录(以前,我运行 startx 进入桌面)。由于我不再需要担心桌面的臃肿,我的内存使用率仅为 78MB,没有交换空间使用;我已经感觉好多了。但是那些让生活变得轻松的应用程序呢?我做了更多的搜索,这就是我想出的。
网页浏览器 | Links2 不是 图形模式:轻量级、快速、安全、可与代理一起使用 |
电子邮件 | (Neo)Mutt:功能强大、可扩展,并且与 GPG 配合良好 |
XMPP/Jabber 客户端 | Profanity。它很棒! |
VPN 客户端 | OpenVPN |
Tor 客户端 | 哈!又是 Links2 |
音乐 | Midnight Commander + mpg123 |
编辑器/IDE | Nano:我正在使用它来写这篇文章 |
FTP/SFTP 客户端 | Midnight Commander |
文件管理器 | Midnight Commander |
其他东西 |
|
Tor 代理服务器 | 始终开启,所以我可以根据需要使用 Tor |
Nmap | 我有时需要测试一些东西 |
vnStat | 监控 wlan0 接口上的数据使用情况 |
SSH/SFTP 服务器 | 此发行版的标准配置 |
Gopher 客户端 | Gopherspace!它仍然存在,我使用的是原始 Gopher 客户端! |
图形解决方法 |
|
fbcat | 使用帧缓冲设备拍摄屏幕截图 |
fbi | Linux 帧缓冲图像查看器:在终端中显示图像 |
fbgs | 使用终端上的 Linux 帧缓冲设备显示 PostScript/PDF 文件 |
pnmtopng | 将 PPM 转换为 PNG 文件 |
您会注意到那里没有太多变化,只有一些值得注意的例外来显示图形内容。
再做一遍,并且正确地做
事情看起来不错,但我仍然有一些问题需要解决。
桌面
“但是多个桌面呢?!” 我听到你问,“你将如何查看图像或连接到 WiFi 网络?” 我需要找到一个解决方案,而且要快。对于多个桌面,我决定安装 tmux,Linux 终端多路复用器。在 Linux 系统上运行 tmux 有很多很好的理由,但我的主要理由是它可以实现多屏幕工作,并且它使用的内存非常少。它还使我能够通过 SSH 连接到 Pi 并接管会话,如下所示。

音乐
我必须说,对我来说,能够在工作或放松时听音乐非常重要,因此 (S)MPlayer 的丢失是一个重大打击。我能够收听单个 MP3 或完整播放列表。我能够流式传输互联网广播。唉。Midnight Commander 以其处理各种文件类型的能力而解救了我。秘密在于扩展文件菜单,它对我来说是这样的
shell/i/.mp3
Open=/usr/lib/mc/ext.d/sound.sh open mp3
regex/i/\.(m3u|pls)$
Open=/usr/lib/mc/ext.d/sound.sh open playlist
我的 sound.sh 看起来像这样
#!/bin/bash
do_open_action() {
filetype=$1
case "${filetype}" in
playlist)
mpg123 -C -@ "${MC_EXT_FILENAME}"
;;
m3u)
mpg123 -C -@ "${MC_EXT_FILENAME}"
;;
mp3)
mpg123 -C "${MC_EXT_FILENAME}"
;;
*)
;;
esac
}
case "${action}" in
open)
("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \
do_open_action "${filetype}"
;;
*)
;;
esac
点击 MP3 上的 Enter 键将播放该文件,或者点击 M3U 播放列表将播放播放列表中的任何内容。我使用了 -C 选项,以便我可以访问 mpg123 的控件。搞定!
SFTP/FTP 客户端
又是 Midnight Commander!您可以使用内置菜单设置客户端连接条目,并使用 CTL+\ 从下拉列表中选择它。FTP 站点在其中一个面板中呈现为目录结构,您可以像对待本地文件系统一样对待它。SFTP 有点困难,因为您必须将其设置为 SSH 连接,然后根据需要进行复制;如果您使用密码身份验证,这还可以,但对于公钥身份验证,我发现从命令行使用 SFTP 涉及的步骤更少。作为参考,这是语法
sftp://[user@]machine:[port]/[remote-dir]
The user, port and remote-dir elements are optional.

WiFi 选择器
在 GUI 世界中,我有一个漂亮的、基于图标的 WiFi 网络管理器应用程序,我可以用它在网络之间切换。文本模式的替代方案是名称奇怪的 wicd-curses。 这是一个使用光标键与 wicd(无线控制守护程序)通信的应用程序,并且效果非常好。我必须使用 systemctl 禁用 dhcpcd 服务才能使其工作,但至少它让我可以选择合适的网络,包括我的家庭网络或我在旅途中时手机的无线热点。这是 操作方法。

电子邮件和网页浏览
对于电子邮件和网页浏览,我分别使用 Mutt (Neomutt) 和 Links2,它们可以正常工作。
Gopher
相信我;您还不够老,不记得 Gopher,WWW 的文本模式先行者。严格来说,它也早于我的时代,但我运行着一个蓬勃发展的 Gopher 服务器,所以我需要一个客户端。这是一个在树莓派上运行的 Gopher 服务器的样子。
gopher://gopher.petergarner.net:70
__/\\\\\\\\\_______/\\\\\\\\\\\\\__________________/\\\____
_/\\\///////\\\____\/\\\/////////\\\______________/\\\\\____
_\/\\\_____\/\\\___\/\\\_______\/\\\__/\\\_______/\\\/\\\____
_\/\\\\\\\\\\\/____\/\\\\\\\\\\\\\/___\///______/\\\/\/\\\____
_\/\\\//////\\\____\/\\\/////////_____/\\\_____/\\\/__\/\\\____
_\/\\\____\//\\\___\/\\\_____________\/\\\____/\\\\\\\\\\\\\\\\_
_\/\\\_____\//\\\__\/\\\_____________\/\\\\__///////////\\\//__
_\/\\\______\//\\\_\/\\\_____________\/\\\_______________\/\\\___
_\///________\///__\///______________\///_________________\///___
Welcome to... "The Rpi4 Gopher"
... your source for local information, and beyond!
--> [14] About this server (and legal)/
-- Content
[18] Tech-related/
[19] Politics and Propaganda (from all sides)/
[20] Cyber and Internet related/
[21] Stuff (filed under "miscellany")/
.....
性能
总的来说,我很高兴地说,我切换到文本模式对用户级任务的处理响应非常有利。正如您从典型的 top 显示中看到的那样,原始 512MB 内存中仍然有大量的可用和缓存内存。现在,我正在听播放列表,在 SSH 连接的 tmux 会话中撰写这篇文章,运行 top, 并且 Mutt 正在处理电子邮件。
在正常情况下,这可能就是我需要做的全部事情,但是如果我需要,能够在旅途中开发和测试软件真是太好了。这是一个简单的 Python 脚本,用于获取 Pi 的 CPU 序列号(类型)
>>> #!/usr/bin/env python
...
>>> import subprocess
>>>
>>> def GetCPUserial():
... cpuinfo = subprocess.check_output(["/bin/cat", "/proc/cpuinfo"])
... cpuinfo = cpuinfo.replace("\t","")
... cpuinfo = cpuinfo.split("\n")
... [ legend, cpuserial ] = cpuinfo[11].split(' ')
... return cpuserial
...
>>> print GetCPUserial()
9000c1
>>>
top - 15:55:47 up 5:49, 6 users, load average: 0.21, 0.25, 0.34
Tasks: 112 total, 1 running, 110 sleeping, 1 stopped, 0 zombie
%Cpu(s): 3.9 us, 5.8 sy, 0.0 ni, 90.3 id, 0.0 wa, 0.0 hi, 0.0 si,
KiB Mem : 493252 total, 37984 free, 73248 used, 382020 buff/cache
KiB Swap: 102396 total, 102392 free, 4 used. 367336 avail Mem
当然,我定期备份,使用不可或缺的 rpi-clone。这个应用程序的优点是我可以在 Pi 运行时将整个 microSDHC 卡复制到另一张卡上。它还具有以下优点:如果我使用容量较小的卡,它将自动且安全地考虑到这一点。我使用 32GB 卡,但我可以将其转储到 8GB 卡,因为我只使用了大约 4GB。对于更大的目标卡,情况正好相反。如果您只向您的 Pi 添加一个实用程序,那应该是它——它比我曾经使用过的任何东西都更能让我摆脱困境!您还可以使用它来创建系统的分发副本。
电池续航时间
我只能将电池续航时间描述为“令人印象深刻”。一旦 Zero 启动,在以下情况下,它的平均功耗为 0.15A / 0.65W
- 系统
- 蓝牙
- WiFi
- 音频 (HDMI) 子系统
- 视频 (HDMI) 子系统
我从我的 6000mAh Jackery Jetpack 移动电源中测量了 20 小时的混合使用时间,如果我禁用 WiFi 并在“本地”模式下使用它,可能会更长。当然,将它与我较小的 3300mAh Anker 电池一起使用是可行的,但不幸的是,它在使用时无法充电。我还有一个 20,000mAh 的电池用于长途旅行:我还没有试用过。
带着它上路
就计算作为一项挑战而言,设置 Zero 是一项非常有价值的练习。它教会了我从低级别熟悉操作系统和应用程序软件,以便从系统中挤出最大量的内存。它还教会了我,我不必投入大量资金来构建一个相对强大的系统,该系统可以随身携带并在旅途中高效使用。
现在我已经快要完成设置了,是时候真正带着它上路,看看它在现场运行得如何了。嘿,也许我真的会把它带到田野里,看看我是否可以做一些工作并听听音乐。
这篇文章最初发布在 Peter Garner 的博客 上,根据 CC BY-NC-ND 4.0 许可发布,并经作者许可在此处重复使用。
7 条评论