Skip to content
This repository has been archived by the owner on Apr 26, 2023. It is now read-only.

关于对termux:x11的支持 #113

Open
txmu opened this issue Jan 3, 2022 · 38 comments
Open

关于对termux:x11的支持 #113

txmu opened this issue Jan 3, 2022 · 38 comments
Labels
enhancement New feature or request

Comments

@txmu
Copy link

txmu commented Jan 3, 2022

Related problem

termux:x11是原生X,仅支持xwayland

Describe the solution you'd like

在安装了termux:x11 apk并启动了服务的情况下,在容器内提供对其的支持,允许桌面通过termux:x11显示

Describe alternatives you've considered

No response

Additional context and details

No response

@txmu txmu added the enhancement New feature or request label Jan 3, 2022
@2moe
Copy link
Owner

2moe commented Jan 5, 2022

去年8月份有一条与本话题相关的 issue: #61 How to use wayland

@2moe
Copy link
Owner

2moe commented Jan 5, 2022

现阶段,先自己手动配置吧!
在 termux 里 执行 termux-x11 :2 (可以改为其它端口), 然后修改容器配置 "MOUNT_TMP=true"。
在容器内部, 执行以下操作

# 经测试发现 XDG_RUNTIME_DIR 的值为 /tmp 时会出错
unset XDG_RUNTIME_DIR
# 指定 显示端口
export DISPLAY=:2
# 启动 dbus-daemon
service dbus start
# 可以用其它 Xsession, 例如 xfce4-session, startplasma-x11
mate-session

我考虑把它加到 edition2022 里去(可能得要等很久很久)。

@Xunflash
Copy link

现阶段,先自己手动配置吧! 在 termux 里 执行 termux-x11 :2 (可以改为其它端口), 然后修改容器配置 "MOUNT_TMP=true"。 在容器内部,把 xsdl 中的 DISPLAY 改成 :2 就可以了。 如果出错的话,那就手动启动。 先启动 dbus, 最后让指定 session 显示在指定 DISPLAY 上。 DISPLAY=:2 /etc/X11/xinit/Xsession(可以用其它 session)

我考虑把它加到 edition2022 里去(可能得要等很久很久)。

chroot好像没有MOUNT_TMP这个参数,我自己加上也没用...需要自己ln吗,具体是什么目录

@2moe
Copy link
Owner

2moe commented Mar 16, 2022

@Xunflash
截屏2022-03-16 19 27 39
先更新到这个版本,然后安装一个新的容器。
2022-03-16 19 28 37
然后你会发现多了几个选项。
选择“挂载tmp”
截屏2022-03-16 19 28 55
选择 true.
ps: 挂载源和挂载点都不用改。

补充说明: 我并没有在 chroot/unshare 中测试过 termux-x11。
之前只在 proot 中测试过。

你可能不知道的冷知识:
tmoe 在两年前曾适配过 xwayland ,不过不是 termux-x11。
那时候好像还没有 termux-x11。
注:后来那个功能被我砍掉了。

@2moe
Copy link
Owner

2moe commented Mar 16, 2022

其实我应该开放 unshare/chroot 的 自定义挂载源与挂载点的功能。
只不过太危险了。我必须要保证容器在移除前,卸载掉所有已经挂载的目录。


这个其实很简单的,就是 mount src_dir target_dir。 举两个例子:

mount /dev/xx /mnt/yy
mount -o bind /xx /yy

只不过有些目录可能要加特定参数, 会比较麻烦。

@2moe
Copy link
Owner

2moe commented Mar 16, 2022

@Xunflash
以我对 xwayland 的浅薄认知,我认为它的兼容性和稳定性可能没有想象中的那么完美。
呜,一定是我太菜了。
我想要等我对这方面的内容了解得更加深刻后,再来适配 xwayland。
你如果有什么指导性的见解,一定要教教我。QaQ

我想起了之前的一件事。
当初我就想着以一种奇特的方式来打开 vnc 服务,试了一下还真的可以。
就是不一定要在容器内同时开 tigervnc 服务和 x11。
可以在宿主开 tigervnc 服务,在容器内开 x11 (Xsession)。
那么问题来了。这样做的体验一定会更好吗?其实也不一定啦!

@Xunflash
Copy link

@Xunflash 以我对 xwayland 的浅薄认知,我认为它的兼容性和稳定性可能没有想象中的那么理想。 呜,一定是我太菜了。 我想要等我对这方面的内容了解得更加深刻后,再来适配 xwayland。 你如果有什么指导性的见解,一定要教教我。QaQ

