N900 与 Raspberry Pi 的结合
对于经常阅读我专栏的任何人来说,我试图成为第一个订购 Raspberry Pi 的人可能并不令人惊讶。我的意思是,一个售价 35 美元,700MHz,256MB 内存,带 HDMI 输出并运行 Linux 的计算机有什么不喜欢的呢?最终,我没有成为首批 10,000 台的购买者,但我也紧随其后。所以,现在我已经拥有 Raspberry Pi 一个星期了,我已经发现了很多有趣的用途。您可以期待未来看到更多关于 Raspberry Pi 的专栏文章(可能包括对我啤酒冰箱文章的更新),但首先,在本文中,我将讨论我最喜欢的两款袖珍型 Linux 计算机的结合:Raspberry Pi 和我的诺基亚 N900。
起初您可能会想,为什么要将这两台计算机结合起来。毕竟,它们的大小差不多,并且具有相似的初始硬件规格。每台计算机都有其自身的优势,例如 N900 上的蜂窝网络和触摸屏,以及 Raspberry Pi 上的以太网端口和 HDMI 视频输出。在本文中,我将解释如何将 N900 连接到 Raspberry Pi 以建立私有 USB 网络,共享 N900 的蜂窝连接,甚至将 N900 用作袖珍型显示器。在所有示例中,我都使用了主 http://www.raspberrypi.org 页面链接的默认 Debian Squeeze Raspberry Pi 镜像。
设置 USB 网络共享将 N900 与 Raspberry Pi 一起使用的第一步是在这两个设备之间设置私有 USB 网络。有很多方法可以做到这一点,但我发现最有效的方法是通过 N900 上的 Mobile Hotspot 应用程序。这个程序最初是一种让您通过将 N900 变成无线接入点来与您的计算机进行网络共享的方式;然而,由于它使用 WEP 进行安全保护,我总是更喜欢使用 Mobile Hotspot 鲜为人知的 USB 网络选项。这样,我不仅可以共享我的笔记本电脑网络,而且由于网络共享会消耗大量电池电量,通过 USB 插入电源,我的笔记本电脑还可以为我的 N900 充电。
默认情况下,Raspberry Pi 未设置为启用 USB 网络,但幸运的是,这很容易设置。只需登录到您的 Raspberry Pi 并以 root 身份编辑 /etc/network/interfaces 文件。在它说下面
iface eth0 inet dhcp
添加
iface usb0 inet dhcp
现在,在您的 N900 上启动 Mobile Hotspot 程序,并确保将其配置为将接口设置为 USB,如图 1 所示。然后将 Raspberry Pi 连接到您的 N900,这将提示您在海量存储模式或 PC 套件模式之间进行选择。选择 PC 套件模式,然后单击 Mobile Hotspot GUI 上的“开始”按钮。这应该会自动为您设置 USB 网络,您应该在 Raspberry Pi 的 /var/log/syslog 中看到如下日志
Jan 1 01:04:44 raspberrypi kernel: usb 1-1.3: new high speed
↪USB device number 5 using dwc_otg
Jan 1 01:04:44 raspberrypi kernel: usb 1-1.3: New USB device found,
↪idVendor=0421, idProduct=01c8
Jan 1 01:04:44 raspberrypi kernel: usb 1-1.3: New USB device
↪strings: Mfr=1, Product=2, SerialNumber=0
Jan 1 01:04:44 raspberrypi kernel: usb 1-1.3:
↪Product: N900 (PC-Suite Mode)
Jan 1 01:04:44 raspberrypi kernel: usb 1-1.3:
↪Manufacturer: Nokia
Jan 1 01:04:47 raspberrypi kernel: cdc_ether 1-1.3:1.8: usb0:
↪register 'cdc_ether' at usb-bcm2708_usb-1.3,
↪CDC Ethernet Device, 66:77:ea:fa:12:8c
Jan 1 01:04:47 raspberrypi kernel: usbcore: registered new
↪interface driver cdc_ether
Jan 1 01:04:47 raspberrypi kernel: cdc_acm 1-1.3:1.6:
↪ttyACM0: USB ACM device
Jan 1 01:04:47 raspberrypi kernel: usbcore: registered
↪new interface driver cdc_acm
Jan 1 01:04:47 raspberrypi kernel: cdc_acm: USB Abstract
↪Control Model driver for USB modems and ISDN adapters

