477

Some time ago, when I installed Ubuntu, I chose a rather stupid username for my account that I do not want to use anymore.

How do I change this (including the name of my home directory, and the name in the terminal) without losing settings for applications?
How do I keep permissions and my keys for various authentification (e.g. email, SSH, GPG and more)?
What settings could possibly get lost if I changed my username?

1
  • 1
    Why can't we navigate to /usr/share/applications/users.desktop >> Click on the user for which the name has to be changed. >> Click on Change User name >> Change the name >> Click on Ok. I think, this would be the easiest way to change the username, wouldn't it?
    – Anand
    Jul 22, 2019 at 10:46

8 Answers 8

513

Unix-like operating systems decouple the user name from the user identity, so you may safely change the name without affecting the ID. All permissions, files, etc are tied to your identity (uid), not your username.

To manage every aspect of the user database, you use the usermod tool.

To change username and user's groupname (it is probably best to do this without being logged in):

sudo usermod -l newUsername oldUsername
sudo groupmod -n newUsername oldUsername

This however, doesn't rename the home folder.

To change home-folder, use

sudo usermod -d /home/newHomeDir -m newUsername

after you changed the username.

For instance, you could logout, drop to a console (Ctrl+Alt+F1), and sudo su - to become true root (as opposed to sudo -s, where $HOME is still /home/yourname.) Maybe you also have to kill some still running processes from this user first. To do so, enter ps -u username, look for the matching PID and kill them by kill PID-number.

Update: as arrange mentioned, some files may reference your old home directory. You can either keep a symlink for backward compatibility, e g ln -s /home/newname /home/oldname or you can change the file contents with sed -i.bak 's/*oldname*/*newname*/g' *list of files* It creates a backup for each file with a .bak extension.