我想起了之前的一件事。 当初我就想着以一种奇特的方式来打开 vnc 服务,试了一下还真的可以。 就是不一定要在容器内同时开 tigervnc 服务和 x11。 可以在宿主开 tigervnc 服务,在容器内开 x11 (Xsession)。 那么问题来了。这样做的体验一定会更好吗?其实也不一定啦!

大佬tql每次都很耐心!
其实我只是被这个吸引住了https://ivon852.github.io/2021/12/10/3D%E7%A1%AC%E9%AB%94%E5%8A%A0%E9%80%9F%E7%9A%84Proot-Linux/
还有b站上面有好几个演示视频,感觉延迟好像确实非常低。我才馋这个wayland的😣
谢谢大佬连夜给我赶工出来一个小功能,不知道是chroot的问题还是怎么样,我好像还是没法运行,明明/tmp都已经看到wayland-0了还是没法用
也试过这个issue
termux/termux-x11#45
总之还是谢谢大佬了

@Xunflash
Copy link

@Xunflash 以我对 xwayland 的浅薄认知,我认为它的兼容性和稳定性可能没有想象中的那么理想。 呜,一定是我太菜了。 我想要等我对这方面的内容了解得更加深刻后,再来适配 xwayland。 你如果有什么指导性的见解,一定要教教我。QaQ
我想起了之前的一件事。 当初我就想着以一种奇特的方式来打开 vnc 服务,试了一下还真的可以。 就是不一定要在容器内同时开 tigervnc 服务和 x11。 可以在宿主开 tigervnc 服务,在容器内开 x11 (Xsession)。 那么问题来了。这样做的体验一定会更好吗?其实也不一定啦!

大佬tql每次都很耐心! 其实我只是被这个吸引住了https://ivon852.github.io/2021/12/10/3D%E7%A1%AC%E9%AB%94%E5%8A%A0%E9%80%9F%E7%9A%84Proot-Linux/ 还有b站上面有好几个演示视频,感觉延迟好像确实非常低。我才馋这个wayland的😣 谢谢大佬连夜给我赶工出来一个小功能,不知道是chroot的问题还是怎么样,我好像还是没法运行,明明/tmp都已经看到wayland-0了还是没法用 也试过这个issue termux/termux-x11#45 总之还是谢谢大佬了

我好像弄懂一部分了,wayland-0就是socket,只需要与系统共享wayland-0就行了,但是我现在权限给了还是依然报错
dbus[18230]: Unable to set up transient service directory: XDG_RUNTIME_DIR "/tmp" is owned by uid 0, not our uid 1001
是不是安卓宿主和chroot共用一个XDG_RUNTIME_DIR?宿主开的termux-x11占用了这个

@2moe
Copy link
Owner

2moe commented Mar 17, 2022

@Xunflash 我帮你试了一下。
跟 proot 不一样,在 chroot/unshare 中要做一些修改。

这里以 debian buster 为例。

  1. 直接打开 termux:x11 app
    2.挂载 tmp

截屏2022-03-17 17 33 43

3.进入容器
Capture+_2022-03-17-14-37-48
这个是 debian buster 的 unshare 容器。
4. 安装软件包。
这里只是为了测试,所以只安装了精简版的桌面。

sudo apt install xwayland dbus-x11 xfce4-session fonts-wqy-microhei
  1. 设置 XDG_RUNTIME_DIR 和 DISPLAY 变量
_UID=$(id -u)
XDG_RUNTIME_DIR="/var/run/user/$_UID"

if [[ ${_UID} = 0 ]];then
    mkdir -pv ${XDG_RUNTIME_DIR}
else
    sudo mkdir -pv ${XDG_RUNTIME_DIR}
    sudo chmod -Rv 1777 ${XDG_RUNTIME_DIR}
fi
DISPLAY=:3
export XDG_RUNTIME_DIR DISPLAY
  1. 如果你不是 root 的话,需要改权限。
    如果是 root(uid=0) 的话,可以跳过这一步。
sudo chmod -Rv 1777 /tmp

注:其实不应该直接挂载整个 /tmp,因为会引入权限问题。

  1. 把 wayland-0 软链接到 ${XDG_RUNTIME_DIR} 目录
ln -svf /tmp/wayland-0 ${XDG_RUNTIME_DIR}
  1. 启动 Xwayland
