Search code examples
javalinuxsudo

How to discover linux username with administrator privileges in Java


I created a program which needs administrator privileges to be executed (in this program I am using a port which is <1024).
So I use this command to execute:

sudo java -jar example.jar

In my program I try to create a folder in this path:

Paths.get("/home/" + System.getProperty("user.name"))

The problem is that System.getProperty("user.name") answers with "root" and so my new directory is in "/home/root/", but I want it in "/home/my_username".
My question is: how can I discover my username and then create the new folder in the right path?


Solution

  • If you do

    sudo whoami
    

    it responds with

    root
    

    however if I do

    sudo bash -c 'echo $SUDO_USER'
    

    I get

    peter
    

    You do this from Java with

    String user = System.getenv("SUDO_USER");
    if (user == null)
        user = System.getProperty("user.name");