安卓机器使用原生Xorg运行Linux桌面(Frame Buffer)

笔记本/便携移动设备,手机平板等软硬件
felonwan
帖子: 262
注册时间: 2008-09-12 12:32

安卓机器使用原生Xorg运行Linux桌面(Frame Buffer)

#1

帖子 felonwan » 2013-10-14 0:02

最近一直在玩红米手机,但是红米用“Xorg :0”这样的命令不能运行X服务器,后面不加vtx时提示找不到/dev/tty(确实没有这个),加了vtx就告诉你不能创建virtual console x。不知道怎么解决。感觉这个可能和安卓用的双帧缓冲有关,有人能提供一些信息不?

大家都知道,Ubuntu touch出来了,但是一般的手机目前还不支持,需要移植。难道我们就真的不能体验ubuntu touch了么,即使是配置不是太差的手机?
但是使用framebuffer,我们可以在任何安卓手机或平板上体验各种Linux桌面。应当也是可以运行ubuntu touch的,但是由于它运行的不是Xorg,所以还需要你的参与和探索。

除了纯粹的玩,想在安卓手机和平板上运行Linux桌面,我是因为有一些软件,没办法在安卓下使用,比如说gimp。

如果不想破坏原来的安卓系统,用下面两个方法体验和使用Linux桌面比较好:
1. 直接安装Linux到SD卡上。这种情况是运行一个完整的Linux版本。可以使用别人构建好的镜像,一句dd if=xxxx.img of=/dev/sdX命令,就可以安装Linux系统到sd卡。然后根据制造商的不同,关机使用不同的按键组合就能从SD引导运行这个Linux系统。但是这种镜像要有针对你的手机或平板的驱动,你才能用一些功能,比如说最基本的lcd屏要能显示、触摸屏至少要能用吧。

2. 在安卓系统之上,利用安卓本身的Linux内核、服务和应用程序来运行Linux桌面。基本的原理都是chroot。但在使用图形界面这一块,有些不同:
2.1 用的最多的是VNC,在Linux系统里运行一个VNC服务器,然后用安卓下的VNC客户端连接就可以了。但是这种方法在配置一般的手机或平板上运行不流畅。
2.2 也可以使用Xserver应用(还没有Wayland或Mir),这比起VNC的速度比较慢的协议来说,效率要高一些,但是目前的Xserver基本不实用:http://blog.sina.com.cn/s/blog_59cf67260101bvjf.html
2.3. 关掉安卓服务,直接运行原生的Xorg,在这基础之上运行Linux桌面。
运行原生的Xorg有以下好处:
a. 比VNC:流畅。我的全志A10单核1.0GHz的机器,基本上有我原来那个赛扬的老机器用Windows XP的流畅度了。
b. 比TF卡:方便。不用重启机器,按各种按钮,就能切换到各种Linux桌面。
c. 比TF卡:方便。同上,玩完Linux,不用重启机器,就可以重新回到安卓。当然,这一点比VNC要差一点,这是由于没有人开发比较完整的Xserver。(或者Wayland、Mir也行啊)。
d. 比TF卡:还是方便。能直接用安卓下的驱动,不用从源码编译驱动。
e. 就和虚拟机一样,可以无痛的体验任何linux系统,只要有它的rootfs就行了。

爱折腾的筒子们,玩腻了chroot然后VNC和从TF卡启动的话,不妨来试试安卓平板上直接运行原生Xorg和Linux桌面吧。(直接使用安卓的Linux内核和相关的设备文件)

下面的内容就是在安卓的Linux内核和一些命令行工具上进行的,但是我后来发现原来已经有人把这个过程封装到安卓下的应用中了,所以本文可以用一句话概括:
使用Linux Deploy(它也支持VNC和Xserver哦)
原来介绍的过程,就只是相当于Linux Deploy的原理或者说执行步骤了。
哈哈,不过还是可以供大家参考吧,还有,大家使用的过程中有什么问题,也可以在下面讨论。欢迎拍砖。

非常感谢坛子里的oppop007、photor等人,他们的讨论:
viewtopic.php?f=177&t=368225
viewtopic.php?f=177&t=444342
viewtopic.php?f=126&t=444845
使我明白了其中的关键两步:链接frame buffer设备文件停止安卓服务。详细的教程还由oppop007来写的吧,我就写个简单的说一下关键的部分好了。

一、介绍
browser
browser
pdfrdfcoding
pdfrdfcoding
nexus7
nexus7
方法概述:把android的framebuffer设备文件链接到chroot的系统/dev目录下,停止安卓的服务,chroot到相应的系统里,然后运行Xorg,接着就可以运行桌面环境了。
适用范围:通用,支持framebuffer就行!(好像所有安卓机器都是用的fb吧。)


