This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
other:x_conf [2022/08/05 09:00] jypeter Improved |
other:x_conf [2022/08/09 08:53] jypeter [Using an X server on Linux] |
||
---|---|---|---|
Line 3: | Line 3: | ||
===== What is an X server? ===== | ===== What is an X server? ===== | ||
- | An //X server// is not a server for distributing your perfect models output! | + | * An //X server// **is not** a server for distributing your perfect models output! |
- | An //X server// is basically a program running on your local computer that understands the [[https://en.wikipedia.org/wiki/X_Window_System_core_protocol|X Windows System protocol]] used by **remote Linux servers** to generate graphics, and that can //render// (i.e. display) the graphics generated remotely on your **local computer**. | + | * An //X server// **is** basically a program running on your **local** computer that understands the [[https://en.wikipedia.org/wiki/X_Window_System_core_protocol|X Windows System protocol]] used by **Linux computers** (**local** computer, or **remote** Linux servers) to generate graphics, and that can //render// (i.e. display) the graphics generated **remotely** on your **local** computer |
+ | |||
+ | ===== What do we mean exactly with Local and Remote computers? ===== | ||
+ | |||
+ | This page will very often mention **local computers** or **remote computers**: | ||
+ | |||
+ | * The **local computer** is the desktop or laptop you are interacting with (using a screen+mouse+keyboard) | ||
+ | * The local computer can be a **Linux, Windows or Mac (i.e //OS X//) computer** | ||
+ | |||
+ | * The **remote computer or server** is another computer that you also want to interact with (using the screen+mouse+keyboard of your local computer) | ||
+ | * We only consider on this page the case of a **remote //Linux// machine** that **requires a local running //X server//** | ||
+ | |||
+ | * **Remote Linux machine** can mean several things: | ||
+ | * It can be another operating system running inside **a [[https://en.wikipedia.org/wiki/Virtual_machine|Virtual Machine]] on your local computer** | ||
+ | * We mostly consider on this page the case of a **Linux virtual machine** using [[other:win10wsl|Windows Subsystem for Linux (WSL)]] on a Windows computer, but this can apply to other configurations | ||
+ | * It can be a **distant computer** or server in your building, or a high performance computer in a computing center on the other side of the Earth. It could also be a virtual machine in the //Cloud// | ||
===== Using an X server on Linux ===== | ===== Using an X server on Linux ===== | ||
- | Linux computers come pre-configured with a running X server (because they need it for displaying local graphics) that will display the graphics generated locally and on remote Linux servers. **You don't need to do anything special!** | + | <WRAP center round tip 60%> |
+ | You don't need to do anything special! | ||
+ | </WRAP> | ||
+ | |||
+ | Linux computers come pre-configured with a running //X server// that will display the graphics generated locally and on remote Linux servers | ||
Line 26: | Line 45: | ||
Type: <wrap em>free</wrap> | Type: <wrap em>free</wrap> | ||
- | Download the installer from [[https://sourceforge.net/projects/vcxsrv/|VcXrsv]] and install VcXsrv. | + | Download the installer from [[https://sourceforge.net/projects/vcxsrv/|VcXrsv]] and install ''VcXsrv''. |
=== VcXsrv Configuration === | === VcXsrv Configuration === | ||
Line 32: | Line 51: | ||
You need to configure ''VcXsrv'' to work in //multiple windows// mode. The following steps will show you how to create a shortcut on your desktop to start VcXsrv in this appropriate mode | You need to configure ''VcXsrv'' to work in //multiple windows// mode. The following steps will show you how to create a shortcut on your desktop to start VcXsrv in this appropriate mode | ||
- | * Start the configuration tool: ''Start'' => ''VcXsrv'' => ''Xlaunch'' | + | * Start the //configuration tool//: ''Start'' => ''VcXsrv'' => ''Xlaunch'' |
* Select ''Multiple windows'', then ''Next'' | * Select ''Multiple windows'', then ''Next'' | ||
* Select ''Start no client'', then ''Next'' | * Select ''Start no client'', then ''Next'' | ||
Line 39: | Line 58: | ||
* Click on ''Save configuration'' and save an ''X_Server.xlaunch'' configuration file on your Desktop, then ''Terminate''.\\ You should now have a new ''X_Server'' icon/shortcut on your Desktop | * Click on ''Save configuration'' and save an ''X_Server.xlaunch'' configuration file on your Desktop, then ''Terminate''.\\ You should now have a new ''X_Server'' icon/shortcut on your Desktop | ||
* Start the server by double-clicking on the new ''X_Server'' icon | * Start the server by double-clicking on the new ''X_Server'' icon | ||
- | * It will seem that nothing happens, but an ''X'' icon appears in the right side of the taskbar (you may have to look for it in the //Display hidden icons// pull-up menu). Your computer is now ready to display remote graphics!\\ {{ :other:vcxsrv_x.png?direct |}} | + | * It will seem that nothing happens, but an ''X'' icon will appear in the right side of the taskbar (you may have to look for it in the //Display hidden icons// pull-up menu). Your computer is now ready to display remote graphics!\\ {{ :other:vcxsrv_x.png?direct |}} |
- | * The X server will stop when you close your Windows session or restart the computer. Do not forget to click on the X_Server icon if you know that you will need an X server later | + | * The X server will stop when you close your Windows session or restart the computer. Do not forget to click on the ''X_Server'' icon on your desktop if you know that you will need an X server later |
+ | * FIXME Document how to automatically start the X server... | ||
* Note: you can right-click on the ''X'' icon and select ''Exit...'' if you need to quit the X server | * Note: you can right-click on the ''X'' icon and select ''Exit...'' if you need to quit the X server | ||
- | * You are now **ready**, if you only need VcXsrv to display graphical windows from remote servers | ||
==== Installing x410 ==== | ==== Installing x410 ==== | ||
- | Type: <wrap em>commercial</wrap> | + | <WRAP center round tip 60%> |
+ | [[https://token2shell.com/x410/|x410]] is a **low cost** commercial //X server// that can be directly installed from the [[https://www.microsoft.com/store/productId/9NLP712ZMN9Q|Microsoft store]]. | ||
- | [[https://token2shell.com/x410/|x410]] is a low cost commercial X server that can be directly installed from the [[https://www.microsoft.com/store/apps/9nlp712zmn9q|Microsoft store]]. Once installed, it will be automatically updated by the Microsoft Store application. | + | This is an //X server//, and you will get the same functionalities as what is already provided for free by [[other:x_conf#installing_vcxsrv|VcXsrv]], **but**: |
+ | * Once installed, ''x410'' will be automatically updated by the Microsoft Store application | ||
+ | * If you move to another computer, you can install ''x410'' again by just [[other:win10config#connecting_to_the_microsoft_store|Connecting the MS Store to your account]] on the new computer. No need to buy it again | ||
+ | * There seem to be more (useful) updates than for ''VcXsrv'' | ||
+ | * The interface is more modern, with more options, and there is a lot of useful information on the web site | ||
+ | * The ''x410'' name is easier to remember! :-D | ||
+ | </WRAP> | ||
- | **Starting, configuring and exiting X410**: you can start X410 by clicking on it in the Windows Start Menu, or choose to [[https://token2shell.com/howto/x410/automatically-start-x410-on-login/|Automatically Start X410 on Login]] | ||
- | * Note: nothing actually happens when you start X410, as it is just waiting to display graphics! You will just get a new **X** icon in the //hidden// icons of the taskbar. | ||
- | * You can configure (and exit) X410 by right clicking on its **X** icon | ||
- | |||
- | ==== Installing MobaXterm ==== | ||
Type: <wrap em>commercial</wrap> | Type: <wrap em>commercial</wrap> | ||
- | Available at [[https://mobaxterm.mobatek.net/|MobaXterm]], not tested. This seems to be more than just an X server, and may be an overkill if you just need an X server | + | Buy and install ''x410'' from the [[https://www.microsoft.com/store/productId/9NLP712ZMN9Q|Microsoft store]] |
+ | |||
+ | === x410 configuration === | ||
+ | |||
+ | * Start ''x410'': ''Start'' => ''X410'' | ||
+ | * It will seem that nothing happens, but an ''X'' icon will appear in the right side of the taskbar (you may have to look for it in the //Display hidden icons// pull-up menu). Your computer is now __almost__ ready to display remote graphics!\\ {{ :other:x410_x.png?direct |}} | ||
+ | * Right-click on the ''X'' icon to open the **X410 settings** | ||
+ | * Select ''Auto copy to Windows after selection''\\ {{ :other:x410_settings.png?direct |}} | ||
+ | * It's possible to **automatically start ''x410''**! Otherwise, it will stop when you close your Windows session or restart the computer, and you will have to restart it by hand (''Start'' => ''X410'') if you know that you will need an X server later | ||
+ | * Open the **Windows Task Manager** (Right-click on ''Start'' and select ''Task Manager'') | ||
+ | * Go to the ''Startup'' panel (if there are no panels, select ''More details'') | ||
+ | * Right-click on ''X140'' and select ''Enabled'' | ||
+ | * Note: if you need to quit the //X server//, you can right-click on the ''X'' icon, and then click on the //Display// number at the lower left (usually ''0'') and select ''Shut down'' | ||
===== Using an X server on an Apple computer ===== | ===== Using an X server on an Apple computer ===== | ||
- | ===== Configuration on the remote machine ===== | + | ===== Configuration on the remote Linux server ===== |
- | ==== If you are connecting with ssh ==== | + | ==== If you are connecting with ssh or PuTTY ==== |
- | Nothing special to do! | + | Nothing special to do, if you are using [[other:ssh#using_an_x_server_to_display_graphics|"ssh -X" or "ssh -Y"]] or ''PuTTY'' to connect to a remote Linux server |
==== If you are using WSL ==== | ==== If you are using WSL ==== | ||
- | If you have installed [[other:win10wsl|WSL+Ubuntu]] on your local machine, and you need your X server to display graphics generated in WSL, you need to define the DISPLAY variable: ''export DISPLAY=localhost:0.0'' | + | You need to know what you consider as the //Local machine//, and what is the //Remote server// |
+ | |||
+ | * **Local machine**: your local **Windows computer**, where you have installed [[other:win10wsl|WSL+Ubuntu]] | ||
+ | |||
+ | * **Remote server** : we consider 2 types of remote servers: | ||
+ | * an **actual remote server** | ||
+ | * The **WSL computer** running on a **virtual machine inside your local Windows computer**. This can be considered as a different and //remote// computer, even it is running on the local computer\\ You need your local //X server// to display graphics generated in WSL | ||
+ | * **Define the ''DISPLAY'' variable** in the terminals used in WSL: | ||
+ | * //bash// shell: ''export DISPLAY=localhost:0.0'' | ||
+ | * //tcsh// shell: ''setenv DISPLAY localhost:0.0'' | ||
+ | * You probably want to define the ''DISPLAY'' variable automatically in one of the shell configuration files | ||
===== Testing ===== | ===== Testing ===== | ||
- | * Check if the ''DISPLAY'' variable is defined | + | The idea is to: |
- | * You should get something similar to the following if you are connected with ''ssh -X'' or ''ssh -Y''\\ <code>$ echo $DISPLAY | + | * Open a terminal and check that the ''DISPLAY'' environment variable is correctly defined on the local machine |
- | localhost:68.0 | + | * Connect to the remote machine |
- | </code> | + | * Check that a (new) ''DISPLAY'' variable is automatically defined on the remote machine |
- | * You should get something similar to the following if you are using WSL\\ <code>$ echo $DISPLAY | + | * Check that you can start an application using graphics (e.g. ''xterm'') on the remote machine |
- | SOMETHING | + | |
- | </code> | + | |
- | * Otherwise, type ''export DISPLAY=localhost:0.0'' | + | |
- | * Type ''xterm'' and check that a new //xterm// terminal appears (it may appear //iconified//) | + | |
- | * FIXME | + | |
+ | ==== On a Linux computer ==== | ||
+ | Some basic commands in a terminal | ||
+ | |||
+ | <code>[Local] $ hostname | ||
+ | name_of_your_local_machine | ||
+ | |||
+ | [Local] $ echo $DISPLAY | ||
+ | :0 | ||
+ | |||
+ | [Local] $ ssh -X some_login@some_remote_server | ||
+ | [some connection information skipped here] | ||
+ | |||
+ | [Remote] $ hostname | ||
+ | name_of_the_remote_server | ||
+ | |||
+ | [Remote] $ echo $DISPLAY | ||
+ | localhost:20.0 | ||
+ | |||
+ | [Remote] $ xterm</code> | ||
+ | |||
+ | ==== On a Windows computer with only an X server installed ==== | ||
+ | |||
+ | We just open a ''Powershell'' window (''Start'' => ''Windows Powershell'' => ''Windows Powershell'') and type some basic commands | ||
+ | |||
+ | <code>PS C:\> $env:computername | ||
+ | name_of_your_local_machine | ||
+ | |||
+ | PS C:\> $env:DISPLAY | ||
+ | PS C:\> $env:DISPLAY="localhost:0" | ||
+ | PS C:\> $env:DISPLAY | ||
+ | localhost:0 | ||
+ | |||
+ | PS C:\> ssh -Y some_login@some_remote_server | ||
+ | Warning: No xauth data; using fake authentication data for X11 forwarding. | ||
+ | [some connection information skipped here] | ||
+ | |||
+ | [Remote] $ hostname | ||
+ | name_of_the_remote_server | ||
+ | |||
+ | [Remote] $ echo $DISPLAY | ||
+ | localhost:19.0 | ||
+ | |||
+ | [Remote] $ xterm</code> | ||
+ | |||
+ | |||
+ | ==== On a Windows computer with PuTTY and an X server installed ==== | ||
+ | |||
+ | We assume here that [[other:putty_conf|PuTTY is already installed and configured]] and **correctly** configured (with ''Enable X11 forwarding'') | ||
+ | |||
+ | We just have to open a pre-configured //PuTTY Session// on a remote server | ||
+ | <code>[Remote] $ hostname | ||
+ | name_of_the_remote_server | ||
+ | |||
+ | [Remote] $ echo $DISPLAY | ||
+ | localhost:19.0 | ||
+ | |||
+ | [Remote] $ xterm</code> | ||
+ | |||
+ | |||
+ | ==== On a Windows computer with WSL+Linux and an X server installed ==== | ||
+ | |||
+ | We assume that [[other:win10wsl|WSL+Ubuntu]] is installed and that the ''DISPLAY'' variable is [[other:x_conf#if_you_are_using_wsl|configured correctly]] | ||
+ | |||
+ | Open a WSL terminal (you should know how, if you have installed WSL) and type some basic commands | ||
+ | |||
+ | <code>[Local WSL] $ hostname | ||
+ | name_of_your_local_machine | ||
+ | [Local WSL] $ echo $DISPLAY | ||
+ | localhost:0.0 | ||
+ | [Local WSL] $ xterm | ||
+ | |||
+ | [Local WSL] $ ssh -X some_login@some_remote_server | ||
+ | [some connection information skipped here] | ||
+ | |||
+ | [Remote] $ echo $DISPLAY | ||
+ | localhost:22.0 | ||
+ | [Remote] $ xterm</code> | ||
===== Troubleshooting ===== | ===== Troubleshooting ===== | ||
+ | ==== Nothing works! ==== | ||
+ | |||
+ | That's unfortunate, but: | ||
+ | * Have you turned on your computer? | ||
+ | * Do you have network access, and an account on a remote server? | ||
+ | * Have you run the [[other:x_conf#testing|Tests]]? | ||
+ | * Have you installed and configured the //X server// correctly? Is it really running? | ||
+ | * Have you configured [[other:putty_conf|PuTTY]] and/or other required applications correctly ? | ||
+ | * Is the ''DISPLAY'' variable defined correctly on the local and remote computer? | ||
+ | |||
+ | === When DISPLAY is not defined correctly === | ||
+ | |||
+ | If the ''DISPLAY'' **variable is not defined (correctly)**, you will get a ''Can't open display: //[NO VALUE DISPLAYED HERE]//'' error | ||
+ | |||
+ | <code>$ xterm & | ||
+ | $ xterm: Xt error: Can't open display: | ||
+ | xterm: DISPLAY is not set | ||
+ | $ echo $DISPLAY | ||
+ | |||
+ | </code> | ||
+ | |||
+ | Make sure that you are using ''ssh -X'' or ''ssh -Y'', or that [[other:putty_conf#changing_some_useful_settings|PuTTY is configured]] with ''Enable X11 forwarding'' | ||
+ | |||
+ | === When there is no X server running === | ||
+ | |||
+ | If the ''DISPLAY'' variable is defined, but there is **no X server**, you will get a ''Can't open display: localhost://[SOME VALUE]//'' error\\ <code>$ xterm & | ||
+ | $ connect localhost port 6000: Connection refused | ||
+ | xterm: Xt error: Can't open display: localhost:12.0</code> | ||
+ | |||
+ | Time to [[other:x_conf|read this page again]]... | ||
==== OpenGL related settings ==== | ==== OpenGL related settings ==== | ||
- | It's hard to know what the best OpenGL settings for your X server are: it depends on your local computer, the remote computer, the network speed, the application generating the graphics, the libraries' versions... | + | It's hard to know what the best //OpenGL// settings for your //X server// are: it depends on your local computer, the remote computer, the network speed, the application generating the graphics, the libraries' versions... |
- | * If ''Native opengl'' is activated in VcXsrv, you //may// have to also use the following environment variable on the remote computer: ''export LIBGL_ALWAYS_INDIRECT=1'' | + | * If ''Native opengl'' is activated in ''VcXsrv'', you //may// have to also use the following environment variable on the remote computer: ''export LIBGL_ALWAYS_INDIRECT=1'' |
* or maybe not! You can try to understand the [[https://unix.stackexchange.com/questions/1437/what-does-libgl-always-indirect-1-actually-do|What does LIBGL_ALWAYS_INDIRECT=1 actually do?]] thread... | * or maybe not! You can try to understand the [[https://unix.stackexchange.com/questions/1437/what-does-libgl-always-indirect-1-actually-do|What does LIBGL_ALWAYS_INDIRECT=1 actually do?]] thread... | ||