想起来以前有人把Kindle作为树莓派的显示器。既然树莓派可以,N1同为Linux当然也应该能做到了。
Kindle系统基于Linux,root之后可以使用很多Linux命令,这里我们主要用到SSH。只要Kindle和N1同在一个网段,就可以在Kindle上通过SSH登录N1,登录之后就有很多可能性了,比如通过tmux、screen共享终端。Kindle的终端模拟器kterm内置软键盘,这样就可以把Kindle作为N1的显示器和键盘了,而且是支持触屏的键盘!
准备
从上面的原理来看,所有操作的前提是Kindle和N1处于同一个网段,这样才能SSH登录。实现这个前提有两种方法:一种是让Kindle和N1通过USBNet连接,另一种是连上同一个WIFI。本文主要探讨的是USBNet连接的方法,相比WIFI方案有如下优点:
- 物理连接,稳定性好、速度快
- 在Kindle休眠时不会断线(Kindle休眠断WIFI)
- 便携(连接不依赖热点)
- 供电方便(Kindle插在N1的USB接口供电、无需额外电源)
USBNet方案唯一的缺点就是Kindle与N1之间需要通过Mini USB线物理连接,而WIFI方案则不需要,相对来说使用时要优雅一些。
需要准备的软硬件
- Kindle
- 一台能JailBreak的Kindle
- KUAL
- USBNet
- Kterm
- N1
- Tmux(或者screen)
- 可选硬件
- USB键盘(准备阶段写脚本、测试等)
- 显示器
建立连接
Kindle的配置
1. JailBreak
Kindle需要JailBreak之后才能自行安装插件,新版本的固件已经不支持软JailBreak了。我有台KPW一代,幸好很久之前就破解了,这里就用它来当N1的屏幕吧。
有关Kindle的JailBreak资料可参考这里: Kindle Touch/PW1/PW2 5.0.x – 5.4.4.2 JailBreak. Plus FW 5.x USBNetwork., 下载地址在 Snapshots of NiLuJe’s hacks
2. 安装KUAL
KUAL是Kindle的一个应用载入器,我们可以把它理解为Windows的开始菜单或者Android的Launcher之类的。KUAL能够支持众多插件,后面要用到的USBNet就是其中一个。
KUAL的安装方法和相关信息可以在这里找到:KUAL: Kindle Unified Application Launcher
3. 安装USBNet
顾名思义,USBNet就是通过把Kindle当成一块USB网卡,这样N1就可以和N1建立物理连接了。
有关Kindle的USBNet资料可参考这里: Kindle Touch/PW1/PW2 5.0.x – 5.4.4.2 JailBreak. Plus FW 5.x USBNetwork., 下载地址在 Snapshots of NiLuJe’s hacks
下载后解压kindle-usbnet-0.22.N-xxx.xz
,然后把extensions目录下的usbnet拷贝到kindle的extensions目录,把对应版本的升级文件(KPW一代是Update_usbnet_0.21.N_install_touch_pw.bin
)放到mrpackages目录(不存在则新建一个)。
拔掉Kindle,然后启动KUAL,依次点击Helper
-> Install MR Packages
菜单,稍等一会儿提示安装完成并自动重启。
安装完成之后需要配置一下SSH,方便我们通过N1管理Kindle,当然这个操作不是必要的。连上电脑,进入usbnet/etc
文件夹将DISABLED_auto
改名为auto
,然后修改USE_WIFI
为true
,修改USB_WIFI_SSHD_ONLY
为false
,最后新建一个authorized_keys
文件添加一组公钥,这样就可以通过WIFI和USBNet登录Kindle了。完成这些步骤之后重启Kindle。
4. 启动USBNet
启动KUAL,一次点击菜单USBNetwork
-> Toggle USBNetwork
在USB Mass Storage
模式和USB Network
模式之间切换。当前状态可点击USBNetwork Status
查看,成功的话提示USBNetwork enabled
。
可以打开kterm使用ifconfig
命令查看网卡的地址。注意这里默认是192.168.15.x
网段,和网上常见的192.168.2.x
网段不同。这个配置是可以在usbnet的config
文件修改的。
N1的配置
1. 配置网卡
将Kindle通过USB连接到N1,重启N1。不知道为什么不支持热插拔,只能重启才能识别。
输入lsusb
命令,如果看到 Linux-USB Ethernet/RNDIS Gadget
这样的设备说明连接成功。
编辑/etc/network/interfaces
添加网卡配置:
1 2 3 4 5 6 7 8 9 10 |
# Kindle USBNet
allow-hotplug usb0
mapping hotplug
script grep
map usb0
iface usb0 inet static
address 192.168.15.1
netmask 255.255.255.0
broadcast 192.168.15.255
up iptables -I INPUT 1 -s 192.168.15.1 -j ACCEPT
|
重启N1,输入ifconfig usb0
检查网卡是否连接成功:
此时可以ping 192.168.15.244
检查Kindle是否能够连通。
2. 安装Tmux
tmux和screen都可以实现屏幕共享,但是我觉得tmux要强大很多,所以选择了tmux。
3. 自动打开tmux
N1这边需要实现的是登录tty1然后tmux,Kindle连上这个session后就可以和显示器同步了,可以使用Kindle的软键盘或者USB实物USB键盘同步控制。
可以通过连接USB和显示器的方式实现上述操作,但是我们的目的是为了脱离键盘和显示器,自动完成这些操作。
** a. 自动登录**
新建目录/etc/systemd/system/getty@tty1.service.d,新建文件/etc/systemd/system/getty@tty1.service.d/override.conf
,内容如下:
1 2 3 4 5 |
[Service]
ExecStart=
ExecStart=-/sbin/agetty --noissue --autologin 用户名 %I $TERM
Type=idle
|
这样每次启动的时候就可以自动登录了,牺牲了一些安全性,但是方便多了。
** b. 自动打开tmux**
根据需要在.bashrc
、.profile
、.zshrc
等某个文件添加tmux的自启动代码。我用zsh,所以在.zshrc
文件添加。
1 2 3 4 5 6 7 |
# start tmux on console(not ssh)
if command -v tmux>/dev/null; then
if [[ "$(tty)" =~ /dev/tty ]] && [ -z "$TMUX" ]; then
# We're on a TTY and *not* in tmux
exec tmux -u
fi
fi
|
重启N1,可以在屏幕上看到自动登录并且启动了tmux。
4. 自动连接
在Kindle的/mnt/us/extensions/kterm/bin
目录新建一个n1
脚本文件,实现自动登录N1并连接到tmux session的功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#!/bin/bash
# This script checks if kindle is connected to a Linux host via USBNet
# then try to attach to a tmux session from the host
# Author https://www.shuyz.com
# Update date: 2019/11/11 23:32
HOST=192.168.15.1
PINGTIMEOUT=2
USER=lance
SSHKEY=/mnt/us/extensions/data/k3
# Check if USBNet is enabled
if [ -z "$(ifconfig | grep usb0)" ]; then
echo "USBNet is not enabled."
exit 1
fi
# Check if HOST is accessable
isConnected=$(ping -w $PINGTIMEOUT -c 2 $HOST | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ -z $isConnected ]; then
echo "$HOST is not accessable!"
exit 1
fi
# Get the list of tmux sessions
sessionCnt=$(ssh $USER@$HOST -i $SSHKEY "tmux ls" | grep 'windows' | wc -l)
if [ $sessionCnt -lt 1 ]; then
echo "No tmux session found!"
exit 1
fi
# Try to connect to the first session
#ssh $USER@$HOST -i $SSHKEY -t "tmux attach"
ssh $USER@$HOST -i $SSHKEY -t "tmux attach -d"
|
修改kterm的启动脚本将kterm的bin
目录添加到PATH
。
将Kindle连上N1,重启N1,然后在Kindle上打开kterm,输入n1命令即可登录。
此时Kindle的屏幕与电脑屏幕完全同步:
脱离键盘和屏幕,使用Kindle完全控制N1:
参考资料
- Kindle Touch/PW1/PW2 5.0.x – 5.4.4.2 JailBreak. Plus FW 5.x USBNetwork.
- Snapshots of NiLuJe’s hacks
- KUAL: Kindle Unified Application Launcher
- USBNetwork Hack 安装教程:无线管理 Kindle – 书伴
- Pi k3w – Kindle 3 display for Raspberry Pi | projectdp
- Kindle ssh/scp with the USBnetwork package – MobileRead Forums
- How can I get autologin at startup working on Ubuntu Server 16.04.1?
本文转自shuyz:阅读原文