DIY时刻:树莓派 + Kindle = KindleBerry Pi

本文由 极客范 - 陈舸 翻译自 damaru。欢迎加入极客翻译小组,同我们一道翻译与分享。转载请参见文章末尾处的要求。

哇哦,我很高兴地宣布本文在Hacker monthly上发表了!

去年7月底,我们暂别了位于Kootenays的小工作室开始了欧洲之旅。这趟旅行意在发掘有关新兴媒体、精神家园、艺术、设计以及开源项目等方面的事物。我决定在随身携带的行头里尽量将电脑方面的需求减至最低,所以我只带了一台Kindle,一部照相机,一部Android手机以及我的树莓派!

kindle_berry_pi尽管树莓派是一个美妙的项目,也是电子产品中的一项壮举,可是如果要作为主要生产环境中使用的计算机,它还是有一些局限性。我成功说服了自己将树莓派当做我旅行途中的主要计算机来用。

我的计划就是用Kindle当显示屏,再加上树莓派的处理器运算能力,连一个外接键盘就能用的很爽了。虽然那时想给Kindle接一个外接键盘似乎是不大可能的,我需要用树莓派在中间起一个‘hub’的作用。我开始折腾起来,KindleBerry Pi很快就要诞生了。

虽然我最后还是在旅途中买了一部笔记本电脑(囧…),但我之前所有的设想和折腾最后终成现实,而且工作的很不错。我创建了一个便携式的开发平台。至少,它已经在概念上证实了可以用在其他类似的项目中。那么下面就来看看如何构建你自己的KindleBerry Pi吧。

折腾开始

要完成这项hack任务,你需要准备这些东西:

  • 一部Kindle 3
  • 一台树莓派
  • 2根micro USB转USB的连接线(一根用于电源,另一根连接Kindle和树莓派)
  • 一套键盘,连接到树莓派上
  • 可选部件:一个Kindle支架(可以拿旧的磁带盒替代)
  • 可选部件:一个USB集线器。因为当组装完成后KindleBerry Pi的USB端口都被占用了

kindle_berrypi1

Hacking Kindle

免责声明:这么做可能会使你的Kindle变砖,下面这些只是提示,我本人不会对你们的Kindle负责,也不会对你们的人生负任何责任……

第一步相当简单,将Kindle连接到树莓派上就好。将Kindle越狱,安装一个终端模拟器程序,比如这个就可以,然后安装UsbNetwork。确保开启了usbNetwork,通过USB连接设备,然后快速配置一下ifconfig usb0 192.168.2.1,搞定!现在我可以登录到树莓派上了,使用Kindle的显示屏,但可惜的是现在还只能使用Kindle的键盘,局限性较大。

现在,主要的挑战就是用连接到树莓派上的外接键盘来替代Kindle自带的键盘。下面就是gnu screen大显神威的时候了!Screen是一个终端多路复用器,如果你不知道终端是什么,好吧,那我就不太懂为什么你要看这篇文章了。我们可以说“Screen就是打了激素的终端”。关于Screen,其中一个非常棒的功能就是你可以在同一个‘屏幕会话’中实现多用户的功能。比如说,你想监视通过ssh连接到你的计算机的用户在干些甚么,或者如果你想在终端环境下录制屏幕录像。无论如何,我不确定为什么会有一个多用户模式,但正是这种能力使得KindleBerry Pi成为了可能。

那么,这里的魔法就是:要使用外接到树莓派上的键盘,你要先用Kindle登录到树莓派上,然后共享相同的“屏幕会话”,这样你就可以用外接到树莓派上的键盘了。你还是需要用Kindle上的键盘来创建首个连接,一旦连接上之后,你就可以使用外接的键盘了。

尽管gnu screen拯救了世界,要自动化这整个过程那还需要更多的步骤才能完成。

在树莓派上设置USB网络

首先,我们需要在连接到Kindle时可以使用UsbNetworking服务。在Kindle中开启usbNetworking时,会给它的USB端口分配一个IP 192.168.2.2。然后,我们需要给树莓派的USB端口分配IP 192.168.2.1,而这一步必须要能够自动完成。要做到这一点,第一步是为你的/etc/network/interfaces文件添加如下的内容:

interface

自动登录到树莓派

现在,我们需要树莓派完成如下功能:

  1. 确保用户能自动登录
  2. 在树莓派启动期间开启一个支持多用户的screen会话

