How can I change my MinGW/MSYS + mintty home directory?

Posted on

QUESTION :

I use mintty as my console emulator for MinGW/MSYS. Recently (I’m not certain exactly when), the home directory used by this combination changed from my Windows user folder (/c/Users/<me>/) to /home/<me>/, which is causing minor havoc for me.

How can I change my home directory back? I’ve done some searching online, but all of the information I’ve been able to find so far is Cygwin-specific and hasn’t translated well to MinGW/MSYS.

The most likely-looking avenues I’ve pursued so far are /etc/passwd and /etc/nsswitch.conf, both of which are entirely absent from MSYS’ root. I’ve tried creating an /etc/nsswitch.conf containing a db_home: windows line, but this seemed to have no effect. I’ve not yet tried creating an /etc/passwd file as mkpasswd isn’t present in MinGW/MSYS and I don’t know what its contents should be.

I’m running:

  • Windows 10 (w/ Anniversary Update)
  • the latest version of all my installed MinGW and MSYS packages
  • …including msys-mintty 1.0.3-1-msys-1.0.17

ANSWER :

Unlike Cygwin, MSYS relies on the HOME environment variable. To set or change your HOME variable:

  1. Press Winr on your keyboard or select “Run…” from the Start menu.
  2. Type “sysdm.cpl” and click OK.
  3. Select the Advanced tab and click Environment Variables…
  4. Click New… to create a new HOME variable or select the existing one and click Edit…
  5. When finished, keep clicking OK until all windows are closed.

The solution for MSYS2 is creating/updating /etc/nsswitch.conf with a line

db_home: windows

as described in Cygwin docs: https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch-home.

After that all MSYS applications and terminals must be closed, as the configuration is only read once at MSYS DLL load time. (See https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch.)

As of Oct, 2019, it works for me in a fresh installation of MSYS2. Probably, in MSYS 1 nsswitch.conf was not supported.

Creating HOME environment variable works for shell, but does not work for ssh, which tries to access /home/User/.ssh anyway.

Leave a Reply

Your email address will not be published. Required fields are marked *