图 1. 配置为 USB 网络共享的 Mobile Hotspot
设置的点对点网络将您的 N900 变成网关,IP 地址为 10.8.174.1,您的 Raspberry Pi 被赋予 IP 10.8.174.10,您可以从 Raspberry Pi 上 ifconfig 的输出中看到
usb0 Link encap:Ethernet HWaddr 66:77:ea:fa:12:8c
inet addr:10.8.174.10 Bcast:10.8.174.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:309 errors:0 dropped:3 overruns:0 frame:0
TX packets:204 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:25703 (25.1 KiB) TX bytes:30676 (29.9 KiB)
由于 N900 设置为网关,您的 Raspberry Pi 可以使用该蜂窝网络进行任何出站连接,而无需担心插入以太网端口。此外,如果您在 Raspberry Pi 上启动 SSH 服务 (sudo service start ssh
),或者更好的是,如果您确保在启动时启用它,您可以从 N900 使用 ssh pi@10.8.174.10
从终端 SSH 进入您的 Raspberry Pi。如果在您尝试 SSH 连接到此 IP 时,您收到“no route to host”错误,请调查您的 Raspberry Pi 日志并确认您确实获得了 10.8.174.10 IP。我在我的系统上发现,有时我会得到 .11 或 .12 IP。
现在我在我的 N900 和 Raspberry Pi 之间建立了一个点对点的本地网络,我已经消除了连接网线的需要,但我仍然需要摆脱那根讨厌的 HDMI 电缆。毕竟,您可能想在手边没有支持 HDMI 显示器的地方破解您的 Raspberry Pi。幸运的是,通过一些调整,您可以将您的 N900 触摸屏用作 Raspberry Pi 的显示器,并且仍然能够使用连接到 Raspberry Pi 的键盘或鼠标进行输入。
不幸的是,我不能直接将 Raspberry Pi 的复合输出或 HDMI 输出连接到 N900,但我可以做的是利用相对低延迟的本地 USB 网络,并通过 VNC 共享 N900 X 显示。第一步是在 Raspberry Pi 上安装 x11vnc 包,命令为 sudo apt-get install x11vnc
。
一旦安装了 x11vnc,我需要将其设置为在 X 启动时自动启动。我想这并不是绝对必要的。毕竟,您可以每次都 SSH 进入并自行启动它,但我认为让它自动启动会更方便。为此,创建一个名为 /home/pi/.config/autostart/x11vnc.desktop 的文件,内容如下
[Desktop Entry]
Name=X11VNC Server
Comment=Share this desktop by VNC
Exec=x11vnc -forever
Icon=computer
Terminal=false
Type=Application
StartupNotify=false
#StartupWMClass=x11vnc_port_prompt
Categories=Network;RemoteAccess;
接下来,我需要更改 x11-common 包的设置,以便它允许任何用户启动 X 会话。这是必要的,以便我可以自动在启动时运行 startx
。如果没有此更改,X 将检测到它不是从控制台会话运行的,并且会报错。为此,运行 sudo dpkg-reconfigure x11-common
,并在提示选择“允许用户启动 X 服务器”时,选择“任何人”。
最后一步是在启动时启动 X。有很多方法可以做到这一点,但在 Raspberry Pi 上最简单的方法之一是通过 /boot/boot.rc 文件。默认情况下,该文件不存在,但如果存在,它允许您指定在启动过程中运行的命令,以便您可以执行启用 SSH 或启动 X 等操作。以下 /boot/boot.rc 文件同时执行这两项操作
# sourced from rc.local on Raspberry Pi
#
# Name this file as "boot.rc" and put it on the boot
# partition if you want to run it.
# echo "Checking ssh and enabling if absent"
if ! ls /etc/rc5.d | grep "^S..ssh\$" >/dev/null; then
insserv ssh
service ssh start
fi
su pi -c startx
一旦您启动 Raspberry Pi 并设置本地 USB 网络,如果您 SSH 进入并运行 ps -ef
,您应该会看到 x11vnc 正在运行。现在您可以从 N900 启动 VNC 客户端(我更喜欢 Presence VNC)并连接到 10.8.174.10,您应该会看到 Raspberry Pi X 会话的副本(图 2)。如果您在 Raspberry Pi 启动时连接了 HDMI 电缆,则 X 会话应为全 1080p 分辨率,这在 N900 屏幕上可能会显得有点小。但是,如果您在未连接 HDMI 的情况下启动(这是此黑客的通用用例),则 X 会话将配置为复合输出,分辨率更易于管理,为 640x480。在此分辨率下,一旦您告诉 Presence VNC 全屏显示,它就会占用整个 N900 显示屏,并且由于您在 Raspberry Pi 上共享一个真实的 X 会话,因此您可以使用插入其中的任何键盘或鼠标。当然,它不如巨大的 1080p 显示器那么好,但很难将 1080p 显示器装进口袋里。

图 2. N900 上连接到 Raspberry Pi 的 Presence VNC
虽然我在这篇黑客文章中谈论了很多关于 N900 的内容,但相同的原理也应该适用于将几乎任何可以运行 VNC 客户端的设备变成 Raspberry Pi 的显示器,前提是这两个设备可以通过网络连接。事实上,如果您是随身携带彩色平板电脑的众多人之一,那么这将是 Raspberry Pi 的一个非常理想的显示器。