[Bug]: application killed when switching from termux to termux-x11
natebragg opened this issue · 11 comments
Problem description
I run TERMUX_X11_DEBUG=1 termux-x11 :0 -xstartup xclock
in termux. I then switch apps to termux-x11, which flashes and then goes back to the 'not connected' screen.
When I go back to termux and look at the log the last line is X connection to :0 broken (explicit kill or server shutdown).
Although I used xclock
here, this happens for each of the various applications I tested.
I am using a Samsung SM-T820 tablet.
What steps will reproduce the bug?
See above.
What is the expected behavior?
No response
Probably you should post the logcat
output. Run logcat > log.txt 2>&1
after termux-x11 stops and post here the log file. Not screenshot.
It seems like termux-x11 is killed with SYS_SECCOMP. It is pretty much weird, it should not behave this way. And I do not see any way to fix it because it is caused by your firmware, probably after system update.
This system has not been updated in a long time. It is an older device, running Android 9. It may be a firmware issue perhaps, but when googling around it seems it may also be caused by lifecycle events. When I go from termux to some other app (settings, calendar, whatever) this issue does not happen. Only the x11 server. Interestingly, this also does not occur when testing this in split screen mode (xclock is not displaying, but that is a separate issue that I will open).
Oh, and when exiting from split screen, it now works fine. Switching between the two apps does not cause xclock to be killed. So this is clearly an issue with initially launching the app. Perhaps there's a good way to catch this in action via app-specific logging?
Another update---I tried to see if strace termux-x11
could give any insight, and interestingly when I run it and then quickly switch to the server, strace
slows things down enough that it worked sometimes, and crashed others. If I run this without switching quickly, however, it crashes after switching. As far as I can tell, modulo memory addresses and such, the strace
logs are similar.
Reproduced on an OPPO device with Android 10.
- Open Termux X11
- Switch to Termux and run
termux-x11
- Switch to Termux X11
- Connection lost,
termux-x11
was killed
However:
- Open Termux and run
termux-x11
- Open Termux X11
- Switch to Termux
- Everything is fine
@natebragg Can you please try
clang -o libsetgid.so -shared -x c - <<< "void setgid(void){}"
And then
LD_PRELOAD=libsetgid.so termux-x11 :0 -xstartup xclock
?
@twaik This does not crash! I love this, quite ingenious. The only downside is that xclock
does not display, but that is a separate issue. Unfortunately, if I run xterm
instead, it still crashes with the same error as before. gvim
is also killed.
Probably you should do clang -o libsetgid.so -shared -x c - <<< "int setgid(void){ return 0; }"
and add LD_PRELOAD=libsetgid.so
to the ~/.bashrc
. There are not a chance it is not a bug in your firmware.