Jak zalogować się jako inny użytkownik, jak uruchomić programy GUI?
thufir@doge:~$
thufir@doge:~$ sudo -u hawat -i
hawat@doge:~$
hawat@doge:~$ whoami
hawat
hawat@doge:~$
hawat@doge:~$ pwd
/home/hawat
hawat@doge:~$
hawat@doge:~$ echo $HOME
/home/hawat
hawat@doge:~$
hawat@doge:~$ firefox
No protocol specified
Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused
Error: cannot open display: :0
hawat@doge:~$
Ta odpowiedź działa na moim Ubuntu 16.04 i Mir (z niewielkimi modyfikacjami):
Uruchom polecenie x jako inny użytkownik za pomocą xauth
Wrapper bash script:
Dla wygody stworzyłem skrypt bash , który możesz pobrać
/usr/local/bin/xsudo
i oznaczyć jako wykonywalny (chmod +x /usr/local/bin/xsudo
).Następnie po prostu uruchom:
Potencjalne alternatywy:
pam_xauth
(s. Tej odpowiedzi ). Jednak z jakiegoś powodu to nie działa. (Nadal pojawia się błąd związany z niemożnością nawiązania przez firefox połączenia z wyświetlaczem o godzinie: 0)xhost +local:
lub podobnego, który będzie uczynićgksudo -u hawat firefox
pracę bez skryptu otoki. Należy jednak pamiętać, że powoduje to lukę w zabezpieczeniach : każdy aktywny użytkownik na lokalnym hoście będzie miał dostęp do klawiatury, myszy, ekranu itp.źródło
Po spędzeniu o wiele za dużo czasu odkryłem, że z Gnome na Ubuntu 16.04 poprawna wartość nie jest taka
DISPLAY=:1
,DISPLAY=:0
jaka była od niepamiętnych czasów.źródło
eksport WYŚWIETLANIE =: 0 działa dobrze, ale jest to rozwiązanie tymczasowe, ponieważ musisz wpisać to za każdym razem, gdy otwierasz terminal.
Stałe rozwiązanie: Problem może być spowodowany zmienną env_keep w / etc / sudoers. Dodaj następujący wiersz na końcu pliku / etc / sudoers, używając gedit lub sudo visudo
Uwaga: pamiętaj, aby zawsze używać „+ =” podczas dodawania do env_keep. W przypadku, gdy istnieją inne env_keep z „=” zmień je na „+ =”, ponieważ użycie „=” zastąpi inne wartości.
źródło
visudo
otoki, która zapewnia pewne sprawdzanie poprawności przed napisaniem nowego pliku sudoers.