Remote graphics over network
-
@mrjj :
If the Qt program transferred its screen buffer or QPixmap to the GUI client, the client will display it. This would be as good as GDI.
The benefit would be to offer Windows GUI programs a migration path to Docker, where currently there is none. There are innumerable Windows programs that will never be ported to Linux. A Docker image is a magnificent way of deploying products and their dependencies with no installation required. In the future, Linux and Windows containers could surely be mixed, and Qt could be one of these future solutions.
-
QPixmap is for representing something to the screen which requires access to the graphic stack. Something that is likely not available from your description.
-
The idea would be to present it on a remote graphic screen. After all, the QPixmap contains pixels, and these can be presented on any graphical surface. It's only necessary to transfer the pixels over the network to where they can be processed, so to do nothing else in the generating server, as if the non-existent display was done.
The pixels would be generated by Qt but processed by the graphical client. That client itself does not need to be programmed using the Qt libraries, this being an overkill, but can be a small native program.
This way Qt does not need to be installed on the client computer but only in the Docker container. The idea here is to deploy the user program with its dependencies, which includes Qt, all as one unit that requires only Docker to execute. The user program can then be executed without installing nothing at all on the client computer, by one Docker command-line.
This is deployment simplified to the limit. I believe that in the near future it will replace the actual forms of deployment which require painfully installing and correctly configuring packages required by programs. Programs will this way come prepackaged as images with their dependencies and ready for instant execution.
This is a very primitive design of the architecture I advocate as regarding graphics:
Docker container ------------------ | User program | | Qt libraries | ----------------- | v Pixels | | (network) v -------------------- | Graphical client | -------------------- | v Client screen
-
This question is not about making a Windows program work on Linux (and in any case not all Windows programs work correctly on Wine and not all dependencies are portable).
The question is about making Windows programs work on Docker in the context of Docker images built upon a Windows operating system.
I believe that in the coming decade Docker will cause a complete redesign of the architecture of operating systems and how products are deployed. The problem is that not many people are aware of the magnitude of the change. Even Microsoft, which started with pushing Hyper-V as a contender to Docker, has now joined it with great enthusiasm.
-
Hi
if you have access to a win docker. have you tried a QPixmap + CoreApp ?
Could be fun to know if that even works.
As far as i understand running GUI apps on win dockers is a no go until MS fixes it. -
I don't think I have enough Qt knowledge for this project. I didn't even know about QCoreApplication.
But as you say, this can be a fun project for a Qt developer, which will in addition help in motivating Windows products to migrate to Qt. -
QPixmap requires a QGuiApplication at least.
I'm not sure I follow your argument against the VNC backend.
-
Perhaps I'm looking at it too simplistically, but it seems to me that a graphical shell is not required to generate pure pixels in the program's memory. Qt has most of the required software, and if it may rely for some graphical operations on the operating system, existing open-source libraries can surely substitute.
Whatever graphical information Qt may require, such as screen size and resolution, can be communicated by the graphical client from its own environment.
Certainly some adjustments may be required in the core libraries of Qt, which is why I believe a more knowledgeable developer than myself is required.VNC presents the desktop, while a Docker Windows container does not have a desktop. It may only have consoles, either Cmd or PowerShell. You may liken the Windows Server under Docker to a Linux server without X.
-
I didn't talk about running a VNC server in a Windows docker.
I am talking about the Qt VNC backend which lets you connect a VNC client to your application to visualise its content.
-
I don't understand - if the app is running in the Docker container, there's no graphical surface to visualize, or at least not one created by Windows. I don't think that VNC creates its own canvas, or otherwise it could support multiple sessions, while currently it only mirrors the desktop created by Windows.
-
I wasn't aware of VNC for headless servers, so I did some research.
For generic VNC, it seems like all the success stories were on Linux, and in addition required at least a display adapter and its installed driver, even if having no monitor.For Qt, I have found The VNC Protocol and Qt for Embedded Linux which isn't helpful and anyway for Qt 4.8.
I have found references to the QVNCServer class, but none with doc later than Qt 4.8 and no file by that name in the sources of Qt 5.
But even if QVNCServer is no longer supported, this means that the project is easier than I thought.Could you point me to any article for using Qt VNC on a Windows totally headless server using Qt of any version ?
-
No I don't have such an article at hand.
As for testing the VNC backend:
- Download the Qt sources matching your version
- Build the VNC platform plugin
- Install it
- Pass
-platform vnc
as parameter of your application
-
Isn't the VNC platform plugin an integral part of the distribution ?
I can find no documentation later than Qt 4.8, and that also is scarce.
The VNC code for Qt 5.10 is much more voluminous than that of 4.8 and is a total rewrite, but no documentation. -
It's back since 5.9 IIRC.
QPA Parameters:
- port by default 5900
- size=WidthxHeight logical size
- mmsize=WidthxHeight physical size
- depth (8, 16, 32)
All are optional.
-
Which reports ?