DIY
2019 年 11 月 12 日
使用Kindle作为斐讯N1的显示器和触屏键盘
本文介绍如何将Kindle作为斐讯N1的显示器和键盘。由于N1缺乏输入输出设备,只能通过手机SSH进去操作,不太方便。通过将Kindle与N1通过USBNet连接,可以在Kindle上通过SSH登录N1,使用tmux、screen共享终端,将Kindle作为N1的显示器和键盘,并使用触屏的软键盘。USBNet连接方式的优点是物理连接稳定、速度快、便携、无需额外电源,缺点是需要通过Mini USB线连接。需要准备的软硬件包括JailBreak的Kindle、KUAL、USBNet、Kterm、N1和Tmux。
说明
前段时间给斐讯N1改装USB Type C供电口,这样就可以使用充电宝供电随时随地使用了。便携性是有了,但是缺少输入输出设备,只能连接手机热点之后用手机SSH进去操作,不太方便。当然随身带个显示器和键盘也是不可能的…
想起来以前有人把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
添加网卡配置:# 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/[email protected],新建文件
/etc/systemd/system/[email protected]/override.conf
,内容如下:[Service]
ExecStart=
ExecStart=-/sbin/agetty --noissue --autologin 用户名 %I $TERM
Type=idle
这样每次启动的时候就可以自动登录了,牺牲了一些安全性,但是方便多了。
** b. 自动打开tmux**
根据需要在
.bashrc
、.profile
、.zshrc
等某个文件添加tmux的自启动代码。我用zsh,所以在.zshrc
文件添加。# 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的功能。#!/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?
本文为原创文章,未经允许请勿非法盗用资源。我们保护知识产权,尊重每一个创作者的劳动成果。如需转载,请务必注明出处并获得授权,谢谢合作!
作者:Lance | 发表日期:2019 年 11 月 12 日