二、方法
1、测试:
测试你的机器的framebuffer是否能用,在终端中输入(adb shell或安卓上的终端应用都可以,已经root过的哦):

代码: 全选

cat /dev/zero > /dev/graphics/fb0
如果马上看到黑屏就对了,说明你的framebuffer好着。
不用担心,用手掌划几下屏幕,就能看到原来的安卓桌面了。
当然,可能你framebuffer设备的不一定是fb0,那就试试其它的,fb1、fb2……

2、使用:
2.1 链接framebuffer设备文件和停止安卓服务
chroot前,保持你的屏幕亮着,然后在adb shell里输入:

代码: 全选

cp -af /dev/graphics/fb0 $chroot_dir/dev/fb0
stop
这时屏幕就“冻”住了,停在最后stop命令前的界面,你用手指去触屏幕没有反应。

2.2 chroot
这个网上教程很多,就不详细说了。

2.3 启动xorg
chroot后可以直接试着启动Xorg,只需:

代码: 全选

nohup Xorg :0 vt1 &
如果你的屏幕由原来的冻屏变成黑屏了,说明可以使用framerbufer来运行Xorg了。
如果出错,请cat /var/log/Xorg.0.log,关于Xorg的配置和其中可能出现的问题,我放到二楼,欢迎大家讨论。

2.4 玩桌面
桌面嘛,自己想装个什么,xfce、lxde或是icewm等等,想启动啥就装啥启动啥就好。

2.5 退出Linux,重启安卓
玩完了linux,关掉相应进程,退出,然后要重新回到安卓也很方便,在安卓的shell里输入:

代码: 全选

start
就可以了。


有时候stop和start命令不太管用。可以用脚本, 坛子里的oppop007这个帖子:viewtopic.php?f=177&t=368225&start=30的35楼有两个脚本。不过我更喜欢另外两个(忘了在哪儿看到的了):
停止安卓服务的stopandroid脚本

代码: 全选

#!/system/bin/sh
setprop ctl.stop media
setprop ctl.stop zygote
#sleep 1
setprop ctl.stop bootanim
#sleep 1
setprop ctl.stop media
setprop ctl.stop zygote
#sleep 1
setprop ctl.stop bootanim
exit 0

启动安卓的startandroid脚本

代码: 全选

#! /system/bin/sh
setprop ctl.stop media
setprop ctl.stop zygote
setprop ctl.stop bootanim
setprop ctl.start bootanim
setprop ctl.start zygote
setprop ctl.start media
exit 0

ps. 我的平板是奥可视的PX92,CPU全志A10,Cortex-A8单核1GHz,内存1G。用上面的LXDE桌面流畅度还不错,现在的平板和手机大多比这强,想比用起来更没问题。我使用的镜像是 linaro-alip-armhf-t4和debian-wheezy-lxde-armhf-mk802ii-1080p60-25-03-2013。有人需要的话我就分享。
上次由 felonwan 在 2014-09-08 20:21,总共编辑 28 次。
felonwan
帖子: 262
注册时间: 2008-09-12 12:32

Re: 平板chroot运行原生Xorg

#2

帖子 felonwan » 2013-10-14 0:13

方法中运行Xorg之前,最好先对它进行配置,现在的配置方式好像都通过修改/usr/shar/X11/xorg.conf.d中的规则来实现。比较复杂,我们力求简单,先能看到桌面再说其它的。所以不妨用一个自己写的最简单的xorg.conf:

代码: 全选

Section "Device"
    Driver        "fbdev"
    Option      "fbdev" "/dev/fb0"
EndSection

Section "Screen"
        Identifier      "screen1"
        Device          "fbdev"
EndSection

Section "ServerLayout"
        Identifier      "layout1"
        Screen         "screen1"
EndSection

Section "ServerFlags"
        Option          "layout1"
EndSection
这个文件应当是在/etc/X11目录下,你可以再尝试启动Xorg。


参考:
http://blog.rot13.org/2012/08/x11-runni ... stack.html
https://code.google.com/p/linux-on-andr ... BasicSteps
上次由 felonwan 在 2013-10-20 21:51,总共编辑 2 次。
felonwan
帖子: 262
注册时间: 2008-09-12 12:32

Re: 平板chroot运行原生Xorg

#3

帖子 felonwan » 2013-10-14 0:13

触摸屏驱动的问题终于搞定,所谓“柳暗花明又一村”,用了mtrack这个touchpad的驱动就可以了。
之前一直卡在evdev上,因为evdev看起来很有希望,用evtest测试内核的触摸事件报告是完全正确的,但用evdev作为输入驱动,xorg的日志文件没有显示任何问题,就是触摸没有任何反应。
如果网友的啥问题的,还可以尝试multitouch这个驱动。