树莓派启动时登录的用户和登录到Kindle上的用户是相同的。

关于如何在启动期间自动登录,在基于debian的系统上(树莓派的主流系统),你需要用任意一款文本编辑器打开/etc/inittab文件:

inittab

然后将这一行内容注释掉:

comment

接着添加这样一行内容:

respawn

我的代码美化工具添加了一些“#038;”这样的代码,你可以忽略掉

注:有些读者表示,用下面这行内容替换掉上面的代码才能正常工作

respawn2

这样应该就能完成了,现在我们要确保当树莓派启动时,以及当你从Kindle登录时,screen会话能自动启动。

Bashrc脚本

现在我们要确保自动登录上的用户会开启一个screen会话,但是同时我们也要保证当你用Kindle登录时,不会开启另一个screen会话,而是加入到那个已经开启的screen会话中即可。

根据你的系统环境,得到的结果可能会有所不同。所以,需要对代码做一些实验。大部分代码都在.bash_profile文件中。也许还有许多其他方式来完成,但这里是我总结出来的一种方案。

下面就是我的.bash_profile文件:

bashrc

那么,一旦所有步骤都已完成,你应该就可以启动你的KindleBerry Pi了。一旦启动步骤完成,你就可以通过USB接口以UsbNetworking模式连接到Kindle,在树莓派上使用shell和ssh了。到这里你应该就可以使用外接到树莓派上的键盘了,而在Kindle上看到显示结果!基于某些原因,有时候我还需要摆弄一下screen会话,杀掉多余的会话进程然后连接到主会话上。

你也可以采用一些简单的无密码ssh身份验证密钥,为了节省时间也可以添加一些实用的脚本来简化这整个连接过程。一旦连接上了,你就可以开始使用树莓派的外接键盘了。这的确还有很大的改善空间,所以不用客气,如果你觉得有什么好的点子尽管提出来吧。

下面是个简短的视频,向大家展示一下刷新率:

组建KindleBerry Pi的过程非常有趣,这套搭配组合我甚至使用了好几周。但是很快我就意识到如果我想提高工作效率,那最好还是得有台正规的电脑。我对于命令行和编程方面的知识还很弱,还没法适应要完全工作在shell环境下。所以,KindleBerry Pi目前还只是在概念上证明了其可行性,也许会在“世界末日”的境况下才会变得比较有用吧。但还是会有一些奉行极简主义的死忠码农们会觉得有这样一个平台也是很不错的。

利用我在KindleBerry Pi中所学到的知识,我的下一个项目将利用树莓派搭建一个移动音乐平台,欢迎继续收看!

 



原文链接: damaru 翻译: 极客范 - 陈舸

译文链接: http://www.geekfan.net/2978/

[ 转载请保留原文出处、译者和译文链接。]

陈舸
通信人,从事网络设备开发。技术方向:Linux/VxWorks、网络协议、C/C++,尤爱Python。热爱互联网,移动应用,开源软件。译有《算法精解:C语言描述》,《Linux/UNIX系统编程手册》(下册)新浪微博:@bigsh1p

5 评论

  1. Techni  /  2013 年 8 月 21 日, 上午 11:56 回复

    震惊,太好玩了。

    Thumb up 0 Thumb down 0

  2. 阿泉  /  2014 年 2 月 27 日, 下午 11:34 回复

    确保开启了usbNetwork,通过USB连接设备,然后快速配置一下ifconfig usb0 192.168.2.1,搞定!

    这里一直过不去,开启usbnetwork什么模式? 通过usb链接设备,链接电脑还是Raspberrypi?

    Thumb up 0 Thumb down 0

    • bigship  /  2014 年 2 月 28 日, 上午 8:53 回复

      usbnetwork是需要你自己下载安装在Kindle上的。你看原文中“然后安装UsbNetwork”不是说到了吗?而且还给出了下载的链接。

      Thumb up 0 Thumb down 0

  3. Joshua  /  2014 年 4 月 14 日, 下午 5:08 回复

    刷新率简直要死!怎么用2333
    不如买不上网本)

    Thumb up 0 Thumb down 0

  4. TimePower  /  2015 年 7 月 21 日, 上午 12:47 回复

    用平板我感觉应该不错

    Thumb up 0 Thumb down 0

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">