21

I have ubuntu + x11 + gnome.

I want to run a graphical application as another user.

However, when I start it from the command line using sudo -u otheruser app I get the error "No protocol specified".

How can I work arround this?

flybywire
  • 261,858
  • 191
  • 397
  • 503

7 Answers7

13

xhost '+si:localuser:USERNAME'

mykhal
  • 19,175
  • 11
  • 72
  • 80
8

Execute this command first:

$ sudo xhost +

Then run the command you want as the other user:

$ sudo -i -u username
$ command you want to run

When you are done:

$ sudo xhost -
Justin Weeks
  • 368
  • 3
  • 5
codeape
  • 97,830
  • 24
  • 159
  • 188
  • Nice find. Now Chrome and Flash runs fine as different user, but to get audio you need to pkill the pulseaudio-daemon of the current user first. – Stefan Steiger Apr 30 '11 at 11:32
  • 8
    `sudo xhost +local:` if you don't want connections from the internet – maxy Jul 24 '11 at 11:57
  • 1
    `xhost +` is **highly unsafe**: It will allow any user to connect to your X session and open windows to you. – trapicki May 22 '17 at 18:29
  • xhost +username to add username to list of users with access to the X server. Then xhost -username to remove that user afterwards – miller the gorilla Oct 25 '18 at 08:09
3

Use

xdg-su -u user -c command
Robert Munteanu
  • 67,031
  • 36
  • 206
  • 278
2

Most solutions provided here don't integrate with Wayland and PulseAudio.

I wrote ego (Alter Ego) for this use case, it automatically handles xhost and Wayland and PulseAudio socket sharing: https://github.com/intgr/ego

So you just run ego app or ego -u somebody app

If you run into problems, please open an issue on GitHub. I may be the only user of it, so it hasn't gotten much testing yet.

(And I notice that I'm a decade late with this answer, but hopefully it will help somebody :D)

intgr
  • 19,834
  • 5
  • 59
  • 69
1

You probably need to tell your X server to accept connections from another user than the one owning the server instance (you). Look into the xhost command.

unwind
  • 391,730
  • 64
  • 469
  • 606
0

gksudo -u command

0
gksu -u <user> -c <command>

Replace <user> with the username to run the command as, and <command> with the command you want to run. Remember that the program will be run in the <user>s context, but in the current directory.

In the popping up window, enter the password of the target <user> of course.

trapicki
  • 1,881
  • 1
  • 18
  • 24