11 ms·
Texttop – An interactive X Linux desktop rendered in TTY and streamable over SSH
- krylon 9y agoI expected this to be an elaborate joke, but the author obviously has a good use case for it. That is quite ingenious!
- nmg 9y agoFinally, good news in the world of computing. The zoom function is a nice touch...
- cryptonector 9y agoFinally, high-performance remote display!
- cryptonector 9y agoNo sound though :)
- sgc 9y agoIt's a feature not a bug ;)
- cryptonector 9y agoThus the smiley :)
- chrisper 9y agoCould it not play (monotone) sound through the terminal bell?
- anigbrowl 9y agoSounds like a challenge
- jaytaylor 9y agoThis looks amazingly cool! And I apparently starred the repo previously, but don't remember ever having seen this particular badass shit before. Am I losing it?
- mdaniel 9y agoIf your situation is anything like mine, it goes much more like: "oh, neat; I'll look at that tonight" followed by a browser bounce, or something else becoming a bigger priority, lather, rinse, repeat. There is so much great content -- both "empty calories" and otherwise -- that it is so easy to get buried under it. I came to HN to retrieve _one specific link_ and ended up with 7 new browser tabs open, counting this one.
- nerflad 9y agoHN Tabs are like an unstoppable cancer. I'm on XFCE and I have a whole workspace dedicated to over a year's worth of articles, books, discussions, etc from HN that "I'll eventually get around to reading".
- mdaniel 9y agoTo say nothing of the gigs of research paper PDFs; hey, we're all going to need _something_ to do during retirement, right?
- oneeyedpigeon 9y agoI just upvote articles I want to read later, then get around to revisiting that list once in a blue moon. But at least it reduces tab bloat.
- StavrosK 9y agoI use https://www.linkpack.io/ https://www.linkpack.io/ on iOS as my black hole for links.
- Fnoord 9y ago
- davidcamel 9y agoThis is awesome, I've always wanted something like this. Zoom is the killer feature.
- deleted 9y ago[deleted]
- newman8r 9y agovery creative, looking forward to giving it a try.
- deleted 9y ago[deleted]
- moondev 9y agoWow! Can't wait to try this! Coolest thing I have seen in a minute!
- betolink 9y agoPreviously on HN: https://news.ycombinator.com/item?id=11744221 https://news.ycombinator.com/item?id=11744221
- jxy 9y agoIt uses Xvfb, ffmpeg, hiptext (with fixes from the author), and a custom interfacer written in go, which employs xzoom in C and termbox-go (with fixes from the author). The interfacer alone looks fun, seems like I can control a remote X session via ssh.
- shironineja 9y agoHmm I wonder how many of these I can run at the same ti
- paule89 9y agoWow. I definitely like the Idea. After reading the first few paragraphs i also finally understand why it would be such a great idea to have a blocky firefox.
- kevin_thibedeau 9y ago> Why not VNC? Why not ssh -Y and use X protocol as intended?
- shakna 9y ago> sometimes I don't have very good Internet. If all I have is a 3kbps connection I don't think X would handle that very well, and you may not have an X server at the other side.
- pvdebbe 9y ago3 kbps is not enough for smooth TTY text-only ssh either...
- Piskvorrr 9y agoThat's where `mosh` comes in.
- reaperducer 9y agoI've done pretty productive work over much tighter links than that. Think 300bps. One of the systems I'm responsible for currently can only be reached over a 1200bps dialup connection.
- pvdebbe 9y agoBut does this work require full refreshes of 80x24 screen or larger?
- paulfurtado 9y agoHe describes the motivation in the README here: https://github.com/tombh/texttop#why https://github.com/tombh/texttop#why Looks like the goal is to be able to view modern websites over poor internet connections using mosh. (And also probably a lot of fun to implement/see working)
- jhoechtl 9y ago
- krmbzds 9y agoThat's fucking nuts!
- candyman2018 9y agobuy all drugs at drughouse.store
- candyman2018 9y agoBUy all your drugs at drughouse.store
- fsiefken 9y agoWhile the geekery is really really cool I also wonder if this method can be beaten with the best in video comepression. Extremely low bandwidth encoding perhaps provides better results (if you put cpu/gpu load aside), for example see this x265 example over 50 Kbit/s. http://wp.xin.at/archives/4020/comment-page-1 http://wp.xin.at/archives/4020/comment-page-1 People are watching Netflix in low quality in 100-200 Kbit/s. With the upcoming AV! (AOmedia Video 1) it gets even beter. Another avenue is Citrix/RDP connection work ok over 30-50 Kbit/s. Then there is the counterpart FreeRDP. Wouldn't FreeRDP be the preferred solution here, except then that Mosh solves the potential latency issue? With linux desktops running on low power clients already, why bother? Does it use less battery life so you can get 48 hours surfing the internet in the mountains or forest while the solar powered server runs at home?
- tombh 9y agoI certainly think you can get close with video. But one of the things about this method is that I wanted it to be as universal and as accessible as possible. As in: accessing a fully modern JS-enabled browser over just an SSH client.
- erikb 9y agoWhy not stream X directly over ssh?
- rostigerpudel 9y agoBecause X over SSH requires a somewhat low latency and high bandwidth. The guy's requirement is unpredictable latency and low bandwidth (like 3 kbps). X is no fun at all over that kind of connection.
- Piskvorrr 9y agoI find X-over-ssh unusable over anything non-local, even over local wifi it stumbles: the latency is especially painful. There's Xpra, which makes this somewhat bearable even on mid-level residential connections (unimpressive speed, high latency, horrible jitter), but for single kB speed, even plain ssh is really bad (with mosh making it just bad). This would make the result not-quite-horrible.
- mseidl 9y agohttps://github.com/HouzuoGuo/headmore https://github.com/HouzuoGuo/headmore Another interesting project, that's similar, but for VNC.
- Fnoord 9y agoGiven the quality of text (or the requirement to zoom) I'm not sure what the fuss is about. It looks abysmal, and having to zoom all the time is a habit I am glad we got rid of due to higher resolutions. Though still existing on mobile devices it is also user-friendlier to zoom there, and the reason for the feature is the device is more mobile. You could already run a browser in a framebuffer for ages. Which means you're not bound to X11. My friend, X11 hater (he was former Amiga user), just used CLI and a CLI web browser (well, he used Emacs) but sometimes he did need GUI and that was his solution. We're talking end of '90s/begin of '00s here during a time where X didn't even compositing. If you want to run X11 over SSH, that's also possible, e.g. via NX Server. Another route could be SDN plus (Free)RDP. Mosh is great for latency, tho can't be used for SSH over Tor due to UDP.
- oneeyedpigeon 9y agoI can't speak for the alternatives you suggest, but I feel you're being overly unfair on this project. Even if it wasn't at all practical, it's still an interesting demonstration of the approach. Plus, it sounds like the author finds it useful, and I'm sure there are relevant use-cases. Maybe you could explain the "run a browser in a framebuffer" technique for those of us unfamiliar with it. Zooming (not panning) is essentially as easy as scrolling, and I'm looking forward to a day where it's utilised more since it's such a natural motion. I can image a desktop (relevant!) that presents a huge 'canvas', allows you to zoom in and out of the filesystem, navigate the web at different levels, etc. There's definitely potential in interface design; what annoys you about zoom? I agree it shouldn't be a primary action that one would have to carry out very frequently.
- Fnoord 9y agoI'm just expressing how I don't see it useful (I'm curious to hear use cases though). That doesn't mean I want nobody in the world to find it useful. That's up to each and every one of us. Heck, perhaps it can be improved, who knows. These projects I mentioned have already (partly) tackled the latency issues. RDP and NX suffers far less from latency issues than X11 and VNC. As for framebuffer, see [1] [2] for examples. Although now that I'm looking into it perhaps my friend was using Links2 and not a Mozilla offspring. I remember he also used lynx/w3m/dillo. As you can see from the example, one could just run MPlayer locally back in those days, with a framebuffer on a local tty. Apparently YouTube works as well [3]. DirectFB links seem dead though, and it seems MPlayer website is also down [4]. Zooming appears a natural motion on mobile devices because it allows one to see more content which is hidden due to physical reasons (a trade-off). Do you really find that useful on todays large monitors? Laptops even? Instead, it appears that for desktop devices scrolling provides adequate user experience. Zooming was added ages ago in Xorg, allowing a compositing window manager to utilise. Has it been used a lot besides the obvious accessibility feature? The only reason it is usable in this specific use case is the low amount of pixels (low pixel density). But I am curious to all these use cases you got in mind for zooming. [1] https://en.wikipedia.org/wiki/DirectFB https://en.wikipedia.org/wiki/DirectFB [2] https://en.wikipedia.org/wiki/Linux_framebuffer https://en.wikipedia.org/wiki/Linux_framebuffer [3] https://github.com/notro/fbtft/wiki/Framebuffer-use https://github.com/notro/fbtft/wiki/Framebuffer-use [4] https://www.mplayerhq.hu/DOCS/HTML/en/fbdev.html https://www.mplayerhq.hu/DOCS/HTML/en/fbdev.html
- tombh 9y agoAuthor here. Surprised to see this here as I've been literally spending the last 2 weeks on a complete rewrite from scratch that actually layers REAL text over the blocks. You can get an idea of my approach with this function: https://github.com/tombh/texttop/blob/webext-rewrite/webext/src/text_builder.js#L165 https://github.com/tombh/texttop/blob/webext-rewrite/webext/... After the success of hitting the front page here last year, I really wanted to sit down and do this properly. So not only am I working on real text support (that you can of course copy and paste without even zooming). But I've removed the dependencies on ffmpeg, Xorg (for Firefox at least - Chrome strangely doesn't support webextensions in headless mode), docker AND it will work on all webextension-compatible browsers. It's going to be a single cross-platform, static, Go binary, that launches your preferred browser in the background. Generally it's bad luck to talk about something before it's finished, but seeing as it's suddenly on the front page I wanted to let all those interested know that I'm making this 10 times better. And an early apology, because I'll definitely be posting the rewrite (and rename) here and hoping to get all your attention again.
- hrrsn 9y agoNo need to apologise - this is really creative! Best of luck :)
- Sean1708 9y agoJust FYI you copy-pasted your HN comment straight into your readme and it broke the link in your readme (because of the way HN formats links).
- tombh 9y agoThanks. Fixed.
- mncharity 9y agoAlso fyi, README.md contains a link "elinks" http://www.xteddy.org/elinks/ http://www.xteddy.org/elinks/ which is currently 404. http://www.xteddy.org/ http://www.xteddy.org/ has a link "Elinks" http://www.elinks.org/ http://www.elinks.org/ which is currently 403. Sigh. A ggled http://www.starshine.org/xteddy/thomas/elinks/ http://www.starshine.org/xteddy/thomas/elinks/ links to http://elinks.or.cz/ http://elinks.or.cz/ .
- blice 9y agoThat's a good idea. I'll continue reading about it.
- callesgg 9y agoI did project with Webkit that renders to the terminal: https://github.com/callesg/termkit https://github.com/callesg/termkit
- tombh 9y agoWaat! We need to talk - I'm taking a very similar approach in my rewrite. There are some very interesting algorithm problems. Eg; I'm actually comparing pixels in 2 screenshots --with and without text rendered--, in order to get text colour and visibility. This way is actually more performant than using `getElementAt(x, y)` and `getComputedStyle(element)`.
- callesgg 9y agoI rewrote mine to. One big problem i hit before rewriting was performance and also css :after classes they are not reachable in the DOM if I remember correctly. So I resorted to patching phantom to give me access to the WebKit render tree.(which is a tree similar to the Dom tree but not the same. I can't remember if there was some big issue that eventually made me stop developing. I think the final issue was characters with dual width like many Chinese characters the gui library blessed did not understand the concept of characters with non standard width and a single such character would destroy the entire layout. And issues with correlting the render tree and the Dom tree.
- callesgg 9y agoNow I remember the main problem before switching to the render three was text rows. there is no good way of knowing where a text line will break without resorting to the render tree or to use some form of ocr.
- tombh 9y agoAh yes, that was a big hurdle, but that's actually fully supported now with DOM Ranges - basically codified selection boxes, those regions that highlight when you select with a mouse. There's still some extra leg work though to render whitespace in the same way as the browser.
- daurnimator 9y agoFor more detail, there's sixels, see https://github.com/saitoha/libsixel https://github.com/saitoha/libsixel
- tombh 9y agoI did look into that, but it's not as widely supported as the UTF8 half-block.
- espadrine 9y agoWith many bytes necessary to print just six pixels, it wouldn't be as low-bandwidth, right? On the other hand, how about libcaca? https://en.wikipedia.org/wiki/Libcaca https://en.wikipedia.org/wiki/Libcaca
- tombh 9y agoThe TTY "graphics" rendering is actually relatively trivial, it's really just a few lines of JS in my rewrite now. So there's no need for an external rendering lib. Also with the new approach, I'm focussing on real text as the main feature, so you'll actually be able to turn off the colour blocks and just surf the web as raw text, with all the goodness of full CSS rendered, realtime text and JS.
- sykseh 9y agorick roll opportunity totally missed ;D
- charlottepty 9y agoDo you need a hacker to help you hack any web site, do you ever want a QUICK and the most INTELLIGENT hack service? Then it is your lucky day to meet the most EFFICIENT, RELIABLE, SWIFT and INTELLIGENT hack professional alive…Basic Hacker. The services include the following service: -University grades hack -IPhone Hacking Tricks -YouTube Hacking Tricks -Email Hack -Paypal, MasterCard hack -Facebook Hacking Tricks -Hacking Software -Hacking Tricks -IP Address -Software Hacking -Hack Facebook Password Online -Already hacked online shopping pins for sale at give away price -Windows Hacking Tricks -Control devices remotely hack -Android Hacking Tricks -constantly get Free TalkTime from your network provider -Gmail Hacking Tricks -Twitter Hacking -Hack SECURITY AGENCY WEBSITE and ERASE CRIMINAL RECORDS -Hack any BANK WEBSITE -Hack any Company Website -Hack any government agency websit -Hack into any DATA BASE -Server Crashed hack -Tagged account -Untraceable IP etc…..You can contact davidtimmyhackprof@gmail.com / (818) 527-5489 for a fast work within few hours
- djsumdog 9y agoI wonder how you'd implement something like this in Wayland? Would you have a composer on the remote side rendering the text to a terminal (that you'd connect to over ssh/mosh)?