基于Kwin完善Desktop Environment
1.问题:
多用户设计
每个用户启动一个android 容器,在登录时,根据不同用户启动不同容器。缺点:共有数据要多次挂载给多个用户使用?
所有用户共用一个android容器,在登录时,根据不同用户挂载不同的数据目录到容器中?缺点:切换用户时,需要保持多个用户共同使用私有数据就会冲突。
共享的app共用问题:将私有app和共享app分别安装到不同目录,启动时一起挂载到容器中。
宿主机上的设备,如USB key如何映射到android中?目前USB mouse还未找到方法如何映射到android container.
支持卸载android环境,包括自定义的host desktop environment.
视频解码加速共用问题,显卡一般支持多路同时解码(总解码能力是固定的)。
amd显卡的vce句柄最大同时支持16个,rx460 解码能力能支持h264 120 fps * 1920*1080 . 具体参考:Hardware VCE3.4
支持退出登录,和切换用户。android launcher发送退出指令,hosted desktop environment响应命令。
编写或配置登陆管理器(Display manager) https://gnu-linux.readthedocs.io/zh/latest/Chapter02/50_login.manager.html 不展示其他desktop environment。/etc/X11/default-display-manager 配置了默认的display manager。
将其他desktop environment文件隐藏。缺点:卸载android 环境后要复原。
将gdm读取destkop entry配置文件的路径修改?如果不支持配置,需要修改代码。
配置成自动登录。跳过输入密码和选择desktop environment步骤
2. 实现
sudo apt install kwin-x11
2.1 退出登录实现方案
目前维持android 桌面一直展示的原因是/bin/custom_de.sh 脚本中的startscreen.sh命令是一个前台进程(类似于gnome-session),如果该进程退出,桌面控制权就会退还给display name程序(一般是gdm).
基于上述原理,编写程序——android-session,该程序功能如下:
启动kwin;
通过docker api启动redroid容器,
启动startscreen.sh
循环监听dbus消息,如果收到logout消息,则kill 上述由自己启动的子进程,再退出。