Xwayland -noreset ${DISPLAY} &
  1. 运行 dbus-daemon 和 xsession
sudo service dbus start
xfce4-session

Capture+_2022-03-17-14-36-47

  1. 打开 termux:x11 app
    Capture+_2022-03-17-15-02-55

@2moe
Copy link
Owner

2moe commented Mar 17, 2022

@Xunflash 抱歉,上面有一条命令打错了,现在已经改过来了。
你先用 debian buster 测试一下上面的东西吧!

@2moe
Copy link
Owner

2moe commented Mar 17, 2022

回复的话,其实不用引用整段。
呜,因为有时候我会打错,你引用的时候,可能会把我打错的地方也给引用了。

@2moe
Copy link
Owner

2moe commented Mar 17, 2022

@Xunflash
还有b站上面有好几个演示视频,感觉延迟好像确实非常低。我才馋这个wayland的😣 谢谢大佬连夜给我赶工出来一个小功能,不知道是chroot的问题还是怎么样,我好像还是没法运行,明明/tmp都已经看到wayland-0了还是没法用

emmm , 其实那个功能是之前就有的,不是昨晚连夜赶出来的。

说到这,我又想起了一件事。
之前有人喷这个项目。

说它不过是一个第三方小脚本,不出问题才奇怪呢?建议尽早抛弃 tmoe 。

然后我就想起了之前连夜赶工修复每周构建容器的 bug,想想当初还蛮辛苦的。
我并非不让别人喷它,只是想起一些事情,难免会让我感到心酸。
哎,每念及此,潸然泪下。 (其实没有那么严重啦!

不管怎么说,都要感谢你的支持。(●>ω<●)

@Xunflash
Copy link

  1. 把 wayland-0 软链接到 ${XDG_RUNTIME_DIR} 目录
ln -svf /tmp/wayland-0 ${XDG_RUNTIME_DIR}

不清楚是什么情况,我貌似不能链接上,但是/var/run/user/$_UID是有wayland-0这个文件的,太怪了

@2moe
Copy link
Owner

2moe commented Mar 17, 2022

@Xunflash 是哪个发行版?可以发一下截图吗?

@Xunflash
Copy link

@Xunflash 是哪个发行版?可以发一下截图吗?

就是先选chroot,再选debian,再选stable那个喔

@2moe
Copy link
Owner

2moe commented Mar 17, 2022

启动 Xwayland 的时候出现了什么报错?

@2moe
Copy link
Owner

2moe commented Mar 17, 2022

missing XDG-WM-Base protocol?

@Xunflash
Copy link

Xunflash commented Mar 17, 2022

could not connect to wayland server ─╯ (EE) Fatal server error: (EE) Couldn't add screen (EE) [1] + exit 1 Xwayland -noreset ${DISPLAY}

@2moe
Copy link
Owner

2moe commented Mar 17, 2022

你用 debian-10(buster) 试试?

@Xunflash
Copy link

不管怎么说,都要感谢你的支持。(●>ω<●)

你是我见过最耐心最好的开发者:D
酷安想私信问你来着,结果未关注不能私信...难受😭

@Xunflash
Copy link

你用 debian-10(buster) 试试?

一会儿再试试,到饭点了,先干饭吧(•́⌄•́๑)૭✧

@2moe
Copy link
Owner

2moe commented Mar 17, 2022

我试了一下,debian 11-bullseye ( 当前的stable) 也可以。

@Xunflash
Copy link

我试了一下,debian 11-bullseye ( 当前的stable) 也可以。

上完课划了下水!刚刚试了下能开启了!我再举一反三试试之前的archlinux能不能用

@Xunflash
Copy link

Xwayland -noreset ${DISPLAY} &                                                                                                                           
[1] 17214
libEGL warning: MESA-LOADER: failed to open msm_drm: /usr/lib/dri/msm_drm_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open msm_drm: /usr/lib/dri/msm_drm_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/dri, suffix _dri)

could not connect to wayland server
(EE)
Fatal server error:
(EE) Couldn't add screen
(EE)
[1]  + exit 1     Xwayland -noreset ${DISPLAY}

看来arch还是不行,我照着你给的一步一步做的,wayland-0也在tmp,权限也给了,显然这个问题已经不在tmoe项目范围内了,谢谢大佬!
Screenshot_2022-03-17-22-53-00-210_com termux

@Xunflash
Copy link

你用 debian-10(buster) 试试?

