N900 与 Raspberry Pi 的结合

作者:Kyle Rankin

对于经常阅读我专栏的任何人来说,我试图成为第一个订购 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 作为远程显示器

现在我在我的 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 的一个非常理想的显示器。

Kyle Rankin 是 Linux Journal 的技术编辑和专栏作家,也是 Purism 的首席安全官。他是 Linux Hardening in Hostile Networks, DevOps Troubleshooting, The Official Ubuntu Server Book, Knoppix Hacks, Knoppix Pocket Reference, Linux Multimedia HacksUbuntu Hacks 的作者,也是许多其他 O'Reilly 书籍的贡献者。Rankin 经常在安全和开源软件方面发表演讲,包括在 BsidesLV、O'Reilly Security Conference、OSCON、SCALE、CactusCon、Linux World Expo 和 Penguicon 上。您可以在 @kylerankin 上关注他。

加载 Disqus 评论