utermux

转载自: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测试:

etr

游戏Minetest测试:

mc

Glmark2测试:

g2

安装

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://youtu.be/sbrif7lbkXE

https://gxmersam.blogspot.com/p/getting-hardware-acceleration-on-termux.html

https://github.com/RandomCoderOrg/ubuntu-on-android

https://udroid-rc.gitbook.io/udroid-wiki/udroid-landing/quick-installation-and-usage/setting-up-gui/termux-x11

扫描二维码,在手机上阅读!
支付宝支付

支付宝支付

评论

icon_question.gificon_razz.gificon_sad.gificon_evil.gificon_exclaim.gificon_smile.gificon_redface.gificon_biggrin.gificon_surprised.gificon_eek.gificon_confused.gificon_cool.gificon_lol.gificon_mad.gificon_twisted.gificon_rolleyes.gificon_wink.gificon_idea.gificon_arrow.gificon_neutral.gificon_cry.gificon_mrgreen.gif

  1. 张璟 张璟
    Chrome 98

    我照做了,但使用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`是可行的

    1. 张璟 张璟
      Chrome 98

      哦可能是我没挂载tmp目录

This is just a placeholder img.