我又来了,这次装了完整版的xfce,结果到最后一步卡住了
我真的不明白了
Screenshot_2022-03-29-15-01-21-936_com kiwibrowser browser
完全跟着步骤做的,心态崩了

@2moe
Copy link
Owner

2moe commented Mar 30, 2022

上完课划了下水!刚刚试了下能开启了!我再举一反三试试之前的archlinux能不能用

咦,你之前能开启的是哪个系统?
最近的事情有点多,抱歉,这次我没有帮你测试。
主要还是因为这个问题不是紧急的bug

说到 wayland, 其实我上次去查了一下相关的书。
结果"直接描述wayland"的书相当贫瘠。
有些书写的是 qt 开发,然后顺带提一下 wayland。(间接)

我能找到这本 The wayland book 也算是意外之喜了。

@dontknowhy
Copy link

上完课划了下水!刚刚试了下能开启了!我再举一反三试试之前的archlinux能不能用

咦,你之前能开启的是哪个系统? 最近的事情有点多,抱歉,这次我没有帮你测试。 主要还是因为这个问题不是紧急的bug

说到 wayland, 其实我上次去查了一下相关的书。 结果"直接描述wayland"的书相当贫瘠。 有些书写的是 qt 开发,然后顺带提一下 wayland。(间接)

我能找到这本 The wayland book 也算是意外之喜了。

喜:Termux-x11主要靠X11传输,但还是要有wayland-0套接字,然后没有了(Termux-x11是究极残血版Wayland)

@ashesofdream
Copy link

一样的debian 除了DISPLAY=:0.0 其它都是copy的 仍然不行... 就一直卡在xfce4-session了...

@Xunflash 我帮你试了一下。 跟 proot 不一样,在 chroot/unshare 中要做一些修改。

这里以 debian buster 为例。

  1. 直接打开 termux:x11 app
    2.挂载 tmp
    ...

@txmu
Copy link
Author

txmu commented Aug 2, 2022

七个月了,看来这个问题还是没有彻底解决啊(我的issue里面,这是没有reopen的issue中open时间最长的一个:-),等edition2022

@ikmjssc
Copy link

ikmjssc commented Oct 12, 2022

目前看来对termux:x11的支持最好还是暂缓吧。实际体验上同一个脚本有时候能正常工作,有时候就不行,问了另一个人对方也是同样的体验。termux:x11还需要很多完善。

@susdevlop
Copy link

好难

`➜ TzuHsing _UID=$(id -u)
XDG_RUNTIME_DIR="/var/run/user/$_UID"

if [[ ${_UID} = 0 ]];then
mkdir -pv ${XDG_RUNTIME_DIR}
else
sudo mkdir -pv ${XDG_RUNTIME_DIR}
sudo chmod -Rv 1777 ${XDG_RUNTIME_DIR}
fi
DISPLAY=:2
export XDG_RUNTIME_DIR DISPLAY
➜ TzuHsing ln -svf /tmp/wayland-0 ${XDG_RUNTIME_DIR}
'/var/run/user/0/wayland-0' -> '/tmp/wayland-0'
➜ TzuHsing Xwayland -noreset ${DISPLAY} &
[1] 17528
libEGL warning: MESA-LOADER: failed to open msm_drm: /usr/lib/dri/msm_drm_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/aarch64-linux-gnu/dri:$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open msm_drm: /usr/lib/dri/msm_drm_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/aarch64-linux-gnu/dri:$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)

➜ TzuHsing sudo service dbus start
Removing stale PID file /var/run/dbus/pid..
Starting system message bus: dbus.
➜ TzuHsing startplasma-x11
QStandardPaths: wrong permissions on runtime directory /var/run/user/0, 0755 instead of 0700
`

@susdevlop
Copy link

susdevlop commented Nov 17, 2022

`➜ /tmp rm /tmp/.X3-lock
➜ /tmp Xwayland -noreset ${DISPLAY}
libEGL warning: MESA-LOADER: failed to open msm_drm: /usr/lib/dri/msm_drm_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/aarch64-linux-gnu/dri:$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open msm_drm: /usr/lib/dri/msm_drm_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/aarch64-linux-gnu/dri:$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)

missing XDG-WM-Base protocol
(EE)
Fatal server error:
(EE) Couldn't add screen
(EE)`
XDG-WM-Base missing
#40

啊啊啊啊啊啊,好难,我只是想在chroot容器去让termux-x11运作起来

