Aaron Li's Blog

In solitude, where we are least alone.

一名萌新程序员


Press on avatar to see the blogs.

树莓派 Raspberry Pi 安装 Android TV 与遥控器键位修改

0. 前言

老婆大人一直不肯在书桌办公,原因是书桌没有电视看,而手头又没有什么高性能的电视盒子接我的显示器。

前一阵子把树莓派 Raspberry Pi 3B+ 换成了 4B,这下可以在上面装Android TV了,赶快搞起来让老婆在每个屋子都有电视看。

1. 安装Android TV

这部分其实网上也有一些教程了,写一下方便别人也是方便自己。

首先我选择的是konstakang提供的基于LineageOS 18.1的Android TV 11操作系统

Image可通过其教程下载。

或直接从https://www.androidfilehost.com/?fid=17825722713688273838下载。

Rufus烧录到SD卡。

烧录后SD卡中全部分区为7G多。

剩余的SD卡空间可通过DiskGenius,或通过其教程提供的Tool扩展。

如图所示为DiskGenius扩展分区的方式,在userdata分区上右键选择调整分区容量。

将SD卡装回树莓派即可启动Android TV 11。

首次启动时会有一些初始化选项,我们需要至少外接一个键盘来完成后续操作。

2. 一些初始化配置

Konstakang的教程中有关于初始化的部分,因为是英文的,这里简单讲一下。

键盘按键对应功能:

F1 = 主页
F2 = 返回
F3 = 多任务
F4 = 菜单
F5 = 待机
F11 = 音量-
F12 = 音量+

语言设置

开发者模式

打开LAN ADB与SSH

隐私设置(安装第三方软件)

SSH登录的方法(取自教程):

安卓没有带密码的用户账户,需要通过ADB获取private rsa key,通过rsa key登录ssh。

adb connect 192.168.1.xxx
adb root
adb pull /data/ssh/ssh_host_rsa_key my_private_key
ssh -i my_private_key root@192.168.1.xxx

时区设置

这个系统貌似有BUG,设置时区无法保存,可以通过如下命令设置。

adb shell "setprop persist.sys.timezone Asia/Shanghai"

测试一下时区:

adb shell date

3. 基本的ADB指令

这一段提供一些基本的ADB指令

# 一般adb出现问题的时候强制关掉server
adb kill-server

# 获取adb root权限
adb root

# 通过LAN连接客户端
adb connect 192.168.1.xxx

# 安装xxx.apk
adb install xxx.apk

# 覆盖安装xxx.apk (一般升级用)
adb install -r xxx.apk

# 启动shell (开启ssh后可以直接用ssh)
adb shell

# 获取客户端的文件
adb pull /xxx/xx.xx

# 向客户端上传文件
adb push xx.xx /xxx/xx.xx

4. 遥控器键位修改

网购了个买了个USB 2.4G的遥控器,结果返回键不好用,这下怎么办。

下面介绍下如何修改遥控器键位在Android TV上的映射。

获取遥控器按键输入值

首先通过如下命令获取遥控器按键的输入:

adb root
adb shell
getevent

按一下遥控器的按键,查看输入的结果:

add device 7: /dev/input/event9
  name:     "YSTEK Laser Pen_V2.1 System Control"
add device 8: /dev/input/event8
  name:     "YSTEK Laser Pen_V2.1 Consumer Control"
add device 9: /dev/input/event7
  name:     "YSTEK Laser Pen_V2.1 Mouse"
add device 10: /dev/input/event6
  name:     "YSTEK Laser Pen_V2.1"

/dev/input/event6: 0004 0004 00070029
/dev/input/event6: 0001 0001 00000001
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0004 0004 00070029
/dev/input/event6: 0001 0001 00000000
/dev/input/event6: 0000 0000 00000000

我们可以通过以上结果确认两个信息:
设备为/dev/input/event6,即"YSTEK Laser Pen_V2.1"
返回键按钮的值为0x070029

获取遥控器对应配置文件

再通过如下命令

adb shell # 没有退出shell可以不输入
dumpsys input

获取到如下信息:

  7: YSTEK Laser Pen_V2.1
      Classes: 0x80000083
      Path: /dev/input/event6
      Enabled: true
      Descriptor: 556e197041405d0e6cf75f8a91bd36753588615b
      Location: usb-0000:01:00.0-1.4/input0
      ControllerNumber: 0
      UniqueId: 
      Identifier: bus=0x0003, vendor=0x276d, product=0x1101, version=0x0111
      KeyLayoutFile: /vendor/usr/keylayout/Generic.kl
      KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
      ConfigurationFile: 
      HaveKeyboardLayoutOverlay: false
      VideoDevice: <none>

我们可以通过以上结果确认该设备对应的Layout文件为/vendor/usr/keylayout/Generic.kl

修改遥控器配置文件

退出adb shell,通过

adb pull /vendor/usr/keylayout/Generic.kl

命令获取该文件,并在文件中增加

key usage 0x070029 BACK

再上传文件并重启

adb remount
adb push Generic.kl /vendor/usr/keylayout/Generic.kl
adb reboot

这样,返回键的映射就设置好了。

其他按键的名称可通过https://source.android.com/devices/input/key-layout-files?hl=zh-cn查询,或参考/vendor/usr/keylayout/Generic.kl文件中定义。

5. 后记

老婆大人觉得不错。

Reference

LineageOS 18.1 Android TV (Android 11)
Android 调试桥 (adb)
按键布局文件
adb与遥控器按键相关的指令-爱代码爱编程

最近的文章

Leanote APP in Linux startup menu with ICON

本文介绍之前没有解决的Leanote APP在Linux没有图标的问题。这里重新介绍一下添加启动器和图标的方法。

继续阅读
更早的文章

CapsLock修改为Backspace

本文介绍如何在Windows/Linux下,将CapsLock键修改为BackSpace。

继续阅读
Top