随着内置蓝牙的新版树莓派 3 (RPi) 的出现,现在有了更多连接到 RPi 控制台的新选项,而无需费力寻找显示器和键盘(更不用说带有引脚的串行电缆了)。
这在举办研讨会和黑客马拉松时尤其有利,因为在这种情况下连接可能会出现问题。事实上,这个特定的技巧源于最近在柏林举行的 Mozilla 黑客马拉松,我们意识到我们为参与者准备了 10 到 15 个 RPi,但没有一个显示器、键盘、串行电缆或其他连接到 RPi 的方法。因此,它提出了一个问题——为什么我们不能使用蓝牙 (BT) 作为串行连接来访问控制台?
与网络上其他假设您已建立某些控制台访问权限的教程不同,我提供了无需任何先前连接即可执行此操作的步骤!为此,我们将修改 Raspian-Jesse 的基本镜像,以允许 RPi 启动到一种模式,您可以在其中通过蓝牙连接并在启动时建立“虚拟”串行连接。
为什么这很棒?
很多原因
- 无需电缆、显示器或键盘。
- 当无线接入点或有线交换机等资源不可用时,它允许您直接在 RPi 上工作。
- 在测试主要网络接口时,它为您提供了一种查看日志的简单方法。
- 或者,如何解决这个常见问题——您为 DHCP 设置了 Wifi,但无法在网络上找到该机器?与其事后使用 Pi Finder 等工具,您可以直接使用蓝牙终端会话启用 Wifi,然后立即运行 ifconfig 获取 IP。
- 最后但并非最不重要的是,它非常适合多 RPi 黑客马拉松——在这种情况下,您会遇到许多问题,例如太多设备具有相同的主机名,或者活动空间 Wifi 上阻止了 ssh 端口。
它很棒、快速且简单。它有点不安全,但我们还将在文章结尾附近提供一些关于如何解决此问题的说明。
有几个有用的互联网资源帮助我们完成了这项工作,但特别感谢 Dr. Rowland 提供的这个有用的脚本。
准备 RPi 镜像以进行编辑
以下是开始方法。
- 下载 最新的 Raspian Jessie 镜像。
- 挂载镜像以进行编辑。
注意:我们想要的是 EXT4 分区,其中包含我们想要编辑以进行启动的文件。
在 Mac 上挂载
这被证明具有挑战性,因为 OSX 本身不支持 EXT4。此限制留下了两个选项;我们觉得更有必要执行第二个选项,但第一个选项可能更快。
1. 安装原生 Ext4 驱动程序
此选项涉及将 EXT4 驱动程序安装到 OSX(请参阅 https://osxfuse.github.io/)并以原生方式读取 .img 文件。不建议将其用于写入 EXT4 分区,因此请谨慎使用。
2. 使用虚拟机
在这里,我们将安装 Virtual Box,然后创建一个 Linux 的虚拟机。然后,我们在 VM 中操作以通过共享文件夹以原生方式挂载 Raspian-Jessie 的 .img。
- 首先,下载并安装 VirtualBox。
- 接下来,在 Virtual Box 下的虚拟机中下载并安装 Mint Linux
- 在 Linux 虚拟机中,将镜像放在共享文件夹(对 VM 和您的桌面都可见)中,然后按照下面“在 Linux 上挂载”部分中的链接中的说明在 Linux 下挂载 .img 文件并编辑镜像。
在 Linux 上挂载
在 Linux 上挂载 EXT4 是一个简单且有据可查的过程:请参阅 如何挂载树莓派 Linux 发行版镜像?
在 Windows 上挂载
这是一个相当简单的过程,因为 Windows 本身支持 EXT4。有关如何执行此操作的简单指南,请参阅 我能否从 Windows 查看/复制 .img 文件的内容?
编辑镜像
挂载镜像并在命令提示符下后,您可以开始编辑启动所需的配置文件。
让我们从创建主脚本开始,该脚本将在启动时设置和建立您将连接到的默认蓝牙服务和串行端口。
您将在 /home/pi 目录中创建此文件,如下所示
$ sudo nano /home/pi/btserial.sh
将以下行添加到脚本中
#!/bin/bash -e
#Edit the display name of the RaspberryPi so you can distinguish
#your unit from others in the Bluetooth console
#(very useful in a class setting)
echo PRETTY_HOSTNAME=raspberrypi > /etc/machine-info
# Edit /lib/systemd/system/bluetooth.service to enable BT services
sudo sed -i: 's|^Exec.*toothd$| \
ExecStart=/usr/lib/bluetooth/bluetoothd -C \
ExecStartPost=/usr/bin/sdptool add SP \
ExecStartPost=/bin/hciconfig hci0 piscan \
|g' /lib/systemd/system/bluetooth.service
# create /etc/systemd/system/rfcomm.service to enable
# the Bluetooth serial port from systemctl
sudo cat <<EOF | sudo tee /etc/systemd/system/rfcomm.service > /dev/null
[Unit]
Description=RFCOMM service
After=bluetooth.service
Requires=bluetooth.service
[Service]
ExecStart=/usr/bin/rfcomm watch hci0 1 getty rfcomm0 115200 vt100 -a pi
[Install]
WantedBy=multi-user.target
EOF
# enable the new rfcomm service
sudo systemctl enable rfcomm
# start the rfcomm service
sudo systemctl restart rfcomm
保存文件,然后通过更新其权限使其可执行,如下所示
$ chmod 755 /home/pi/btserial.sh
现在您有了启动蓝牙服务并对其进行配置所需的脚本基础。但是要完全无头地执行此操作,您需要在启动时运行此新脚本。让我们编辑 /etc/rc.local 以自动启动此脚本。
$ sudo nano /etc/rc.local
在初始注释后添加以下行
#Launch bluetooth service startup script /home/pi/btserial.sh
sudo /home/pi/btserial.sh &
保存 rc.local 脚本,卸载镜像,并使用您喜欢的工具(我使用的是 ApplePiBaker)将其写入 SD 卡。
现在您已经准备就绪。给 Rpi 通电,并等待 30 秒左右启动。然后拔掉电源,再重新插上并让它启动第二次。重新启动蓝牙服务无法正常工作,因此我们需要重新引导。
现在让我们连接。
通过蓝牙连接到您的 RPi
在您的桌面/笔记本电脑上,打开蓝牙首选项并确保蓝牙已启用。
当它出现时选择“raspberrypi”(或您在 btserial.sh 脚本中用于 PRETTY_HOSTNAME 的任何内容)并与其配对。它应该自动配对(还记得我们之前说过关于安全问题的内容吗?)
在本地机器上打开一个终端窗口,并启动一个屏幕会话以通过从 RPi 连接创建的新蓝牙串行端口进行连接。首先,让我们检查串行连接的名称
$ ls /dev/cu.*
这应该会生成可用串行端口的列表,其中一个现在应该以您的 pi 的名称命名。然后我们可以连接。
$ screen /dev/cu.raspberrypi-SerialPort 115200
等一下,您应该位于 RPi 控制台的提示符处!恭喜!
更多提示
不要停止阅读——本节包含一些关于使用 RPi 终端的有用提示,包括使其更安全。
交互式终端 [可选]
最初的惊叹过后,您会意识到终端窗口的大小没有反映在串行会话的输出中。您可以通过以下两种方式之一调整此设置。
手动调整大小
只需记下当前终端窗口的大小,然后输入命令
stty rows XX cols YY
将 XX 和 YY 替换为您本地终端窗口的大小
自动(动态)调整大小
如果您希望在更改本地终端窗口大小时终端会话能够响应,则需要执行以下操作
启动 sshd,默认情况下它处于关闭状态。在命令提示符下,运行
$ sudo raspi-config
现在
- 选择“高级配置”
- 选择“SSH”
- 选择“激活”
- 退出 raspi 配置
激活 SSH 后,您现在可以输入以下命令
$ su pi -
$ ssh localhost
您的终端窗口现在将动态调整大小。
安全性 [可选,但实际上并非如此…]
如果您身处荒岛,远离人类,现在可以停止了。如果不是,您应该担心此连接对其他人开放,他们可以连接并使用。为了提高安全性,建议您在连接到 RPi 后关闭蓝牙可发现性和配对。
在 RPi 上的控制台中,运行以下命令
$sudo bluetoothctl
[bluetooth]#</pre>
Turn off discoverability:
<pre>[bluetooth]#discoverable no
关闭配对
[bluetooth]#pairing no
并退出 bluetoothctl
[bluetooth]#quit
$
此时,您应该可以使用至少一些小的安全措施了。如果机器重新启动,则在重新连接时需要再次执行这些安全步骤。
总结
就是这样——您现在应该已经通过蓝牙设置了自己的工作 RPi 控制台,并完全无头地配置了它。您现在应该能够继续开展自己的 RPi 项目,与他人一起开展,并最大程度地减少连接问题。
如果您在操作过程中遇到问题,或者有任何您自己的技巧要分享,请在评论中分享。
特别感谢 Florian Merz 对本文的技术审查。
关于 Patrick Hundal
Mozilla 的业务开发与战略合作伙伴关系。
一条评论