User Tools

Site Tools


other:win10wsl

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
other:win10wsl [2020/01/16 17:46]
jypeter [Get configuration files]
other:win10wsl [2020/07/08 16:38] (current)
jypeter [Installing an X server]
Line 1: Line 1:
-====== Windows Subsystem for Linux, and Ubuntu ======+====== Windows Subsystem for Linux (WSL), and Ubuntu ======
  
-<note warning>​What is described on this page was tested with **WSL v1**, and not WSL2 (WSL2 will be available for testing mid-2019, and maybe available for actual use in 2020). It should be possible to install both WSL v1 and v2 on the same computer and WSL v2 will theoretically have faster I/O, but we recommend you use WSL v1 for now</​note>​+[[other:​index#​windows_10_notes|Other Windows 10 related notes]] 
 + 
 +<note warning>​What is described on this page was tested with **WSL v1**, and not WSL 2 ([[https://​docs.microsoft.com/​en-us/​windows/​wsl/​wsl2-index|WSL 2]] will be available for testing mid-2019 ​through the //Windows Insider Program//, and maybe available for actual use in 2020). 
 + 
 +It should be possible to install both WSL v1 and v2 on the same computer and WSL v2 will theoretically have faster I/O, but **we recommend you use WSL v1 for now**</​note>​
  
 Read just the top of the [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​about|Windows Subsystem for Linux Documentation]] for a quick **WSL** description on the Microsoft site Read just the top of the [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​about|Windows Subsystem for Linux Documentation]] for a quick **WSL** description on the Microsoft site
  
-In a few words, WSL is not Linux, it's more a way to [[https://​blogs.msdn.microsoft.com/​wsl/​2016/​06/​15/​wsl-file-system-support/​|share files between Windows and Linux]] (it's OK to skip this rather technical link!). That's why you need //WSL **and** a Linux distribution//​.+In a few words, WSL is not Linux, it's more a way to [[https://​blogs.msdn.microsoft.com/​wsl/​2016/​06/​15/​wsl-file-system-support/​|share files between Windows and Linux]] (it's OK to skip this rather technical link!). [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​faq#​are-files-in-the-linux-drive-different-from-the-mounted-windows-drive|Files under the Linux root (i.e. /) are controlled by WSL which mimics Linux specific behavior [...follow the link for details...]]]. That's why you need //to activate ​WSL **and then install ​a Linux distribution**//.
  
 ===== Prerequisites ===== ===== Prerequisites =====
Line 15: Line 19:
       * Note: there is sometimes a delay between the official release and the time when Windows Update will actually tell you that a major update is available for **your** computer (e.g. the //September YY09// update may become available for you only in December)       * Note: there is sometimes a delay between the official release and the time when Windows Update will actually tell you that a major update is available for **your** computer (e.g. the //September YY09// update may become available for you only in December)
   * //Enough// space on ''​C:​\''​. Microsoft instructions say //The Windows Subsystem for Linux only runs on your system drive (usually this is your C: drive)//   * //Enough// space on ''​C:​\''​. Microsoft instructions say //The Windows Subsystem for Linux only runs on your system drive (usually this is your C: drive)//
-    * The initial installation of Ubuntu ​does not //seem// to use much disk space (< 1 Gb), but you will get a basic Linux with no graphics, ​and you will probably ​need space for installing more applications+    * Exporting a //​simple// ​Ubuntu ​configuration (after doing everything from //Base installation// to //Advanced configuration//​ below) with the [[other:​win10wsl#​creating_a_backup_of_the_linux_running_in_wsl|wsl --export]] command generated a 2.7 Gb tar file (uncompressed), so it's probably good to **start ​with at least 3 Gb of free space on ''​C:​\''​** (and you always ​need to keep enough free space on ''​C:​\'' ​for regular Windows operation)
     * The Linux ''/''​ and ''/​home''​ partitions will always be on ''​C:'',​ but the data files can be on any Windows disk/​partition (or external drive) of the computer     * The Linux ''/''​ and ''/​home''​ partitions will always be on ''​C:'',​ but the data files can be on any Windows disk/​partition (or external drive) of the computer
       * the Windows partitions will be available and accessible in ''/​mnt/'',​ so you can store data on other partitions (e.g. the content of the Windows ''​D:​\''​ partition will be available in ''/​mnt/​d''​ in Linux)       * the Windows partitions will be available and accessible in ''/​mnt/'',​ so you can store data on other partitions (e.g. the content of the Windows ''​D:​\''​ partition will be available in ''/​mnt/​d''​ in Linux)
Line 21: Line 25:
       * Checking the properties of ''​C:​\Users\<​your_login>''​ will **not** report an accurate size and number of files, because lots of files and directories are hidden! On the test laptop, the reported size of the user backed up directory (with [[other:​win10apps#​syncbackfree|SyncBackFree]]) was ~20 Gb (user data, WSL+Ubuntu, custom install of the CDAT 8.1 python distribution)       * Checking the properties of ''​C:​\Users\<​your_login>''​ will **not** report an accurate size and number of files, because lots of files and directories are hidden! On the test laptop, the reported size of the user backed up directory (with [[other:​win10apps#​syncbackfree|SyncBackFree]]) was ~20 Gb (user data, WSL+Ubuntu, custom install of the CDAT 8.1 python distribution)
       * Be sure to monitor the remaining free space on ''​C:''​!       * Be sure to monitor the remaining free space on ''​C:''​!
 +  * Note: it seems that [[other:​win10wsl#​restoring_a_wsl_backup|wsl --import]] can restore a backed-up Linux to a user specified location. Maybe this can be used for moving Ubuntu...
  
 ===== Base installation ===== ===== Base installation =====
Line 28: Line 33:
   * Follow **closely** the steps listed in [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​install-win10|WSL Windows 10 Installation Guide]]. <wrap hi>Open this [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​install-win10|WSL Windows 10 Installation Guide]] in another window, so that you can **read the useful hints below at the same time!**</​wrap>​   * Follow **closely** the steps listed in [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​install-win10|WSL Windows 10 Installation Guide]]. <wrap hi>Open this [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​install-win10|WSL Windows 10 Installation Guide]] in another window, so that you can **read the useful hints below at the same time!**</​wrap>​
     * When you have to //Open PowerShell as Administrator//,​ go to ''​Start''​=>''​W''​=>''​Windows PowerShell''​ then right-clik on ''​Windows PowerShell''​ and select //Run as Administrator//​     * When you have to //Open PowerShell as Administrator//,​ go to ''​Start''​=>''​W''​=>''​Windows PowerShell''​ then right-clik on ''​Windows PowerShell''​ and select //Run as Administrator//​
 +    * FIXME At this stage, we could try to restore/​clone a previously installed/​customized/​backed-up version of Ubuntu if we have one (see [[other:​win10wsl#​restoring_a_wsl_backup|Restoring a WSL backup]])
     * In the //Install your Linux Distribution of Choice//, we will use the very easy //install from the Microsoft Store// option     * In the //Install your Linux Distribution of Choice//, we will use the very easy //install from the Microsoft Store// option
       * Open the **Microsoft Store** with: ''​Start''​=>''​Microsoft Store''​       * Open the **Microsoft Store** with: ''​Start''​=>''​Microsoft Store''​
Line 124: Line 130:
 === Linux files seen from Windows === === Linux files seen from Windows ===
  
-The content of the Ubuntu ​''/'' ​directory is actually located ​in the following ​//hidden// sub-directory of the user'​s ​Windows //home// directory''​C:\Users\<​your_login>​\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs''​+  * You can access ​the Linux files in ''/'' ​from Windows by opening the //virtual// ''​\\wsl$''​ path in the Windows explorer (since [[https://docs.microsoft.com/​en-us/​windows/wsl/release-notes#​build-18342|Windows ​build 18342]]) 
 +    * Your Linux //home// directory ​is located in ''​\\wsl$\Ubuntu\home\<​your_login>​''​
  
-<note important>​[[https:​//blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/|Do not change Linux files in '/' ​from Windows!]]+  * The content of the Ubuntu ''​/''​ directory is actually located in the following ​//hidden// sub-directory of the user's Windows ​//home// directory: ''​C:​\Users\<​your_login>​\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs'​'
  
-If you need to update files from both Linux and Windows, put them in a regular Windows directory (not in the hidden directory mentioned above, where the Linux system is installed)</​note>​+<note important>​[[https://​blogs.msdn.microsoft.com/​commandline/​2016/​11/​17/​do-not-change-linux-files-using-windows-apps-and-tools/​|Do not change Linux files in '/'​ from Windows!]] (it's safe **only** if you use the ''​\\wsl$''​ path) 
 + 
 +If you need to easily ​update files from both Linux and Windows, put them in a regular Windows directory (not in the hidden directory mentioned above, where the Linux system is installed)</​note>​
  
 === Windows files seen from Linux === === Windows files seen from Linux ===
 +
 +Note: When you are in an explorer window, you can open a Windows terminal with Linux by holding Shift and right-clicking on a directory and choosing Linux in the context menu.
  
 The Windows partitions are mounted under ''/​mnt''​ in Linux: The Windows partitions are mounted under ''/​mnt''​ in Linux:
Line 152: Line 163:
 ==== Linux version installed ==== ==== Linux version installed ====
  
-<​code>​$ lsb_release -a+<​code>​$ date 
 +Thu Feb 20 11:18:57 CET 2020 
 + 
 +$ lsb_release -a
 No LSB modules are available. No LSB modules are available.
 Distributor ID: Ubuntu Distributor ID: Ubuntu
-Description: ​   Ubuntu 18.04.LTS+Description: ​   Ubuntu 18.04.LTS
 Release: ​       18.04 Release: ​       18.04
 Codename: ​      ​bionic Codename: ​      ​bionic
Line 214: Line 228:
 <note important>​We often assume below that you are using the **root** account (''​sudo -s''​),​ or ''​sudo''​ when executing the ''​apt*''​ installation commands, and othe admin commands</​note>​ <note important>​We often assume below that you are using the **root** account (''​sudo -s''​),​ or ''​sudo''​ when executing the ''​apt*''​ installation commands, and othe admin commands</​note>​
  
 +==== Specifying correctly the display language ====
 +
 +WSL will automatically try to use in the terminals the same language as the one used by the Windows 10 computer ([[https://​docs.microsoft.com/​en-us/​windows/​wsl/​troubleshooting#​changing-the-display-language|ref]]),​ but this could lead later to some difficult to debug **side-effects** when you connect to remote Linux servers (e.g. the ''​sort''​ command may give different results !).
 +
 +It is **safer** to force the system to use a //​standard//​ English version
 +
 +<​code>​$ sudo update-locale LANG=en_US.UTF8
 +$ echo $LANG
 +en_US.UTF8
 +</​code>​
 ==== Package management ==== ==== Package management ====
  
Line 248: Line 272:
 /​usr/​bin/​wslview /​usr/​bin/​wslview
 [...]</​code>​ [...]</​code>​
 +
 ==== Using an X server ==== ==== Using an X server ====
  
Line 263: Line 288:
 </​code>​ </​code>​
  
-=== Installing an X server ===+==== Installing an X server ===
 + 
 +<WRAP center round tip 60%> 
 +The //X server// will allow you to display graphical windows (i.e. //X windows//) from remote servers or from your local WSL+Ubuntu 
 +</​WRAP>​ 
  
 <WRAP center round important 60%> <WRAP center round important 60%>
Line 271: Line 301:
 </​WRAP>​ </​WRAP>​
  
-== Installing VcXrsv ==+=== Installing VcXrsv ​===
  
 <note tip>​VcXrsv is pre-installed on the LSCE computers!</​note>​ <note tip>​VcXrsv is pre-installed on the LSCE computers!</​note>​
Line 277: Line 307:
 Type: <wrap em>​free</​wrap>​ Type: <wrap em>​free</​wrap>​
  
-Download the installer from [[https://​sourceforge.net/​projects/​vcxsrv/​|VcXrsv]]+Download the installer from [[https://​sourceforge.net/​projects/​vcxsrv/​|VcXrsv]] ​and install VcXrsv.
  
-**VcXrsv Configuration**+== VcXrsv Configuration ​==
  
-You need to configure ​your VcXrsv to work in multiple windows mode. The following steps will show you how to create a shortcut on your desktop to start VcXrsv in the apropriate ​mode+You need to configure VcXrsv to work in //multiple windows// mode. The following steps will show you how to create a shortcut on your desktop to start VcXrsv in this appropriate ​mode
  
   * Start //​Xlaunch//:​ ''​Start''​ => ''​VcXrsv''​ => ''​Xlaunch''​   * Start //​Xlaunch//:​ ''​Start''​ => ''​VcXrsv''​ => ''​Xlaunch''​
Line 290: Line 320:
   * Click on the new ''​X_Server''​ icon, and check that 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)   * Click on the new ''​X_Server''​ icon, and check that 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)
     * 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
-  * Test the X server+  * Note: if you notice later that the content of some displayed //windows// appear **blurry**, see if you can [[other:win10misc#​vcxsrv_x_server|fix the compatibility settings]], or try to use **x410**. 
-    * Type ''​export DISPLAY=localhost:​0.0'' ​in a terminal+  * You are now **ready**, if you only need VcXrsv to display graphical windows from remote servers 
 + 
 +  * The following steps allow you to test the X server in a **local** WSL+Ubuntu terminal. **Do not set the DISPLAY variable yourself when you are connected to a remote server with ''​ssh''​!** 
 +    * Open a **local** terminal (in WSL+Ubuntu) 
 +    * Type ''​export DISPLAY=localhost:​0.0''​
     * Type ''​xterm''​ and check that a new //xterm// terminal appears     * Type ''​xterm''​ and check that a new //xterm// terminal appears
-  * Note: if you notice later that the content of some X windows appear blurry, see if you can [[other:​win10misc#​vcxsrv_x_server|fix the compatibility settings]], or try to use **x410**. 
  
  
-== Installing x410 ==+=== Installing x410 ===
  
 Type: <wrap em>​commercial</​wrap>​ Type: <wrap em>​commercial</​wrap>​
Line 306: Line 339:
   * You can configure (and exit) X410 by right clicking on its **X** icon   * You can configure (and exit) X410 by right clicking on its **X** icon
  
-== Installing MobaXterm ==+=== Installing MobaXterm ​===
  
 Type: <wrap em>​commercial</​wrap>​ Type: <wrap em>​commercial</​wrap>​
Line 312: Line 345:
 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 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
  
-=== Configuration (in your local Linux account) ===+==== Configuration (in your local Linux account) ​====
  
   * Set the DISPLAY variable in the shell (by hand, or in the bash shell init file)   * Set the DISPLAY variable in the shell (by hand, or in the bash shell init file)
Line 321: Line 354:
     * it breaks ''​glxgears''​ with x410     * it breaks ''​glxgears''​ with x410
  
-=== Resources ===+==== Resources ​====
  
 You can skip this! m( You can skip this! m(
Line 339: Line 372:
  
 # Install emacs # Install emacs
-$ apt-get install ​emacs25+$ apt-get install ​emacs
  
 # Install pdf (evince) and image (eog) viewers # Install pdf (evince) and image (eog) viewers
Line 388: Line 421:
 ===== Advanced configuration ===== ===== Advanced configuration =====
  
-==== Get configuration files ====+==== Get Linux configuration files ====
  
-  * You can either ​use your existing Linux configuration files, or download some example files in your WSL home directory and use (and improve) them as directed ​(or as you wish)+  * You can either ​adapt your existing Linux configuration files (''​.profile'',​ ''​.bashrc'',​ ...) from another Linux computer, or download some example files in your WSL home directory and use (and improve) them as suggested below (or as you wish)
     * <​code>​$ cd     * <​code>​$ cd
 $ scp -pr <​your_login>​@ssh1.lsce.ipsl.fr:/​home/​users/​jypeter/​WSL_config .</​code>​ $ scp -pr <​your_login>​@ssh1.lsce.ipsl.fr:/​home/​users/​jypeter/​WSL_config .</​code>​
     * You get a default ''​.bashrc''​ file in your home directory when your WSL account is created. Add the following line at the end of ''​~/​.bashrc''​ to use what is defined in the downloaded ''​WSL_config''​ directory:​\\ ''​source ~/​WSL_config/​bashrc_extra.sh''​     * You get a default ''​.bashrc''​ file in your home directory when your WSL account is created. Add the following line at the end of ''​~/​.bashrc''​ to use what is defined in the downloaded ''​WSL_config''​ directory:​\\ ''​source ~/​WSL_config/​bashrc_extra.sh''​
 +    * If you use the //emacs// text editor, you can use your own ''​.emacs''​ configuration file, or get an example configuration file the following way:
 +      * <​code>​$ cd
 +$ ln -s WSL_config/​emacs .emacs</​code>​
 +      * Font configuration (type, size, ...): FIXME
   * You can either copy the full ''​.ssh''​ directory of your Linux account, or just get the //private key// files:   * You can either copy the full ''​.ssh''​ directory of your Linux account, or just get the //private key// files:
     * <​code>​$ cd     * <​code>​$ cd
-$ scp -pr your_login@ssh1.lsce.ipsl.fr:​.ssh .</​code>​ +$ scp -pr <your_login>@ssh1.lsce.ipsl.fr:​.ssh .</​code>​ 
-    * Make sure you also read the [[other:​win10wsl#​ssh_agent_and_keys_related_questions|ssh,​ agent and keys related questions]] section!+    * Make sure you **also** read the [[other:​win10wsl#​ssh_agent_and_keys_related_questions|ssh,​ agent and keys related questions]] section ​below! 
 ==== ssh, agent and keys related questions ==== ==== ssh, agent and keys related questions ====
  
Line 406: Line 444:
 == Authorizing ssh to use old dsa keys == == Authorizing ssh to use old dsa keys ==
  
-//dsa// ssh keys are disabled by default (becoming obsolete). ''​ssh''​ will ask for your password even if you have a ''​~/​.ssh/​id_dsa''​ file. ''​ssh -v''​ will print ''​Skipping ssh-dss key /home/jyp/​.ssh/​id_dsa - not in PubkeyAcceptedKeyTypes''​. The solution is to use the user config file to authorize dsa ([[https://​unix.stackexchange.com/​a/​247614|source]]) +//dsa// ssh keys are disabled by default (becoming obsolete). ''​ssh''​ will ask for your password even if you have a ''​~/​.ssh/​id_dsa''​ file. ''​ssh -v''​ will print ''​Skipping ssh-dss key /home/<​your_login>​/​.ssh/​id_dsa - not in PubkeyAcceptedKeyTypes''​. The solution is to generate a new couple of public/​private keys not based on //dsa// encryption, or to use the user ssh ''​config'' ​file to authorize ​//dsa// ([[https://​unix.stackexchange.com/​a/​247614|source]]) 
-    * Add ''​PubkeyAcceptedKeyTypes +ssh-dss''​ to ''​~/​.ssh/​config''​+    * Add ''​PubkeyAcceptedKeyTypes +ssh-dss''​ to ''​~/​.ssh/​config'' ​(**before** the ''​HOST''​ sections)
     * Make sure the config file has the correct access rights: ''​chmod 600 config''​     * Make sure the config file has the correct access rights: ''​chmod 600 config''​
  
 == Using Putty Pageant as an ssh agent == == Using Putty Pageant as an ssh agent ==
  
-This assumes that you have converted your private ssh key with ''​PuTTYgen''​ and unlocked ​it in Pageant+This assumes that you have installed the full [[other:​win10apps#​putty_pageant|Putty]] package (with the //msi// installer), ​converted your private ssh key with ''​PuTTYgen''​and unlocked ​the converted ssh private key in Pageant
 + 
 +<wrap hi>The converted ssh private key is located in a Windows 10 folder</​wrap>​
  
   * Download the required binaries from the [[https://​github.com/​vuori/​weasel-pageant|weasel-pageant github page]] and extract them to a Windows directory, e.g. ''​C:​\Utils\weasel-pageant-x.x''​   * Download the required binaries from the [[https://​github.com/​vuori/​weasel-pageant|weasel-pageant github page]] and extract them to a Windows directory, e.g. ''​C:​\Utils\weasel-pageant-x.x''​
-  * Add the following line to your ''​~/​.bashrc''​ file:\\ ''​eval $(C:\Utils\weasel-pageant-x.x/​weasel-pageant -rb -a $HOME/​.weasel-pageant.sock)''​+  * Add the following line to your ''​~/​.bashrc''​ file:\\ ''​eval $(/mnt/c/Utils/weasel-pageant-x.x/​weasel-pageant -rb -a $HOME/​.weasel-pageant.sock)''​ 
 +      * This is done by default in the ''​~/​WSL_config/​bashrc_extra.sh''​ if you have downloaded and adapted it
   * Open a new terminal:   * Open a new terminal:
     * Type ''​ssh-add -l'':​ it will display either ''​The agent has no identities'',​ or as many lines as you have entered keys in Pageant     * Type ''​ssh-add -l'':​ it will display either ''​The agent has no identities'',​ or as many lines as you have entered keys in Pageant
Line 424: Line 465:
 == Using Ubuntu as an ssh-agent == == Using Ubuntu as an ssh-agent ==
  
-We **do not use this** now, because there will be one running ​ssh-agent per terminal, ​and the key is stored only for the current terminal ​+<wrap hi>​The ​ssh key (and other ssh settings) are in the ''​~/​.ssh''​ directory of your WSL+Ubuntu account</​wrap>​
  
-  ​* It's not possible to add a key to ssh-agent'​ssh-add'​ will print ''​Could not open a connection to your authentication agent''​ +This is the most simple setting, **but** there will be one running //​ssh-agent//​ per terminal, and the key will be stored independently for each terminal (which means that you will have to type ''​ssh-add''​ and your pass-phrase for each terminal) 
-    * type ''​eval `ssh-agent -s`''​ (or ''​eval $(ssh-agent)''​) ​before using ''​ssh-add''​+ 
 +  ​* It's not possible ​by default ​to add a key to ssh-agent ​('​ssh-add'​ will print ''​Could not open a connection to your authentication agent''​) 
 +  If you want to use ''​ssh-add''​ in a terminal, you first need to type ''​eval `ssh-agent -s`'' ​in the (or ''​eval $(ssh-agent)''​) 
 +    * In that case, it's just easier to add ''eval $(ssh-agent)''​ to the ''​.bashrc''​ file! 
 +      * This is done by default in the ''​~/​WSL_config/​bashrc_extra.sh'' ​if you have downloaded and adapted it
  
 == Notes & TODO == == Notes & TODO ==
Line 436: Line 481:
 === ssh to WSL === === ssh to WSL ===
  
-FIXME+FIXME Maybe check [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​troubleshooting#​openssh-server-connection-issues|OpenSSH-Server connection issues]]
  
-Need to find way to ssh from the Win10 part of the machine to the WSL part, and from outside the machine to the WSL part+Maybe it could be useful ​to do ''​ssh'' ​from the Win10 part of the machine to the WSL part, and from outside the machine to the WSL part
  
 It would probably already be enough to enable the ssh server on Win10 (the [[https://​devblogs.microsoft.com/​powershell/​using-the-openssh-beta-in-windows-10-fall-creators-update-and-windows-server-1709/​|ssh 1709 release beta features]] are now officially in Win10) It would probably already be enough to enable the ssh server on Win10 (the [[https://​devblogs.microsoft.com/​powershell/​using-the-openssh-beta-in-windows-10-fall-creators-update-and-windows-server-1709/​|ssh 1709 release beta features]] are now officially in Win10)
Line 451: Line 496:
  
   * Install [[https://​github.com/​wslutilities/​wslu|wslu]] (A collection of utilities for WSL) if it is not already installed   * Install [[https://​github.com/​wslutilities/​wslu|wslu]] (A collection of utilities for WSL) if it is not already installed
-    * ''​aptget ​install wslu''​+    * ''​apt-get ​install wslu''​
   * Have a quick look at the wslu [[https://​github.com/​wslutilities/​wslu|github]] page and [[https://​github.com/​wslutilities/​wslu/​wiki|wiki]] to find about the available tools (that you may need later)   * Have a quick look at the wslu [[https://​github.com/​wslutilities/​wslu|github]] page and [[https://​github.com/​wslutilities/​wslu/​wiki|wiki]] to find about the available tools (that you may need later)
-  * Create ​a shortcut ​(e.g. to emacs) with: ''​wslusc -g emacs''​+  * You can create ​a shortcut ​by using ''​wslusc''​ in any Linux terminal 
 +    * e.g. you can create a shortcut on the Windows desktop ​to start emacs (in WSL!) with:\\ ''​wslusc -g emacs''​ 
 +      * This will make it easier to start emacs, but since this is a graphical Linux application,​ **you need to have an X server running before you click on the emacs shortcut**!
   * You can optionally get some information about the [[https://​github.com/​Microsoft/​WSL/​issues/​3404|technical details]]   * You can optionally get some information about the [[https://​github.com/​Microsoft/​WSL/​issues/​3404|technical details]]
  
-==== emacs configuration ==== 
- 
-  * [[other:​win10wsl#​get_configuration_files|Get configuration files]] 
-  * Use the provided emacs configuration file (or your own): 
-    * <​code>​$ cd 
-$ ln -s WSL_config/​emacs .emacs</​code>​ 
-  * Use ''​wslusc''​ to create a shortcut to **emacs** **on your Windows desktop**:​\\ ''​wslusc -g emacs''​ 
-    * This will make it easier to start emacs, but since this is a graphical Linux application,​ you need to have an X server running before you click on the shortcut! 
 ==== Mounting disks and network drives ==== ==== Mounting disks and network drives ====
  
-By default, the local disks and the external USB disks available (and decrypted!) when the first WSL terminal is opened are automatically available (//​mounted//​) in ''/​mnt''​ : the content of ''​C:​\''​ is available in ''/​mnt/​c'',​ etc... The list is refreshed when Windows (or just WSLis rebooted ​.+By default, the local disks and the external USB disks available (and decrypted!) ​when WSL is started (i.e. when the first WSL terminal is openedare automatically available (//​mounted//​) in ''/​mnt''​ : the content of ''​C:​\''​ is available in ''/​mnt/​c'',​ etc... The list of available disks is refreshed when the Windows ​session is restarted ​(the user logs out and in, or Windows is rebooted) or when just [[other:​win10wsl#​rebooting_wsl|WSL is restarted]].
  
 Extra local disks or //network drives// (what you can access by opening ''​\\dfshost\dfs\''​ in the file explorer when you are on the LSCE network) can be either mounted on the fly with the ''​mount''​ command, or automatically by configuring the ''/​etc/​fstab''​ file. Extra local disks or //network drives// (what you can access by opening ''​\\dfshost\dfs\''​ in the file explorer when you are on the LSCE network) can be either mounted on the fly with the ''​mount''​ command, or automatically by configuring the ''/​etc/​fstab''​ file.
Line 473: Line 512:
  
 <wrap hi>​Warning!</​wrap>​ In all cases, the owner, groups and permissions displayed may not be accurate (but the actual access rights will apply). <wrap hi>​Warning!</​wrap>​ In all cases, the owner, groups and permissions displayed may not be accurate (but the actual access rights will apply).
-  * the user/group of the files may appear as ''​your_login''/''​your_login''​ or ''​root''/''​root''​ +  * the user/group of the files may appear as ''​your_login''/''​your_login''​ or ''​root''/''​root''​. Example of a local file belonging to the current Windows //jypeter// user, and a system file 
-  * the access rights may appear as ''​rwxrwxrwx''​ even if the actual rights are more restrictive +    * <​code>​$ ls -l /​mnt/​c/​Users/​jypeter/​Desktop/​File_on_Desktop.txt 
-  more details in the //metadata// section+-rwxrwxrwx 1 jypeter jypeter 0 Jan 21 11:50 /​mnt/​c/​Users/​jypeter/​Desktop/​File_on_Desktop.txt 
 + 
 +$ ls -l /​mnt/​c/​Windows/​notepad.exe 
 +-r-xr-xr-x 3 jypeter jypeter 181248 Mar 19  2019 /​mnt/​c/​Windows/​notepad.exe 
 +</​code>​ 
 +  * the access rights may appear as ''​rwxrwxrwx''​ even if the actual rights are more restrictive. Example after mounting the LSCE ''/​home/​scratch01''​ disk 
 +    <​code>#​ File access rights seen from WSL+Ubuntu 
 +$ ls -l /​mnt/​scratch01/​jypeter/​Chrome_backup.zip 
 +-rwxrwxrwx 1 root root 2755154 Jan 13 15:10 /​mnt/​scratch01/​jypeter/​Chrome_backup.zip 
 + 
 +# Actual access rights (on the Linux server) 
 +>ls -l /home/scratch01/jypeter/​Chrome_backup.zip 
 +-rw-r--r-- 1 jypeter lsce 2755154 Jan 13 15:10 /​home/​scratch01/​jypeter/​Chrome_backup.zip 
 + 
 +# You can't change the access rights from WSL+Ubuntu, but you can remove a file, or create a new one 
 +$ chmod 600 /​mnt/​scratch01/​jypeter/​Chrome_backup.zip 
 +chmod: changing permissions of '/​mnt/​scratch01/​jypeter/​Chrome_backup.zip':​ Operation not permitted 
 +$ rm /​mnt/​scratch01/​jypeter/​Chrome_backup.zip 
 +$ ls -l /​mnt/​scratch01/​jypeter/​Chrome_backup.zip 
 +ls: cannot access '/​mnt/​scratch01/​jypeter/​Chrome_backup.zip':​ No such file or directory 
 + 
 +$ touch /​mnt/​scratch01/​jypeter/​new_file_from_wsl.txt 
 +jypeter@lsce5203:/​mnt/​scratch01/​jypeter$ ls -l /​mnt/​scratch01/​jypeter/​new_file_from_wsl.txt 
 +-rwxrwxrwx 1 root root 0 Jan 21 11:37 /​mnt/​scratch01/​jypeter/​new_file_from_wsl.txt 
 + 
 +# The new file has the correct (default) access rights on the Linux server 
 +>ls -l /​home/​scratch01/​jypeter/​new_file_from_wsl.txt 
 +-rw-r--r-- 1 jypeter lsce 0 Jan 21 11:37 /​home/​scratch01/​jypeter/​new_file_from_wsl.txt 
 +</code>
  
 === Enabling metadata === === Enabling metadata ===
  
-Some access rights handling can be partially corrected ​by automatically enabling the ''​metadata''​ mount option. This will allow you to use ''​chmod''/''​chown''​ on local NTFS disks (e.g. ''/​mnt/​c/​Users/​your_login''​). ​''​sudo -s''​ and then create a ''/​etc/​wsl.conf''​ with the following content:+Some access rights handling can be slightly improved ​by automatically enabling the ''​metadata''​ mount option. This will allow you to use ''​chmod''/''​chown''​ on **local NTFS disks** (disks directly connected to your computer, ​e.g. ''/​mnt/​c/​Users/​your_login''​).
  
-<​code>​[automount]+  - become //root// in a terminal with: ''​sudo -s''​ 
 +  - create a ''/​etc/​wsl.conf''​ with the following content:<​code>​[automount]
 options = "​metadata"</​code>​ options = "​metadata"</​code>​
  
 You need to [[other:​win10wsl#​rebooting_wsl|restart WSL+ubuntu]] to activate the new content of ''/​etc/​wsl.conf''​. See below an example of the ''​mount -l''​ output: You need to [[other:​win10wsl#​rebooting_wsl|restart WSL+ubuntu]] to activate the new content of ''/​etc/​wsl.conf''​. See below an example of the ''​mount -l''​ output:
   * Before: ''​C:​ on /mnt/c type drvfs (rw,​noatime,​uid=1000,​gid=1000,​case=off)''​   * Before: ''​C:​ on /mnt/c type drvfs (rw,​noatime,​uid=1000,​gid=1000,​case=off)''​
-  * After: ''​C:​ on /mnt/c type drvfs (rw,​noatime,​uid=1000,​gid=1000,​metadata,​case=off)''​+  * After enabling //​metadata//​: ''​C:​ on /mnt/c type drvfs (rw,​noatime,​uid=1000,​gid=1000,​metadata,​case=off)''​
  
-Optional: more details about [[https://​devblogs.microsoft.com/​commandline/​automatically-configuring-wsl/​|wsl.conf]] and [[https://​devblogs.microsoft.com/​commandline/​chmod-chown-wsl-improvements/​|metadata and access rights management]]+Optional: more details about ''​wsl.conf''​ in [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​wsl-config#​set-wsl-launch-settings|WSL launch settings]], ​[[https://​devblogs.microsoft.com/​commandline/​automatically-configuring-wsl/​|How to use wsl.conf]] and [[https://​devblogs.microsoft.com/​commandline/​chmod-chown-wsl-improvements/​|metadata and access rights management]]
  
 === On-the-fly mount === === On-the-fly mount ===
Line 494: Line 562:
 You have to create a //mount point// in the existing ''/​mnt''​ directory and then use the ''​mount''​ command You have to create a //mount point// in the existing ''/​mnt''​ directory and then use the ''​mount''​ command
  
-<​code>​$ sudo -s+<​code>​# Must be root for most '​mount'​ related commands 
 +$ sudo -s
  
-# Create the mount point (once)+# Create the mount point (once), e.g. for accessing /​home/​scratch01 on the local LSCE servers 
 +# This works when the Windows 10 computer is on the LSCE network
 $ mkdir /​mnt/​scratch01 $ mkdir /​mnt/​scratch01
  
 # Mount the remote disk # Mount the remote disk
 $ mount -t drvfs '​\\dfshost\dfs\scratch01'​ /​mnt/​scratch01 $ mount -t drvfs '​\\dfshost\dfs\scratch01'​ /​mnt/​scratch01
 +
 +# List the mounted disks
 +$ mount -l
 +[...]
 +\\dfshost\dfs\scratch01 on /​mnt/​scratch01 type drvfs (rw,​relatime,​case=off)
  
 # Unmount the disk, or just shutdown Windows or WSL when you are finished # Unmount the disk, or just shutdown Windows or WSL when you are finished
Line 527: Line 602:
  
 # Create the mount points (once) # Create the mount points (once)
-$ mkdir /mnt/home_jyp ​/mnt/scratch_jyp+# The example below is to access the LSCE /home/users and /​home/​scrath01 disks 
 +$ mkdir /mnt/users /mnt/scratch01
  
-# Make a backup copy of /etc/fstab+# Make a backup copy of /​etc/​fstab ​before modifying it (for safety reasons!)
 $ cp -p /etc/fstab /​etc/​fstab.bak $ cp -p /etc/fstab /​etc/​fstab.bak
  
Line 535: Line 611:
 $ cat /etc/fstab $ cat /etc/fstab
 LABEL=cloudimg-rootfs ​  / ​       ext4   ​defaults ​       0 0 LABEL=cloudimg-rootfs ​  / ​       ext4   ​defaults ​       0 0
-\\dfshost\dfs\users\jyp /mnt/home_jyp ​drvfs defaults 0 0 +\\dfshost\dfs\users /mnt/users drvfs defaults 0 0 
-\\dfshost\dfs\scratch01\jyp /mnt/scratch_jyp ​drvfs defaults 0 0+\\dfshost\dfs\scratch01 /mnt/scratch01 ​drvfs defaults 0 0
  
 # Try to mount all the disks in /etc/fstab # Try to mount all the disks in /etc/fstab
-$ mount -a</​code>​+$ mount -a
  
-=== Resources ​===+# Check the result 
 +$ mount -l 
 +[...] 
 +\\dfshost\dfs\users on /mnt/users type drvfs (rw,​relatime,​case=off) 
 +\\dfshost\dfs\scratch01 on /​mnt/​scratch01 type drvfs (rw,​relatime,​case=off) 
 +</​code>​ 
 + 
 +=== Accessing remote file systems with sshfs === 
 + 
 +FIXME 
 + 
 +It seems this can be done with a combination of [[https://​github.com/​billziss-gh/​winfsp|WinFsp]] and [[https://​github.com/​billziss-gh/​sshfs-win|SSHFS-Win]] (see [[https://​superuser.com/​questions/​1423371/​sshfs-remote-directory-mounting-syntax|SSHFS remote directory mounting syntax]] for details 
 + 
 +=== Extra resources ​===
  
 Useful ''​mount''​ options: Useful ''​mount''​ options:
Line 565: Line 654:
   * to force WSL to recognize drives that were still encrypted when the first terminal was started   * to force WSL to recognize drives that were still encrypted when the first terminal was started
  
-WSL can be rebooted (all the terminals and processed ​will be closed/​killed) by restarting the //WSL service// (''​LxssManager''​)+WSL can be rebooted ​by using either one of the following methods ​(the first is the easiest!). Warning: ​all the terminals and processes ​will be closed/killed
 +  * from a //Windows PowerShell// (no need to run as administrator):​\\ type ''​wsl %%--%%terminate Ubuntu''​
   * from the //​Services//​ tab of the Task manager or the //​Services//​ program (launch ''​services.msc''​)   * from the //​Services//​ tab of the Task manager or the //​Services//​ program (launch ''​services.msc''​)
     * Right-click on the ''​LxssManager''​ service and select //Restart//     * Right-click on the ''​LxssManager''​ service and select //Restart//
Line 573: Line 663:
 Source: google ''​wsl lxssmanager''​ ([[https://​www.how2shout.com/​how-to/​how-to-reboot-wsl-windows-subsystem-linux-in-windows-10.html|most usable answer]]) Source: google ''​wsl lxssmanager''​ ([[https://​www.how2shout.com/​how-to/​how-to-reboot-wsl-windows-subsystem-linux-in-windows-10.html|most usable answer]])
  
-==== Creating a backup ====+==== Creating a backup ​of the Linux running in WSL ====
  
-Best thing is probably to create tar file of the user's home directory, and get list of installed applications ​and updated settings ​(e.g ''​/etc/fstab''​)+There are several types of WSL related directories that you may want to back up: 
 +  * <wrap hi>Your Linux //home// directory</​wrap>​ (''/​home/<​your_login>''​),​ or some specific sub-directories of the //Ubuntu// running in WSL (sub-directories of ''/''​):​ all these files are located in a [[other:​win10wsl#​location_of_the_files|hidden sub-directory of you Windows directory]],​ and the best way to save them is probably to **create ​tar file from Linux**, and put this tar file in specific Windows folder 
 +    * <code bash>$ cd /home 
 +# $ du -sh <​your_login>​ 
 +$ du -sh $USER 
 +232K    <​your_login>​ 
 +# $ tar cfz /​mnt/​c/​Scratch/<​your_login>/<​your_login>​_home_<​some_date>​.tgz <​your_login>​ 
 +$ tar cfz /​mnt/​c/​Scratch/​$USER/​${USER}_home_`date +%y%m%d_%H%M`.tgz $USER 
 +</​code>​ 
 +  * <wrap hi>​Regular Windows folders</​wrap>​ where you store data used by WSL: you can use ''​tar''​ in a Linux terminal, as above, or use any usual way of backing up Windows files (drag and drop, some specific [[other:​win10apps#​backup_software|backup software]]) 
 +  * <wrap hi>The **full** Linux/​Ubuntu installation</​wrap>​ running in WSL (based on [[https://​docs.microsoft.com/en-us/windows/​wsl/​faq#​how-can-i-back-up-my-wsl-distros-or-move-them-from-one-drive-to-another|How can I back up my WSL distros?​]]). The following steps will save the full installation in a tar file, that can be used later for restoring the full installation (//​restoration//​ not tested yet) 
 +    * Open a Windows terminal (preferably a //​PowerShell//​ if you need easy copy/​paste) 
 +    * Determine the name of the current Linux installation used in WSL 
 +      * <​code>>​ wsl --list --all 
 +Distributions du sous-système Windows pour Linux : 
 +Ubuntu (par défaut)</​code>​ 
 +    * [[other:​win10wsl#​rebooting_wsl|Stop WSL+Linux]] 
 +    * Export the current Linux to a tar file: ''​wsl %%--%%export Ubuntu C:​\Scratch\<​your_login>​\<​your_login>​_ubuntu-full_<​some_date>​.tar''​ 
 +    * You can optionally open a new terminal (this will start again WSL+Ubuntuto get some information about the created file (size and number of saved files/​directories),​ and compress it to save some space 
 +      * <​code>​$ cd /​mnt/​c/​Scratch/<​your_login>​ 
 +$ ls -lh <​your_login>​_ubuntu-full_200514.tar 
 +2.6G May 14 16:29 <​your_login>​_ubuntu-full_200514.tar 
 +$ tar tvf <​your_login>​_ubuntu-full_200514.tar | wc -l 
 +105600 
 +$ gzip <​your_login>​_ubuntu-full_200514.tar 
 +$ ls -lh <​your_login>​_ubuntu-full_200514.tar.gz 
 +976M May 14 16:29  
 +</​code>​ 
 + 
 +==== Restoring a WSL backup ==== 
 + 
 +FIXME Read [[https://​www.howtogeek.com/​426562/​how-to-export-and-import-your-linux-systems-on-windows-10/​|How to Export and Import Your Linux Systems on Windows 10]] and [[https://​winaero.com/​blog/​export-import-wsl-linux-distro-windows-10/​|Export and Import WSL Linux Distro in Windows 10]] and similar threads 
 + 
 +FIXME Check if [[https://​wslhub.com/​|WSL Manager]] is maintained and can be useful
  
-Check [[https://askubuntu.com/questions/9135/how-to-backup-settings-and-list-of-installed-packages|How to backup settings ​and list of installed packages]]+This assumes that you have followed the steps above to create a full backup of your Linux distribution in a ''​ubuntu_<​your_login>​_<​some_date>​.tar''​ file. This file can theoretically be restored with: 
 +  * ''​wsl %%--%%import <​DistributionName>​ <​InstallLocation>​ ubuntu_<​your_login>​_<​some_date>​.tar''​ 
 +    * Note: found a page mentioning that you should be in a terminal with admin rights when using ''​%%--%%import''​ 
 +    * Can we use the same ''<​DistributionName>''​ (e.g. ''​Ubuntu''​) as the one we are trying to restore without first removing it with ''​unregister''​ ([[https://docs.microsoft.com/en-us/​windows/wsl/wsl-config#​unregister-and-reinstall-a-distribution|Unregister ​and reinstall a distribution]])?​ 
 +    * If we use a new distribution name, it will probably not appear anymore in the Microsoft Store and will not be updated. Is this a problem? 
 +    * It seems we can use ''<​InstallLocation>''​ to install anywhere! What should we do if we want to restore to the default location (in the hidden directory)?​ 
 +      * Can we install out of the current user's Windows folder? 
 +      * Can we install out of ''​C:​\''?​ 
 +    * Can we restore (//clone//) a backed up Linux distribution on another Windows 10 computer for another user? 
 +      * if the default user (and its password) has to be changed, you probably have to follow the steps to [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​user-support#for-fall-creators-update-and-later|reset the Linux password]] and find a way to create a new account when the ''​root''​ password is activated
 ==== Uninstalling WSL ==== ==== Uninstalling WSL ====
  
Line 586: Line 718:
   * and then disable WSL???   * and then disable WSL???
 ===== Other WSL resources and links ===== ===== Other WSL resources and links =====
 +
 +  * [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​release-notes|Release Notes for Windows Subsystem for Linux]]
  
   * [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​faq|Frequently Asked Questions]]   * [[https://​docs.microsoft.com/​en-us/​windows/​wsl/​faq|Frequently Asked Questions]]
other/win10wsl.1579193215.txt.gz · Last modified: 2020/01/16 17:46 by jypeter