3D硬件加速的Proot Linux
转载自:https://ivonblog.com/posts/termux-proot-3d-acceleration/
在Android手机运行Linux桌面,自行编译zink驱动,观看1080p视频和玩3D游戏。这篇文章首先展示3D的执行效率提升,再来介绍如何安装。
简介
Termux是一款Android上的Linux终端机模拟器,不需要Root权限就可以用Proot安装Linux发行版。
但预设安装的是llvmpipe,没有硬体加速,换言之就是显示效果很差,网页播放1080p视频都会卡。
小白可以不看了!
小白可以不看了!
小白可以不看了!
实际测试3D性能
用VLC播放1080p 60FPS视频:
游戏extreme tux racer测试:
游戏Minetest测试:
Glmark2测试:
安装
sed -i 's/#allow-external-apps=yes/allow-external-apps=yes/g' .termux/termux.properites
pkg install wget proot x11-repo xwayland -y
wget https://kgithub.com/termux/termux-x11/releases/download/1.02.06/termux-x11.deb
dpkg -i termux-x11.deb
安装Proot Linux 容器
相信大家都会在Termux用Proot安装Linux吧!
这里用的是Ubuntu 21.04 Xfce4环境,别的容器请自行测试!
用Termux-x11显示桌面
默认用TigerVNC + VNC Viewer就可以看到桌面,但是改用Termux-x11 (Xwayland)显示桌面性能更好。
先退出Proot Linux环境,再启动Termux-X11:
termux-x11
然后右滑新建一个终端会话,编辑你的Proot Linux启动脚本,挂载Termux的TMP目录。Proot-Distro可以在启动命令后面加--shared-tmp
。
然后启动Proot Linux容器,设置DISPLAY变量,启动桌面(这里以xfce4为例,别的请自行测试!):
export DISPLAY=:0
dbus-launch --exit-with-session startxfce4
这样悬浮窗就会出现XFCE4桌面了。
如果要停止,请打开通知栏,找到Termux-X11,点击Exit,再回到Termux退出Proot Linux容器。
手搓驱动
前面虽然安装了系统,但还没有真正的硬件加速,默认是软件渲染,好玩的现在才开始!
到Github下载suhan-paradkar提供的发行版。是一个tar.gz文件,小白不要下错了!
解压缩tar.gz文件(tar xzvf tar.gz文件
),然后移动到家目录(~或者$HOME)。然后开始手搓:
#创建文件夹
mkdir ~/dir
#授予存储权限
termux-setup-storage
#更新软件包
echo Y | pkg upgrade -y
#安装X11源
pkg install -y x11-repo
#安装手搓环境
pkg install -y clang lld cmake autoconf automake libtool '*ndk*' make python git libandroid-shmem-static 'vulkan*' ninja llvm bison flex libx11 libdrm libpixman libxfixes libjpeg-turbo xtrans libxxf86vm xorg-xrandr xorg-font-util xorg-util-macros libxfont2 libxkbfile libpciaccess xcb-util-renderutil xcb-util-image xcb-util-keysyms xcb-util-wm xorg-xkbcomp xkeyboard-config libxdamage libxinerama
pip install meson mako
#进入目录
cd ~/dir
#克隆存储库
git clone --depth 1 git://github.com/freedesktop/xorg-xorgproto.git
git clone --depth 1 git://github.com/wayland-project/wayland.git
git clone --depth 1 git://github.com/wayland-project/wayland-protocols.git
git clone --depth 1 git://github.com/freedesktop/libxshmfence.git
git clone --single-branch --shallow-since 2021-02-22 git://github.com/mesa3d/mesa.git
git clone --depth 1 git://github.com/dottedmag/libsha1.git
git clone --depth 1 git://github.com/anholt/libepoxy.git
git clone -b xorg-server-1.20.13 --depth 1 git://github.com/freedesktop/xorg-xserver.git xorg-server-1.20.13
git clone --depth 1 git://github.com/glmark2/glmark2.git
#进入目录
cd ~/dir
cd xorg-xorgproto
#手搓
./autogen.sh --prefix=$PREFIX --with-xmlto=no --with-fop=no --with-xsltproc=no
make -j8 install
#进入目录
cd ~/dir/wayland
#创建文件夹
mkdir b
#进入目录
cd b
meson -Dprefix=$PREFIX -Ddocumentation=false ..
ninja install
#进入目录
cd ~/dir/wayland-protocols
./autogen.sh --prefix $PREFIX
make -j8 install
#进入目录
cd ~/dir/libxshmfence
./autogen.sh --prefix=$PREFIX --with-shared-memory-dir=$TMPDIR
sed -i s/values.h/limits.h/ ./src/xshmfence_futex.h
make -j8 install CPPFLAGS=-DMAXINT=INT_MAX
cd ~/dir/mesa
git checkout b8970120545b3cb250821013cb459bf4d2acfda4
*apply patches*
mkdir b
cd b
meson ..
ninja install
cd ~/dir
cd libsha1
./autogen.sh --prefix=$PREFIX
make -j8 install
cd ~/dir/libepoxy
*apply patches*
mkdir b
cd b
meson -Dprefix=$PREFIX -Degl=yes -Dglx=yes -Dtests=false -Dx11=true ..
ninja install
cd ~/dir/xorg-server-1.20.13
*apply patches*
./autogen.sh --enable-mitshm --enable-xcsecurity --enable-xf86bigfont --enable-xwayland --enable-xorg --enable-xnest --enable-xvfb --disable-xwin --enable-xephyr --enable-kdrive --disable-devel-docs --disable-config-hal --disable-config-udev --disable-unit-tests --disable-selective-werror --disable-static --without-dtrace --disable-glamor --enable-dri --enable-dri2 --enable-dri3 --enable-glx --with-sha1=libsha1 --with-pic --prefix=$PREFIX ; make -j8 install LDFLAGS='-fuse-ld=lld /data/data/com.termux/files/usr/lib/libandroid-shmem.a -llog'
make -j4 install
cd ~/dir/glmark2
mkdir b
cd b
meson -Dprefix=$PREFIX -Dflavors=x11-gl ..
ninja install
cd
XDG_RUNTIME_DIR=$TMPDIR $PREFIX/bin/Xwayland &
export GALLIUM_DRIVER=zink
export DISPLAY=:0
sleep 5; glmark2 --fullscreen -b jellyfish -b refract -b terrain -b desktop
测试3D硬件加速
termux-x11
然后右滑新建一个终端会话,刚刚手搓好的glmark2是最好的选择,不用启动Proot:
XDG_RUNTIME_DIR=$TMPDIR $PREFIX/bin/Xwayland &
export GALLIUM_DRIVER=zink
export DISPLAY=:0
sleep 5; glmark2 --fullscreen -b jellyfish -b refract -b terrain -b desktop
手搓完成后可以把~/dir
目录删除。
总结
即使如此,3D性能还是没有完全发挥,因为Proot无法强制所有程序都使用zink。
参考
https://gxmersam.blogspot.com/p/getting-hardware-acceleration-on-termux.html
https://github.com/RandomCoderOrg/ubuntu-on-android
支付宝支付
我照做了,但使用tmoe的ubuntu20.04时提示
```
root@localhost:~# startxfce4
/bin/startxfce4: X server already running on display 127.0.0.1:0
xrdb: Connection refused
xrdb: Can't open display '127.0.0.1:0'
^[[AUnable to init server: 无法连接: 拒绝连接
xfce4-session: 无法打开显示:.
输入 ‘xfce4-session --help’ 获取用法。
```
`proot-distro`是可行的
哦可能是我没挂载tmp目录