Posted by mmulet 3 days ago
If you have any other ideas for cool Wayland compositors, let me know. I purposedly wrote 80% the app in Typescript to appeal to the most developers and attract cool contributions (I do all drawing with the familiar Canvas2D api, so if there is interest, I can also fork this out into a cool Terminal canvas, let me know!)
I have a blog post here about how I did it, but it’s pretty high level and non technical, so please ask if you have any questions.
[How I Did It](<https://github.com/mmulet/term.everything/blob/main/resource...>)
*technically only Wayland apps and x11 apps with Xwayland. But on Linux that’s mostly everything.
I am sure it was a great and fun learning experience.
Well done !
EDIT: nevermind, doing this with Docker seems much easier than I expected [0]. I'll try it tomorrow, I'm curious to see if the proposed solution works on Windows as well.
[0] https://medium.com/@priyamsanodiya340/running-gui-applicatio...
WSL had non-accelerated wayland support at one point in time.
Was it before "most distros"?
I don't understand what you think that amounts to.
Wayland support in Linux-land typically means that the software supports running in your wayland compositor.
Windows famously is not a wayland compositor, no matter how much you try to bend reality.
But I remember the BB demo and I still remember these catchy s3m modules...
https://aa-project.sourceforge.net/bb/
And, well, not AA, but I still play today tons of text adventures and roguelikes (and BSDgames and such), and my main X environment it's CLI/TUI based except for CWM (Window manager), MPV/MuPDF/NSxiv (images) and djview4 for DJVU files..
your animal brain hardwired to discern the direction of gaze of the eyes facing you (citations appreciated)...
Helps me find the mouse cursor on a big screen if I lose track, even with small parallax angle.
On macOS, I just wiggle the mouse back and forth, and the cursor gets really big, it pops out at you.
I generally don't keep `xeyes` running. But it's a righteous, venerable hack.
Thanks for the reminder
Sure am glad of the broadband Internet and modern "powerhouse" PCs we have so readily available today. Hell, even the computer most everyone carries in their pocket these days is infinitely more powerful than the average desktop machines of my childhood. :)
I run a ttyd server to get terminal over https, and I have used carbonyl over that to get work done. That's limited to a web browser (to get access to resources not exposed via the public internet), so having full GUI support is very useful
But can it run doom?
I had the change a couple of line to make it work because term.everything takes input only from stdin (this way it works of ssh and is pretty broadly compatible across terminals).
1. I had to remap another key to the control key (which is usually used to send signals like sigterm)
2. Then I had to change the timeout in which keys are pressed. When using stdin, you get a keydown event, but you don't get a key up event (ever). So I have to guess when you want to key up. Most of the time, I can send key up right away. But, it looks like doom has some sort of key debounce, so I had to wait 50-100 ms for keyup. Then there is the problem of if you want to walk forward in games you usually hold down up arrow, but now you have to rapidly press it! Not ideal, but it does work, and it it playable.
I used to write telnet games so I know all about keypress up never coming through. Even with immediate mode (so repeated keys will send repeated key codes while held down) it never tells you when it stops. You have to read the buffer ascii byte by byte. Still, awesome to see. Great work!!!
# Work with Gnome terminal but resolution is much better in something supporting images
apt install -y kitty
kitty
# Create an incus container
incus --project default launch images:ubuntu/24.04 term
incus --project default shell term
# Install dependencies
apt install -y curl firefox libharfbuzz0b libfontconfig1
curl -L -o term https://github.com/mmulet/term.everything/releases/download/0.5.1/term.everything.mmulet.com-dont_forget_to_chmod_+x_this_file
mv term.everything.mmulet.com-dont_forget_to_chmod_+x_this_file term
chmod u+x term
echo '<h1>Hello</h1>' > test.html
# Start firefox, wait for a few seconds
./term firefox test.html
This is pretty much that but supercharged. Definitely really cool to see. Good work!
For example...
$ Xvfb :7 &
[1] 21688
$ xeyes -display :7 &
[2] 21697
$ xwd -display :7 -name xeyes -out /dev/stdout | convert xwd:- sixel:-
It looks like this: https://imgur.com/a/Eq2ToVOObviously no input though, you would have to use xdotool! The main benefit is that you probably already have all these tools installed :)