Is there any plan by Wayland to incorporate ssh forwarding? Last I heard it wasn't in the cards, and I think that feature is useful enough; it's probably the only feature I really would miss.
This is pretty interesting! I'm worried it's going to be a long path to getting things up and working again like they do with X today though. For example, my typical remote-X use-case is connecting to a Linux server from my macOS laptop. I haven't been following Wayland and/or waypipe enough to know how feasible that kind of setup would be with them. Are they potentially cross-platform enough that one end could run on macOS?
No not really similar. It is basically a raw video that transfers the full window content over the wire.
X11 is capable of drawing primitives. Even though the most popular toolkits (Gtk, QT) sadly did not use them, those who did (e.g. Athena, Tcl/Tk) worked perfectly over the network, even modem lines.
If Wayland would contain modern drawing primitives like those that Cairo offers which could easily be serialized, we would have real network transparency even over slow low bandwidth connections.
It is basically a raw video that transfers the full window content over the wire.
Because that's more efficient.
If Wayland would contain modern drawing primitives like those that Cairo offers which could easily be serialized, we would have real network transparency even over slow low bandwidth connections.
Nope, drawing commands for a modern UI are more bytes than the window contents. This is a deeply counterintuitive topic and it's unfortunate that nobody implemented waypipe until recently so it was impossible to measure.
Any proof for this? I don't believe you. Every SVG is smaller than the rendered PNG counterpart. And SVG is a really inefficient way to serialize drawing commands.
Also including drawing into your Compositor (like Windows and MacOS do) gives you additional infinite scaling for free which would solve the multi dpi monitor problem.
Very little modern software uses the X drawing functions. GTK uses Cairo, but so does X (that's where it came from, the library behind the X drawing API). But apps will use the GTK implementation of Cairo (client side) because it works on other platforms as well (windows and OSX). In most cases it doesn't actually make sense to put your drawing functions in the display server any more.
Cairo wasn't the library behind the X11 drawing API, it was originally the Xr rendering extension, that was an alternative to the original X11 drawing API.
>The name Cairo derives from the original name Xr, interpreted as the Greek letters chi and rho.
You're right, it doesn't actually make sense to put your drawing functions in the display server any more (at least in the case of X11, which doesn't have an extension language to drive the drawing functions -- but it did make sense for NeWS which also used PostScript as an extension language as well as a drawing API).
So Cairo rose above X11 and became its own independent library, so it could be useful to clients and toolkits on any window system or hardware.
Here's some email discussion with Jim Gettys about where Cairo came from:
From: Jim Gettys <jg@laptop.org>
Date: Jan 9, 2007, 11:04 PM
The day I thought X was dead was the day I installed CDE on my Alpha.
It was years later I realized the young turks were ignoring the disaster
perpetrated by the UNIX vendors in the name of "standardization"; since
then, Keith Packard and I have tried to pay for our design mistakes in X
by things like the new font model, X Render extension, Composite, and
Cairo, while putting stakes in the heart of disasters like XIE, LBX,
PEX, the old X core font model, and similar design by committee mistakes
(though the broken core 2D graphics and font stuff must be considered
"original sin" committed by people who didn't know any better at the
time).
So we've mostly succeeded at dragging the old whale off the beach and
getting it to live again.
From: Don Hopkins <dhopkins@donhopkins.com>
Date: Wed, Jan 17, 2007, 10:50 PM
Cairo looks wonderful! I'm looking forward to using it from Python, which should be lots of fun.
A lot of that old X11 stuff was thrown in by big companies to shill existing products (like using PEX to sell 3d graphics hardware, by drawing rotating 3-d cubes in an attempt to hypnotize people).
Remember UIL? I heard that was written by the VMS trolls at DEC, who naturally designed it with an 132 column line length limitation and no pre-processor of course. The word on the street was that DEC threw down the gauntlet and insisted on UIL being included in the standard, even though the rest of the committee hated it for sucking so bad. But DEC threatened to hold their breath until they got their way.
And there were a lot of weird dynamics around commercial extensions like Display PostScript, which (as I remember it) was used as an excuse for not fixing the font problems a lot earlier: "If you want to do readable text, then you should be using Display PostScript."
The problem was that Linux doesn't have a vendor to pay the Display PostScript licensing fee to Adobe, so Linux drove a lot of "urban renewal" of problems that had been sidelined by the big blundering companies originally involved with X.
>So we've mostly succeeded at dragging the old whale off the beach and
getting it to live again.
Hey, that's a lot better than dynamiting the whale, which seemed like a such good idea at the time! (Oh the humanity!)
From: Jim Gettys <jg@laptop.org>
Date: Jan 17, 2007, 11:41 PM
> Cairo looks wonderful! I'm looking forward to using it from Python, which should be lots of fun.
Yup. Cairo is really good stuff. This time we had the benefit of
Lyle Ramshaw to get us unstuck. Would that I'd known Lyle in 1986; but
it was too late 3 years later when I got to know him.
I would be careful about describing cairo’s Primitives as modern. Cairo-style rendering apis and implementations are struggling to keep up with modern user interfaces and modern resolutions. It isn’t super clear which way 2d rendering apis will go in future. It seems silly to me to bake such an assumption into a protocol
I see this a lot and now I need to ask: do you actually use it and find it usable?
Every time I've tried it, it was plagued with problems (fonts, HiDPI issues, different environments) and horrible performance. I mostly had to resort back to NX, which is okish, but not better at all than Windows' RDP or better VNC solutions. So what's the big draw here?
I use it, but generally only at work on a local network, where the performance is fine. My most common use is to run R on a big server but still have plots pop up on my laptop. There are other ways to do this, e.g. one of the IDEs for R (RStudio) apparently has some infrastructure that would let me run R on my laptop and then farm out the computations remotely. But I find just ssh -X the easiest for now.
It was pretty great when I was a university student using X forwarding within the campus network between my dorm and the CS department (in either direction). Certainly not as fast as local, but extremely usable when not trying to do graphics-centric things. (Even using Eclipse was viable.)
Your mileage may vary by use case and bandwidth, especially over the public internet. But if someone has a similar use case to mine in 2019, it's still probably usable.
Even if it's usable, it's probably not a good idea. X windows are not rendered by the server anymore. The client (i.e. the application) renders them and just transmits a full pixmap to the server. Depending on the redraw strategy, you could have a worst-case scenario where 60 frames per second of the entire window are transmitted completely uncompressed (except for the compression that SSH applies). You'll be sailing much more efficiently by using a VNC client.
To be pedantic, this is true with "modern" toolkits (like, this cemtury). Applications using Motif or Xt or anything similarly ancient still do server side drawing and they absolutely shine with todays network latency and speed. But most applications moved on from.these toolkits, with good reason.
+1 to this. For my first two years the university didn't have student Matlab licenses but the CS department machines had copies so I would ssh -X for my coursework requiring Matlab (needed the GUI to see plots).
It's not only ssh. I start GUI applications as a different user than the current desktop user constantly. It's a way for me to separate uses from each other. It gives you a huge amount of flexibility.
I do a lot of these things with Linux, you cannot do in Windows:
- Log in, start an arbitrary program. Then log out, without the program stopping
- Start a GUI application as a different user than the one logged in graphically
- Start a GUI application that resides inside a container
- Start a GUI application in the local LAN over ssh
Take those away and you take away the biggest edge Linux has over Windows.
Re. performance. Did you use SSH's “-C” switch for data compression? The first time I used X over SSH it was lagging as all hell, until I used this switch, and after that everything ran much smoother.
We use it semi-regularly at work. (I do Linux Administration for a hosting company.) Or, more precisely, our Oracle team uses it, as there seem to be several Oracle-related utilities that require a GUI. I don't work with it directly, but I have helped to set it up on that team's behalf from time to time. For that purpose, it seems to be quite stable.
I don't think X-forwarding is a good substitute for VNC(-alikes) if you need to do long sessions, but for occasional one-off GUI work where either there's no CLI equivalent, or the CLI version isn't the best choice, it does get the job done.
X forwarding seems to work enough for my primary use case. I have some supermicro servers for work with a java applet for KVM. Because of a series of reasonable but unfortunate policies, I can't run the applet directly in the laptop's host OS. The best way is to run it in a VM. It's a lot better experience for me to run the applet over X forwarding despite some issues with window resizing that I suspect are related to hidpi, than to run a full X desktop in the VM. Host is osx, guest is freebsd with linux compat and oracle jre for linux.
It was also useful when I wanted to output some pixel graphics from Erlang to my Windows desktop from a program running on unixy devices. x server windows, x client on linux, freebsd, os x -- occasionally also ran with os x as x server and linux or freebsd as x client.
The key thing for me is the ability to export the gui for a single application on one system to a desktop environment on another --- I think this is possible with other systems, but it's not easily exposed. Performance and fidelity of the experience is usually not that important for me, as long as it's usable.
I use it regularly with VMs. I find it a much better experience to have a bunch of terminals open on my host that are ssh'ed into the VM and can open new GUI windows on the host (generally meld for either git-merge or git-diff).
The main draw is just that it works so seamlessly. All you have to do is remember to add the "-X" flag when you call ssh and everything just works.
I use this a lot at work. I ssh into a server from my linux desktop and run things there, including GUI applications. Over a local network it works fine. It's much nicer to have local and remote applications displayed in the same way. I can also run things from remote networks, although I have to use the -C compression option on ssh.
I use it constantly (including across different OS/architectures), have been using it for more than 20 years and really can't live without it.
It works great. And Mozilla/Firefox has been working wonders with it (when you open a web link on a remote application, it opens the URL in the local, already opened Firefox and has been doing so since Netscape times).
With a 500Mbps internet connection and a 10ms ping to the server, the performance is quite usable. There is some lag when updating large bitmap areas, but for anything not graphic intensive, it works just fine.
Believe it or not, there are production environments that use X-forwarding over ssh. Modern computing relies more and more on remote streaming of interfaces. Even games are going that way.