我的这个屏幕是可以休眠的,只是不能关背光,好像它的背光调节没有相应的Linux系统级别的调节方法,由安卓上层的java服务来做的,所以还比较麻烦。
电量直接查看/sys/class/power_supply/battery/uevent就可以知道,充电的问题内核里就搞定。
怎么要能把电源键换成屏幕休眠,把音量键映射为系统音量调节就好了。

蓝牙、摄像头就无所谓了。
adqiy
帖子: 8
注册时间: 2013-10-10 0:03
系统: ubuntu1204

Re: 安卓使用Linux桌面的普遍方法(Xorg)

#4

帖子 adqiy » 2013-11-03 13:33

楼主,是否能这个详细点的教程,谢谢…… :em06
felonwan
帖子: 262
注册时间: 2008-09-12 12:32

Re: 安卓使用Linux桌面的普遍方法(Xorg)

#5

帖子 felonwan » 2013-11-03 22:35

adqiy 写了:楼主,是否能这个详细点的教程,谢谢…… :em06
好像没多少人关注这个,Linux桌面用起来毕竟各种不便,只是偶尔玩一下。原理明白,其实操作很简单的 :em02 :em04
adqiy
帖子: 8
注册时间: 2013-10-10 0:03
系统: ubuntu1204

Re: 安卓使用Linux桌面的普遍方法(Xorg)

#6

帖子 adqiy » 2013-11-04 13:22

felonwan 写了:
adqiy 写了:楼主,是否能这个详细点的教程,谢谢…… :em06
好像没多少人关注这个,Linux桌面用起来毕竟各种不便,只是偶尔玩一下。原理明白,其实操作很简单的 :em02 :em04
有好多人再找,只是没看到这里的,所以写出来,大家学习一下,我是菜鸟,看了好多地方不懂……希望有教程
felonwan
帖子: 262
注册时间: 2008-09-12 12:32

Re: 安卓使用Linux桌面的普遍方法(Xorg)

#8

帖子 felonwan » 2013-11-06 19:22

adqiy 写了:有好多人再找,只是没看到这里的,所以写出来,大家学习一下,我是菜鸟,看了好多地方不懂……希望有教程
OK,我整理下。
adqiy
帖子: 8
注册时间: 2013-10-10 0:03
系统: ubuntu1204

Re: 安卓使用Linux桌面的普遍方法(Xorg)

#9

帖子 adqiy » 2013-11-06 22:14

谢谢楼主……
头像
5skyboy
帖子: 161
注册时间: 2009-01-01 4:35
来自: 重庆医科大学

Re: 安卓使用Linux桌面的普遍方法(Xorg)

#10

帖子 5skyboy » 2013-11-12 23:53

弱弱地问一下,支持双卡吗?
felonwan
帖子: 262
注册时间: 2008-09-12 12:32

Re: 安卓使用Linux桌面的普遍方法(Xorg)

#11

帖子 felonwan » 2013-11-13 0:05

5skyboy 写了:弱弱地问一下,支持双卡吗?
:em20 双sim卡?还是sd卡?

我想你大概说的后者吧,是说双启动么?
这个是在运行着安卓的时候关掉它的图形界面,然后运行Linux桌面。
头像
nexus-s
帖子: 425
注册时间: 2012-05-09 0:06
系统: Ubuntu 16.04.3 LTS

Re: 安卓使用Linux桌面的普遍方法(Xorg)

#12

帖子 nexus-s » 2013-11-18 22:21

手機屏幕太小 平板更適合來折騰

Sent from my Nexus 7 using Tapatalk
felonwan
帖子: 262
注册时间: 2008-09-12 12:32

Re: 安卓使用Linux桌面的普遍方法(Xorg)

#13

帖子 felonwan » 2013-11-21 11:23

nexus-s 写了:手機屏幕太小 平板更適合來折騰

Sent from my Nexus 7 using Tapatalk

嗯,手机上装的话确实没太大意思。平板配上个键盘和鼠标就可以当个小上网本用了。
头像
金玉满堂
帖子: 68
注册时间: 2013-08-17 2:24
系统: ubuntu 22.04

Re: 安卓使用Linux桌面的普遍方法(Xorg)

#14

帖子 金玉满堂 » 2013-11-27 3:11

做个记号
装个UBUNTU,只为下载和欣赏日本爱情电影
zqxz_conan
帖子: 6
注册时间: 2014-02-26 19:42
系统: win7 + ubuntu

Re: 安卓使用Linux桌面的普遍方法(Xorg)

#15

帖子 zqxz_conan » 2014-05-02 0:55

felonwan 写了: 使用Linux Deploy(它也支持VNC和Xserver哦)
原来介绍的过程,就只是相当于Linux Deploy的原理或者说执行步骤了。
请问楼主有尝试启动linux deploy时,用framebuffer来显示画面吗?
回复