Wie starte ich GUI-Programme, nachdem ich mich als ein anderer Benutzer angemeldet habe?
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:~$
Diese Antwort funktioniert auf meinem Ubuntu 16.04 und Mir (mit leichten Anpassungen):
Führen Sie den Befehl x mit xauth als anderer Benutzer aus
Wrapper-Bash-Skript:
Der Einfachheit halber habe ich ein Wrapper-Bash-Skript erstellt , das Sie möglicherweise herunterladen
/usr/local/bin/xsudo
und als ausführbar markieren möchten (chmod +x /usr/local/bin/xsudo
).Dann einfach ausführen:
Mögliche Alternativen:
pam_xauth
(s. Diese Antwort ) untersuchen. Dies funktioniert jedoch aus irgendeinem Grund nicht für mich. (Ich erhalte immer noch die Fehlermeldung, dass Firefox unter: 0 keine Verbindung zum Display herstellen kann.)xhost +local:
oder ähnlich, die werden machengksudo -u hawat firefox
Arbeit ohne Wrapper - Skript. Beachten Sie jedoch, dass dies eine Sicherheitslücke öffnet : Jeder aktive Benutzer auf Ihrem lokalen Host kann auf Tastatur, Maus, Bildschirm usw. zugreifen.quelle
Nachdem ich viel zu viel Zeit damit verbracht hatte, stellte ich fest, dass mit Gnome unter Ubuntu 16.04 der korrekte Wert
DISPLAY=:1
nicht mehrDISPLAY=:0
so ist wie seit Urzeiten.quelle
export DISPLAY =: 0 funktioniert einwandfrei , dies ist jedoch eine vorübergehende Lösung, da Sie dies jedes Mal eingeben müssen, wenn Sie das Terminal öffnen.
Permanente Lösung: Das Problem liegt möglicherweise an der Variablen env_keep in / etc / sudoers. Fügen Sie die folgende Zeile mit gedit oder sudo visudo am Ende von / etc / sudoers hinzu
Hinweis: Denken Sie daran, beim Hinzufügen zu env_keep immer "+ =" zu verwenden. Falls es andere env_keep mit "=" gibt, ändern Sie diese in "+ =", da die Verwendung von "=" andere Werte überschreibt.
quelle
visudo
Wrapper, der eine gewisse Überprüfung der Integrität vor dem Schreiben einer neuen sudoers-Datei bietet.