Some additional information for not so experienced users like me:
As I only have ONE user account (administrator), it would not let me change the username ("you are already logged in" was the response in TTY1 (Ctrl+Alt+F1). To get around this:

  1. Login with your old credentials and add a new user, e.g. "temporary" in TTY1:

    sudo adduser temporary
    

set the password. 2. Allow the temporary user to run sudo by adding the user to sudo group:

    sudo adduser temporary sudo
  1. Log out with the command exit.

  2. Return to tty1: Login with the 'temporary' user account and password. Change your username and folder as mentioned above. exit (until you get the login prompt)

  3. Go back to TTY7 (Ctrl+Alt+F7) to login on the GUI/normal desktop screen and see if this works.

  4. Delete temporary user and folder:

    sudo deluser temporary
    sudo rm -r /home/temporary
    
18
  • 12
    This is unfortunately not true for different configuration files under $HOME, try running something like grep -IRFl /home/username ~ and you will see how many references to your home directory are stored there.
    – arrange
    Apr 8, 2011 at 9:17
  • 2
    Was a simple fix -- Just had to use the User Accounts editor in unity, followed by restart.
    – Steve Koch
    Feb 24, 2014 at 17:29
  • 6
    For those with an encrypted home folder, you'll have to edit /home/.ecryptfs/oldusername/.ecryptfs/Private.mnt to point to your new home folder, else you won't be able to login via Unity.
    – raphael
    Jan 22, 2016 at 21:57
  • 3
    @JTC never edit sudoers with plain nano. Always use visudo. Jan 4, 2018 at 11:09
  • 5
    You would need to change the group as well: sudo groupmod -n new-name current-name
    – Alessandro
    Oct 9, 2018 at 9:43
157

To put it all together:

  1. Log out of your session or restart your computer to get back to the start screen.

  2. At the start screen go to a console mode tty. Press Ctrl+Alt+F1 (on some Ubuntu revisions this may be Ctrl+Alt+F2 instead)

  3. Log in using your username and password.

  4. Set a password for the "root" account.

     sudo passwd root
    
  5. Log out.

     exit
    
  6. Log in using the "root" account and the password you have previously set.

  7. Change the username and the home folder to the new name that you want.

     usermod -l <newname> -d /home/<newname> -m <oldname>
     usermod -c "newfullname" <newname>
    

    "newfullname" is the fifth column in /etc/passwd, and might be "First Last", for instance.

  8. Change the group name to the new name that you want.

     groupmod -n <newgroup> <oldgroup>
    
  9. Lock the "root" account so it no longer has a valid password that can be used to log in as root.

     passwd -l root
    
  10. If you were using ecryptfs (encrypted home directory). Mount your encrypted directory using ecryptfs-recover-private and edit <mountpoint>/.ecryptfs/Private.mnt to reflect your new home directory.

  11. Log out.

    exit
    
  12. Press Ctrl+Alt+F7 to go back to the Ubuntu graphics mode login screen (on some Ubuntu revisions this may be Ctrl+Alt+F1).

And now you can log in using your new username.

15
  • 11
    If after usermod -l you get a user <oldname> is currently used by process <processno>, you can find that process (probably a daemon, or tmux/screen) using ps aux | grep <processno>. You might want to gracefully stop that process, otherwise you can kill <processno>.
    – RedPixel
    Sep 30, 2015 at 8:46
  • 1
    Thank you for putting this comment together. It was very useful. Two things that might be mentioned though. After step 4 I rebooted so I wouldn't get error messages at step 6. Also, after this process is complete, the /etc/passwd file will have and ID comment matching the old username. This will cause the login screen to display the old login name. I couldn't find a decent way to fix it from the command line, but I did fix it by logging into the user account, going to the account settings and changing the "Login Name" to the username. This updated the /etc/passwd file and fixed the problem.
    – Jibbers
    Mar 28, 2016 at 17:17
  • 1
    This is the most easy and fool-proof way to do it. It's better reboot after step 4 as @Jibbers suggested.
    – Yerke
    Apr 8, 2016 at 5:45
  • I'd mention that the "bookmarks in the File browser windows" are now pointing to the old folders, so I have to delete those bookmarks.
    – ollydbg23
    Jun 4, 2016 at 8:47
  • 2
    If doing this over SSH, you need to enable root login in SSHD config for a moment. Go sudo nano /etc/ssh/sshd_config uncomment PermitRootLigin and change the value to yes. Restart SSH sudo systemctl restart sshd. After you've modified the user using root, put everything back to how it was ie lock root account and disable remote root login.
    – TimD
    Mar 9, 2020 at 6:47
32

Restart in recovery mode and go to the root prompt shell ("Drop to root shell prompt")

First remount the root

mount -o remount,rw /

To change the username and home folder name,

usermod -l <newname> -d /home/<newname> -m <oldname>

For group name,

groupmod -n <newgroup> <oldgroup>
3
  • 1
    when I use usermod -l <newname> -d /home/<newname> -m <oldname> this gives me error usermod: user oldusername is currently used by process 3170 and if I kill the process still it gives me the same error. using ubuntu 13.10
    – Waqas
    Nov 24, 2013 at 13:48
  • 4
    DO NOT DO THIS IF YOUR HOME DIRECTORY IS ENCRYPTED!!!! I followed this procedure and it sent me for a wild 2 hour ride... The only way to recover is to perform this procedure again and put the original (disliked) name back in. The problem you will have is "Cannot chdir into mount point"
    – Mike
    Oct 28, 2016 at 12:21
  • Why can't we navigate to /usr/share/applications/users.desktop >> Click on the user for which the name has to be changed. >> Click on Change User name >> Change the name >> Click on Ok. I think, this would be the easiest way to change the username, wouldn't it?
    – Anand
    Jul 22, 2019 at 10:46
9

On Ubuntu 13.10, 14.04, 16.04:

  1. Click on the "System Settings" icon.
  2. Click on "User Accounts".
  3. Your administrator account should be displayed.
  4. Click on the "Unlock" button.
  5. Enter your user password as requested to allow changes to your account.
  6. Once unlocked, you can click on your old user name that you wish to change and type in a new user name to replace it.
  7. When you have typed in the new name, click on the "Lock" button to make the change permanent.
  8. Restart Ubuntu.
1
  • 13
    This did not change the username for me, just the name. The old username still appears in the terminal, and as the home directory and group (even after rebooting).
    – DougC
    Mar 7, 2018 at 19:30
3

When receiving usermod: can't change /etc/password just run the following commands:

In the root recovery console run:

mount -o remount,rw /

Then rerun:

usermod -l <newname> -d /home/<newname> -m <oldname>
1
  • Why can't we navigate to /usr/share/applications/users.desktop >> Click on the user for which the name has to be changed. >> Click on Change User name >> Change the name >> Click on Ok. I think, this would be the easiest way to change the username, wouldn't it?
    – Anand
    Jul 22, 2019 at 10:46
1

when you do usermod -l <newname> -d /home/<newname> -m <oldname> you will get useradd: can't change /etc/passwd error message to avoid this just add sudo -- to above command like

sudo -- usermod -l <newname> -d /home/<newname> -m <oldname>

and

sudo --  groupmod -n <newgroup> <oldgroup>
1

The answer listed here by @karthick87 works perfectly fine but here is what I would do just to be safe and avoid all glitches:

  1. Create a separate account/user and make sure this account/user root capabilities or login as any root-able user.
  2. Logout with the current account and then login with the account mentioned in step 1.
  3. Kill all the processes of the previous user.
  4. Now follow the steps mentioned by @karthick87 and change username and also the home directory owner.
  5. Then follow @Sriraj Hebbar's answer to change the group name.
  6. logout with the spare user and login with your user. If you created an extra user delete it.
-1

Since not all the linuces (however Ubuntu must have it) have the usermod app, there is the way you can do it manually. As of root open /etc/passwd to edit with vim or any other editor presening in the system:

sudo vim /etc/passwd

and change the user's name at the beginning of a line:

user:x:500:501:username:home/user:/bin/bash

to:

newuser:x:500:501:username:home/user:/bin/bash

then if you worked of root just login, and if you have been logged in as a user, logoff, and relogin.

Of course you have to fix /etc/shadow, and /etc/group also to the system works properly. Thanx to @JohanBoulé

NOTE: You should use this approach carefully, to not break the system.

NOTE: This approach is common, not only for Ubuntu, but and for ubuntu it will work, however google search will show it event for non ubuntu search, for example for embedded linux

13
  • I tried this way (before I discovered the usermod command) and the user's password is no longer accepted.
    – Ben Voigt
    May 11, 2016 at 17:51
  • @BenVoigt not all the pcs have the usermod May 11, 2016 at 18:25
  • 4
    It's Ubuntu! If it doesn't have usermod your install is broken as it is part of the passwd package, which is required.
    – Auspex
    Mar 6, 2017 at 14:10
  • @Auspex I know that here is the ubuntu QA, but this approach is common, not only for ubuntu, but and for ubuntu it will work, however google search will show it event for non ubuntu search, for example for embedded linux Jan 3, 2021 at 20:43
  • 1
    I also do it this way regardless of whether usermod or whatever pseudo magical obscure opaque command exists because I find it simpler to remember, and it doesn't bug me with running processes. You need to edit /etc/passwd and /etc/shadow at the minimum, and also /etc/group if you want to have a group with the same name as the user. Jan 3, 2021 at 20:44

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .