文章

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

本文介绍在树莓派上安装Android TV的方法,一些基本的ADB指令,以及遥控器键位修改的方法。

树莓派 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。

1
2
3
4
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"

测试一下时区:

1
adb shell date

3. 基本的ADB指令

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 一般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上的映射。

获取遥控器按键输入值

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

1
2
3
adb root
adb shell
getevent

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

获取遥控器对应配置文件

再通过如下命令

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

获取到如下信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  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,通过

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

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

1
key usage 0x070029 BACK

再上传文件并重启

1
2
3
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. 后记

老婆大人觉得不错。

2024更新

LineageOS 19之后HW decoding好了,但是Kodi播放4K的视频还是爆卡,可以播1080p的。

LinageOS自带的ntp也不能正常同步,可以通过如下命令更改NTP服务器。

1
2
adb root
adb shell "settings put global ntp_server ntp.ntsc.ac.cn"

修改之后重新开关一下自动同步时间就好了。

Reference

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

本文由作者按照 CC BY 4.0 进行授权