@wdlq
Copy link

wdlq commented Mar 6, 2023

missing XDG-WM-Base protocol?

是的,按照您的流程,我现在遇到这个错了。请教大佬如何解决

@fish4terrisa-MSDSM
Copy link

我之前对termux:x11进行了尝试(在终于成功编译了一个有zerotermux签名的新版本后),姑且是成功运行了,但是之后会经常闪退,似乎是termux官方没有完全适配所有wayland api的原因导致(主要是在移动窗口时经常崩溃,似乎是termux:x11没办法解析某些x行为)(吐槽一个点,termux:x11依赖的许多项目都已经是5年前的版本了(xkbcommon,2015,准确来说是7年),连它的构建系统都变了,导致根本没办法直接替换更新。。。)我的建议是再等待一段时间,现今termux:x11还不太成熟,并且我有点怀疑官方是否真的知道自己想实现什么(名字是x11却使用wayland)所以现在还是先拿vnc做替代吧。。。(现在虽然vnc的帧率是没办法的说,不过如果在外接键鼠的情况下想还原pc端的体验我推荐avnc呢,不管是鼠标大小还是全屏都做得相当好的说:-)

@ikmjssc
Copy link

ikmjssc commented Mar 7, 2023

termux:x11还是相当不完善的,Wayland也是。不过在chroot(tmoe+termux)方案下好歹也是可以运行的(相当不稳定)。就算运行起来了大抵也会令人感到失望。

我在运行时参考了这个脚本:
https://github.com/Pipetto-crypto/Chroot-Docs
安卓9(NX563J,LineageOS)和安卓13.1(L71091,Spark)都用过,但是忘了具体做了什么调整才在termux+tmoe上跑起来,总之我是想尝试wine+zink能不能打过exagear,最后用了vnc+vtest+zink+wine(因为wayland),是吊打了,但是avnc玩游戏鼠标乱转,zink全是渲染bug,游戏跑起来因为没有专用显存直接把内存耗光了。但是用box64玩矮人要塞还行,体验上像r5 2600单核版(实际上7z benchmark成绩也差不多)

@wdlq
Copy link

wdlq commented Mar 9, 2023

`➜ /tmp rm /tmp/.X3-lock ➜ /tmp Xwayland -noreset ${DISPLAY} libEGL warning: MESA-LOADER: failed to open msm_drm: /usr/lib/dri/msm_drm_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/aarch64-linux-gnu/dri:$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open msm_drm: /usr/lib/dri/msm_drm_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/aarch64-linux-gnu/dri:$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)

missing XDG-WM-Base protocol (EE) Fatal server error: (EE) Couldn't add screen (EE)` XDG-WM-Base missing #40

啊啊啊啊啊啊,好难,我只是想在chroot容器去让termux-x11运作起来

我搞定了。先从安卓系统直接打开termux-x11 app,然后Xwayland -noreset ${DISPLAY} &
在失败后不要关app,在新的termux会话窗口运行termux-x11,会报missing XDG-WM-Base protocol、(EE) Couldn't add screen之类的错。不要管,再次返回到chroot中运行Xwayland -noreset ${DISPLAY} &

成功!
装上了Pycharm,跑了个python程序测试了性能,单核与安卓下的pydroid跑分差不多。多核略弱。可能是llvm软件渲染占用cpu所致。
如果按照B站的教程,使用virglrenderer硬件渲染
https://www.bilibili.com/read/cv19133555
则virglrenderer会在debian启动应用程序时报错
MESA-LOADER: dlopen failed: library "/data/data/com.termux/files/usr/lib/dri/msm_drm_dri.so" not found (search paths /data/data/com.termux/files/usr/lib/dri, suffix _dri)

@ikmjssc
Copy link

ikmjssc commented Mar 9, 2023

摸不着头脑,什么玄学;不过瞥了一眼b站这个方案用的egl surfaceless应该是不支持窗口管理器的(或者bug一堆),用不了就用不了吧

@wdlq
Copy link

wdlq commented Mar 9, 2023

是的。就用llvm好了。以前用termux中的proot-distro + termux-x11+ zink,图形性能还不错。但是cpu性能不行,那个单核跑分只有chroot的80%,多核multiprocessing模块直接报错,跑不起来。

从这个程序来看,高通870性能相当于AMD R5 3400G。联想小新pad pro 平板,去淘宝扩容个16G内存美滋滋。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

9 participants